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, and manage conversation threads and chat (streamed). An agent's knowledge bases are on client.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: str | None = None, search: str | None = None, limit: int | None = None) -> SyncPaginator[Agent]
List agents with pagination and filtering.
Parameters
status(str | None, optional): Filter by status ("running","stopped","starting").search(str | None, optional): Search by agent name.limit(int | None, optional): Maximum number of items to return (default: all matching items).
create
create(*, name: str, description: str | None = None, nodes: Sequence[Mapping[str, Any]] | None = None, connections: Sequence[Mapping[str, Any]] | None = None) -> Agent
Create a new agent.
Creates a workflow in agent mode.
Parameters
name(str): Agent name (required).description(str | None, optional): Human-readable description.nodes(Sequence[Mapping[str, Any]] | None, optional): Workflow node definitions.connections(Sequence[Mapping[str, Any]] | None, optional): Workflow connection definitions.
retrieve
retrieve(agent_id: str) -> Agent
Get detailed agent information including live status.
Parameters
agent_id(str): Agent workflow ID.
update
update(agent_id: str, *, name: str | None = None, description: str | None = None, nodes: Sequence[Mapping[str, Any]] | None = None, connections: Sequence[Mapping[str, Any]] | None = None) -> dict[str, Any]
Update an agent's name, description or graph (only the fields given change).
The agent's brain settings (personality, operating prompt, context policy) are
update_personality, update_operating_prompt and
update_context_policy.
Parameters
agent_id(str): Agent workflow ID.name, description, nodes, connections: Workflow-level fields to update.
delete
delete(agent_id: str) -> None
Delete an agent - stops pod, removes agent mode, cleans up records.
Parameters
agent_id(str): Agent workflow ID.
Lifecycle & actions
start
start(agent_id: str) -> Agent
Start an agent pod.
Creates a persistent Kubernetes pod running the agent server.
Parameters
agent_id(str): Agent workflow ID.
Returns
dict[str, Any]: Dict withagent_id,pod_ip,success.
stop
stop(agent_id: str) -> Agent
Stop a running agent pod.
Parameters
agent_id(str): Agent workflow ID.
redeploy
redeploy(agent_id: str) -> Agent
Apply pending brain-config changes to a running agent.
Stops and re-starts the pod. Does nothing when no pod is running: the next
start picks up the latest config either way.
promote
promote(workflow_id: str) -> Agent
Promote a workflow to agent mode and return the agent.
The workflow must contain at least one agent node. What the promotion warned about is
in the agent's warnings.
Parameters
workflow_id(str): Workflow ID to promote.
Other
analytics
analytics(agent_id: str, *, days: int = 30) -> AgentAnalytics
Get agent analytics - sessions, tokens, success rate, daily activity.
Parameters
agent_id(str): Agent workflow ID.days(int, optional): Number of days to look back (default: 30).
attach_skill
attach_skill(agent_id: str, *, skill_id: str, editable: bool | None = None, auto_connected: bool | None = None, connected_by: str | None = None) -> dict[str, Any]
Attach a skill to an agent.
Parameters
agent_id(str): Agent workflow ID.skill_id(str): Skill id to attach (required).editable(bool | None, optional): Whether the agent may edit the skill (default true server-side).auto_connected(bool | None, optional): Whether the skill was auto-connected (default true server-side).connected_by(str | None, optional): Who attached the skill (defaultagentserver-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.
Parameters
agent_id(str): Agent workflow ID.thread_id(str): Thread ID for the conversation.message(str): Message to send.
Yields
dict[str, Any]: SSE event dictionaries.
Examples
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 configuration.
Its personality, operating prompt reference, context policy, session policy,
heartbeat, primary model and fallback models, plus whether the agent pod is running.
applyPending is true when a setting was saved after the running pod started;
redeploy applies it.
create_thread
create_thread(agent_id: str, *, title: str | None = None) -> AgentThread
Create a new conversation thread.
Parameters
agent_id(str): Agent workflow ID.title(str | None, optional): Thread title (default: "New Conversation").
delete_thread
delete_thread(agent_id: str, thread_id: str) -> None
Delete a conversation thread.
Parameters
agent_id(str): Agent workflow ID.thread_id(str): Thread ID to delete.
demote
demote(agent_id: str) -> Workflow
Turn an agent back into a regular workflow and return the workflow.
Only the mode changes: a deployed agent keeps running until it is stopped.
detach_skill
detach_skill(agent_id: str, skill_id: str) -> dict[str, Any]
Remove a skill from an agent.
get_template
get_template(key: str) -> dict[str, Any]
Get a reference agent's Agent Builder payload, to prefill create.
key is iris, atlas, sage or aria (from list_templates).
list_skills
list_skills(agent_id: str) -> dict[str, Any]
List skills attached to an agent.
list_templates
list_templates() -> list[dict[str, Any]]
List the reference agents an agent can be created from: each key and summary.
list_threads
list_threads(agent_id: str) -> list[AgentThread]
List conversation threads for an agent.
Parameters
agent_id(str): Agent workflow ID.
logs
logs(agent_id: str, *, lines: int | None = None, container: str | None = None) -> dict[str, Any]
Recent log lines of a deployed agent's pod.
name_available
name_available(name: str, *, ignore_agent_id: str | None = None) -> bool
Whether an agent name is free for you (names are unique per user).
ignore_agent_id leaves one agent out, to check a rename.
remove_addon
remove_addon(agent_id: str, addon_id: str) -> Agent
Take an attached add-on off an agent (agent.attachments.addons).
The add-on is not deleted; once nothing uses it, it can be. Returns the agent without it.
A running agent loads the change at its next restart (redeploy).
remove_tool_workflow
remove_tool_workflow(agent_id: str, workflow_id: str) -> Agent
Take a tool workflow off an agent (agent.attachments.tool_workflows).
The workflow is not deleted; once no agent lists it, it can be. Returns the agent without
it. A running agent loads the change at its next restart (redeploy).
status
status(agent_id: str) -> AgentStatus
Get the current status of an agent pod.
Parameters
agent_id(str): 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: list[str] | None = 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: str | None) -> 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.