Architecture
CoWork's Agent Card
Synced from github.com/CoWork-OS/CoWork-OS/docs
CoWork can describe itself with an A2A 1.0 agent card: what this CoWork can do and how its tools behave, so another agent, a teammate or an admin can see that before handing it work. CoWork already reads other agents' cards for PACT; this is the card it gives out.
What the card says
- Name, version and description. The description says CoWork runs on its user's machine and
does not take tasks over A2A. The card lists no A2A interface (
supportedInterfacesis empty), so an A2A client will not try to send it work. - Skills: the profile's enabled task skills (id, name, description, category as the tag), up to 200.
- Tool behaviour, in an optional extension (
urn:cowork-os:agent-card:tool-hints:v1, markedrequired: false, so strict card readers accept it):builtInTools: every built-in tool withreadOnlyanddestructivefrom CoWork's tool risk levels,reversible(true for read-only tools, false for destructive ones,nullwhen unknown), and acostClass(local, ornetworkfor tools that call the network).connectors: each enabled MCP connector and its tools, with the hints the connector itself publishes (readOnlyHint,destructiveHint). A hint the connector does not state isnull, not a guess. Connector tool calls have the cost classexternal.model: the default model's price class:local(no per-token price),metered(with its USD price per million input and output tokens) orunknown.
Seeing and publishing it
cowork agent-cardprints the card for this profile. It reads the local skills, the MCP settings (tools cached at each connector's last connection) and the provider settings.- Publishing is off by default, because the card names the installed skills and connectors.
cowork agent-card publish onsets the Control Plane settingpublishAgentCard; the Control Plane (desktop app orcoworkd) then answersGET /.well-known/agent-card.jsonwith the current card (live connector tools when connected),Cache-Control: max-age=300andAccess-Control-Allow-Origin: *. While it is off, the path answers 404. OnlyGETandHEADare allowed. - The Control Plane binds to
127.0.0.1by default, so the card is only reachable from this machine unless you expose the Control Plane yourself (for example with Tailscale). CoWork never publishes it anywhere on its own.
Estimating a task before running it
cowork tasks plan --estimate "task prompt" [--model <id>] gives a prepared-change-style
estimate (kind: "summary", summary, estimatedCost in USD, estimatedDurationMs, and a
payload with the sample sizes and the 90th percentiles). It is based only on this profile's last
30 tasks on the model: the cost is their median total, and the duration is the median wall-clock
time of the completed ones, approval waits included. The prompt itself is not analysed. A local
model has no per-token cost; with fewer than 3 past tasks, the estimate says there is not enough
history.