Skip to main content

Agents

Agents are workflow-powered assistants that run as persistent pods with function calling, memory, and tools. Use this resource to create and configure an agent, control its pod, manage conversation threads, chat (streamed), and upload knowledge.

Access it as client.agents on a Strongly client, or the same path on AsyncStrongly with await. All methods exist on both with identical signatures.

Quick start

from strongly import Strongly

client = Strongly()

# List (auto-paginates as you iterate) # filters: status, search
for agent in client.agents.list():
print(agent.id)

Methods

Core

list

list(*, status: Optional[str] = None, search: Optional[str] = None, limit: Optional[int] = None) -> SyncPaginator[Agent]

List agents with pagination and filtering.

Args: status: Filter by status ("running", "stopped", "starting"). search: Search by agent name. limit: Maximum number of items to return (default: all matching items).

create

create(*, name: str, description: Optional[str] = None, nodes: Optional[Sequence[Mapping[str, Any]]] = None, connections: Optional[Sequence[Mapping[str, Any]]] = None) -> Dict[str, Any]

Create a new agent.

Creates a workflow in agent mode.

Args: name: Agent name (required). description: Human-readable description. nodes: Workflow node definitions. connections: Workflow connection definitions.

retrieve

retrieve(agent_id: str) -> Agent

Get detailed agent information including live status.

Args: agent_id: Agent workflow ID.

update

update(agent_id: str, *, name: Optional[str] = None, description: Optional[str] = None, nodes: Optional[Sequence[Mapping[str, Any]]] = None, connections: Optional[Sequence[Mapping[str, Any]]] = None, config: Optional[Mapping[str, Any]] = None) -> Dict[str, Any]

Update an agent's configuration.

Args: agent_id: Agent workflow ID. name, description, nodes, connections: Workflow-level fields to update. config: Runtime config applied to a running agent pod.

delete

delete(agent_id: str) -> None

Delete an agent - stops pod, removes agent mode, cleans up records.

Args: agent_id: Agent workflow ID.

Lifecycle & actions

start

start(agent_id: str) -> Dict[str, Any]

Start an agent pod.

Creates a persistent Kubernetes pod running the agent server.

Args: agent_id: Agent workflow ID.

Returns: Dict with agent_id, pod_ip, success.

stop

stop(agent_id: str) -> Dict[str, Any]

Stop a running agent pod.

Args: agent_id: Agent workflow ID.

redeploy

redeploy(agent_id: str) -> Dict[str, Any]

Apply pending brain-config changes to a running agent by stopping and re-starting the pod. No-op when no pod is running - the next start picks up the latest config either way.

promote

promote(workflow_id: str) -> Dict[str, Any]

Promote a workflow to agent mode.

The workflow must contain at least one agent node.

Args: workflow_id: Workflow ID to promote.

Other

analytics

analytics(agent_id: str, *, days: int = 30) -> AgentAnalytics

Get agent analytics - sessions, tokens, success rate, daily activity.

Args: agent_id: Agent workflow ID. days: Number of days to look back (default: 30).

attach_skill

attach_skill(agent_id: str, *, skill_id: str, editable: Optional[bool] = None, auto_connected: Optional[bool] = None, connected_by: Optional[str] = None) -> Dict[str, Any]

Attach a skill to an agent.

Args: agent_id: Agent workflow ID. skill_id: Skill id to attach (required). editable: Whether the agent may edit the skill (default true server-side). auto_connected: Whether the skill was auto-connected (default true server-side). connected_by: Who attached the skill (default agent server-side).

chat

chat(agent_id: str, thread_id: str, message: str) -> Iterator[Dict[str, Any]]

Send a message to an agent and stream the response.

Yields SSE events as dictionaries. Each event has an event field (e.g., "thread.message.delta") and a data field with the payload.

Args: agent_id: Agent workflow ID. thread_id: Thread ID for the conversation. message: Message to send.

Yields: SSE event dictionaries.

Example::

for event in client.agents.chat("wf_abc", "thread_123", "/help"): if event.get("event") == "thread.message.delta": content = event["data"]["delta"].get("content", "") print(content, end="") elif event.get("event") == "thread.run.completed": print("\n--- Done ---")

config

config(agent_id: str) -> Dict[str, Any]

Read the agent's current config - personality, operating prompt reference, context policy, session policy, heartbeat, primary model, fallback models, plus whether the agent pod is running.

create_artifact

create_artifact(agent_id: str, *, title: str, content: str, artifact_type: Optional[str] = None, thread_id: Optional[str] = None, summary: Optional[str] = None, skill_id: Optional[str] = None, tags: Optional[Sequence[str]] = None, metadata: Optional[Mapping[str, Any]] = None) -> Dict[str, Any]

Record a new agent artifact.

Args: agent_id: Agent workflow ID. title: Artifact title (required). content: Artifact content (required). artifact_type: Artifact type (default html_report server-side). thread_id: Originating thread id. summary: Short summary. skill_id: Skill that produced the artifact. tags: Categorization tags. metadata: Arbitrary metadata blob.

create_thread

create_thread(agent_id: str, *, title: Optional[str] = None) -> AgentThread

Create a new conversation thread.

Args: agent_id: Agent workflow ID. title: Thread title (default: "New Conversation").

delete_artifact

delete_artifact(agent_id: str, artifact_id: str) -> None

Delete an agent artifact.

delete_thread

delete_thread(agent_id: str, thread_id: str) -> None

Delete a conversation thread.

Args: agent_id: Agent workflow ID. thread_id: Thread ID to delete.

detach_skill

detach_skill(agent_id: str, skill_id: str) -> Dict[str, Any]

Remove a skill from an agent.

list_artifacts

list_artifacts(agent_id: str) -> Dict[str, Any]

List artifacts the agent has produced.

list_skills

list_skills(agent_id: str) -> Dict[str, Any]

List skills attached to an agent.

list_threads

list_threads(agent_id: str) -> List[AgentThread]

List conversation threads for an agent.

Args: agent_id: Agent workflow ID.

retrieve_artifact

retrieve_artifact(agent_id: str, artifact_id: str) -> Dict[str, Any]

Get a single agent artifact.

status

status(agent_id: str) -> AgentStatus

Get the current status of an agent pod.

Args: agent_id: Agent workflow ID or pod ID.

update_context_policy

update_context_policy(agent_id: str, *, kind: str, token_budget: int, keep_recent: int) -> Dict[str, Any]

Write the agent's context policy. kind is one of window / summarise / hierarchical. Requires a redeploy.

update_model

update_model(agent_id: str, model_id: str, fallback_model_ids: Optional[List[str]] = None) -> Dict[str, Any]

Swap the agent's primary model and (optionally) its ordered fallback list. The platform rebuilds the runtime services bundle on save; call redeploy afterwards to bring up a pod on the new model.

update_operating_prompt

update_operating_prompt(agent_id: str, operating_prompt_id: Optional[str]) -> Dict[str, Any]

Point the agent at a Library prompt. None resets to the platform default. Operating-prompt edits live-reload on the agent's next turn - no redeploy needed.

update_personality

update_personality(agent_id: str, personality: str) -> Dict[str, Any]

Set the inline personality paragraph. Requires a redeploy via redeploy to take effect on a running agent.

update_skill

update_skill(agent_id: str, skill_id: str, *, editable: bool) -> Dict[str, Any]

Update a skill attachment's editable flag on an agent.

upload_knowledge

upload_knowledge(agent_id: str, file: Union[str, Path, BinaryIO], *, description: Optional[str] = None, tags: Optional[str] = None, document_id: Optional[str] = None) -> KnowledgeUploadResult

Upload a document to the agent's knowledge base.

The file is sent to the agent's knowledge-upload workflow which parses it (PDF, PPTX, TXT, MD, HTML, CSV - with OCR fallback for scanned PDFs), chunks the text, generates embeddings, and stores them in the agent's Milvus vector database.

Args: agent_id: Agent workflow ID. file: Path to a file, or a file-like object opened in binary mode. description: Human-readable description of the document. tags: Comma-separated tags for categorization. document_id: Custom document ID. Auto-generated if omitted.

Returns: KnowledgeUploadResult with document_id, filename, file_size, execution_id, and status.

Example::

result = client.agents.upload_knowledge( "wf_abc123", "brand-guide.pdf", description="Company brand guidelines", tags="brand,guide", ) print(f"Ingesting {result.filename} → {result.status}")