name: everruns-dev description: Reference for working with the Everruns(Dev) managed harnesses platform (https://dev.everruns.com) - core concepts, UI links, entity naming, and API workflows for agents, harnesses, capabilities, sessions, models, and apps.
Everruns(Dev)
Everruns(Dev) is the dev deployment of the durable Everruns agentic harness engine. Docs: https://docs.everruns.com. This plugin talks to the Everruns(Dev) deployment over MCP and exposes both focused session tools and scriptable API access.
If a user asks something Everruns(Dev)-related, prefer the MCP tools over guessing.
When the exact shape of an operation is unclear, call discover first.
Core concepts
Harness --has--> Capability
^
|has
|
Agent --has--> Capability
^
|runs in
|
Session --has--> Capability (additive)
- Harness - top-level setup for agent execution. Configures infrastructure, defaults, and constraints. Each session has exactly one. Harnesses support single-parent inheritance, so capabilities and prompt chunks flow down the chain. Think "runtime profile".
- Agent - domain- or task-specific configuration: system prompt, default model, enabled capabilities. Not bound to a harness at creation; the harness is picked when the session starts. Optional on a session.
- Capability - the reusable unit that actually adds behavior. Each capability contributes three things: system-prompt additions, tools, and files mounted in the session filesystem. Capabilities attach to a harness, an agent, or a session. Session capabilities are additive to agent capabilities.
- Session - the working instance of an agentic loop. Assembled from harness
- (optional) agent + session overrides, then resolved into a
RuntimeAgent. Status values:started,active,idle,waiting_for_tool_results,paused. Sessions live indefinitely.
- (optional) agent + session overrides, then resolved into a
- Model - an LLM model id supported by the target deployment. Resolution priority: per-message controls -> session override -> agent default -> harness default -> system default. Use the API catalog or model list before naming a specific model.
- MCP server - a remote server exposing tools; integrated into Everruns(Dev) as
a virtual capability (
mcp:{uuid}). - App - binds a Harness + Agent to a channel (Slack, web widget, etc.) for external deployment.
Typical setup flow when a user wants a new agent:
- Pick or create a harness (covers infra + base capabilities). Most users start from the org base harness.
- Create an agent: system prompt, default model, capabilities it needs beyond what the harness supplies. Agents are not bound to a specific harness - the harness is chosen at session start.
- Run the agent with
agent_run- that creates a session (using the default harness), sends the first user message, and triggers the turn loop. To pin a specific harness, create the session directly viacreate_session --harness_id ...and then callcreate_message.
Capabilities are the answer to "how does my agent get tool X?" - attach the capability at the harness level for org-wide defaults, at the agent level for agent-specific tools, or at the session level for one-off additions.
UI links
All user-facing outputs should include links to the relevant Everruns(Dev) UI
objects when an object is created, updated, inspected, or returned as a primary
result. Use Markdown links. Default base URL: https://dev.everruns.com unless
the user provides another deployment URL.
Top-level UI paths:
- Dashboard:
https://dev.everruns.com/dashboard - Sessions list:
https://dev.everruns.com/sessions - Session chat:
https://dev.everruns.com/sessions/{session_id}/chat - Session events/files/resources/schedules/storage:
https://dev.everruns.com/sessions/{session_id}/{tab} - Agent:
https://dev.everruns.com/agents/{agent_id} - Harness:
https://dev.everruns.com/harnesses/{harness_id} - Capability:
https://dev.everruns.com/capabilities/{capability_id} - App:
https://dev.everruns.com/apps/{app_id} - MCP servers list:
https://dev.everruns.com/mcp-servers - Models list:
https://dev.everruns.com/models - Organization:
https://dev.everruns.com/orgs/{org_id}
Examples:
[Support Triage](https://dev.everruns.com/agents/agent_01933b5a00007000800000000000001)[Session](https://dev.everruns.com/sessions/session_01933b5a00007000800000000000003/chat)[Base Harness](https://dev.everruns.com/harnesses/harness_01933b5a00007000800000000000002)[Web Fetch](https://dev.everruns.com/capabilities/web_fetch)
Names and IDs
idis the stable API and UI-link identifier. Use it for follow-up calls, joins, and links. Core IDs are prefixed, such asagent_...,harness_...,session_...,app_..., andorg_.... Capability IDs are capability refs, such asweb_fetch,session_storage,mcp:{uuid}, orskill:{id}.nameis the addressable slug for agents and harnesses. It is lowercase, URL-friendly, and good for search or operator-facing references, butidis safer for exact operations.display_nameis the human-readable UI label for agents and harnesses. Render entities asdisplay_name || name || id. Apps usename; sessions usetitle || preview || id; capabilities usename || id.- When returning a list, include both a readable label and the stable ID. Link the readable label when possible.
MCP tools exposed by Everruns(Dev)
| Tool | When to use |
|---|---|
me |
Current user + default org. Cheap sanity check. |
list_organizations |
Multi-org accounts. MCP has no current-org switch; use this to find an org id, then pass organization_id on every org-scoped MCP tool call that should target that org. |
agent_run |
Create a session and send the first message in one go. Returns session_id, message_id. |
session_send_message |
Follow-up user message in an existing session. |
session_get_status |
Poll session status + latest agent message + recent events. Supports since_event_id for incremental polling and event_types to filter. |
agent_get_card |
Render an MCP-Apps card for an agent: a sandboxed text/html resource at ui://everruns/agent/{agent_id}/card plus a one-line summary. Use in MCP-UI-aware hosts (Claude Desktop, mcp-ui clients, the Everruns chat UI) to surface a stats card alongside text. Falls back gracefully — hosts that ignore embedded resources still get the summary line. Read-only; safe to call in query-style flows. Only available under MCP 2025-06-18; older clients should fall back to get_agent. |
discover |
Search the API catalog. Returns operation name, category, description, parameters. |
query |
Run a bash script where only read-only Everruns(Dev) API operations are builtins. jq is available. Prefer this for inspection, search, preview, export, grep, and status checks. |
execute |
Run a bash script where every Everruns(Dev) API operation is a builtin. jq is available. Use this when the workflow needs side effects. |
Default to query for reads. Switch to execute only when the workflow needs
to create, update, delete, or trigger actions.
Multi-org semantics
The MCP transport is stateless. There is no org-switching tool and no server-side
current org for MCP clients. If organization_id is omitted, Everruns(Dev) uses
the default org reported by me.
For non-default orgs:
- Call
list_organizations. - Pick the target
org_{32-hex}id. - Include
"organization_id": "org_..."on each org-scoped MCP tool call:agent_run,session_send_message,session_get_status,agent_get_card,discover,query, orexecute.
For query and execute, put organization_id on the MCP tool call, not inside
the bash script:
query {
"organization_id": "org_01933b5a00007000800000000000004",
"commands": "list_agents | jq -r '.data[] | [.id, .name] | @tsv'"
}
agent_run {
"organization_id": "org_01933b5a00007000800000000000004",
"agent_id": "support-triage",
"message": "Summarize the latest failed sessions."
}
Using discover, query, and execute
discover surfaces what is available, query runs the read-only subset, and
execute runs the full catalog. Always use discover if you are unsure which
builtin to call.
discover returns JSON. Focused searches include each operation's
input_schema, output_schema, and output_shape. Use output_shape before
writing jq:
paginatedmeans the root is{data,total,offset,limit}; iterate with.data[].arraymeans the root is a bare array; iterate with.[].unknownmeans inspectoutput_schemaor run a small sample first.
Finding operations
# Find anything agent-related
discover { "query": "agent" }
# List every operation grouped by category
discover { "all": true }
Running operations
Inside query and execute, each available operation becomes a bash builtin.
Pass parameters as
--name value flags. Builtins emit JSON on stdout.
Rules of thumb:
- Pipe through
jqto extract fields. - Capture ids in shell variables so follow-up calls stay readable.
- Prefer
querywhen a read-only path is enough. - Prefer one scripted call that does the whole workflow over several round-trips.
<cmd> --helpprints usage if you are uncertain about flags.- If a builtin is missing in
query, it is probably mutating; switch toexecute.
Examples
List agents by name.
query { "commands": "list_agents | jq '.data[] | {id, name, default_model_id}'" }
List harnesses.
list_harnesses returns a bare array, not a paginated object:
query { "commands": "list_harnesses | jq '.[] | {id, name, display_name, description, status, parent_harness_id}'" }
Create an agent and run it with the default harness.
execute { "commands": "AID=$(create_agent --name \"researcher\" --system_prompt \"You are a careful researcher.\" | jq -r .id)\nagent_run --agent_id \"$AID\" --message \"Summarize https://docs.everruns.com/\"" }
agent_run uses the deployment's default harness. To pin a specific harness to
the session, create the harness, then create the session directly:
execute { "commands": "HID=$(create_harness --name \"research\" --system_prompt \"Research assistant.\" | jq -r .id)\nAID=$(create_agent --name \"researcher\" --system_prompt \"You are a careful researcher.\" | jq -r .id)\nSID=$(create_session --harness_id \"$HID\" --agent_id \"$AID\" | jq -r .id)\ncreate_message --session_id \"$SID\" --message '{\"role\":\"user\",\"content\":[{\"type\":\"text\",\"text\":\"Summarize https://docs.everruns.com/\"}]}'" }
Attach a capability to an agent.
query { "commands": "list_capabilities | jq '.data[] | {id, name}'" }
execute { "commands": "update_agent --id \"$AID\" --capabilities '[{\"ref\":\"web_fetch\"}]'" }
Poll a session until it idles.
query { "commands": "SID=session_abc...\nwhile true; do\n STATUS=$(get_session --session_id \"$SID\" | jq -r .status)\n echo \"status=$STATUS\"\n [ \"$STATUS\" = \"idle\" ] && break\n sleep 2\ndone\nlist_messages --session_id \"$SID\" | jq '.data[-1]'" }
Iterate over agents.
query { "commands": "list_agents | jq -r '.data[].id' | while read id; do\n get_agent --id \"$id\" | jq '{id, name, display_name, default_model_id}'\ndone" }
Add an MCP server (becomes a virtual capability).
execute { "commands": "create_mcp_server --name \"jira\" --url \"https://mcp.example.com/jira\" --auth_mode oauth" }
Work with app invocation channels.
Use app-channel commands for app schedules. Do not use durable schedule commands for app schedules; those infrastructure builtins are intentionally not exposed through MCP scripting.
query { "commands": "list_app_channels app_01933b5a00007000800000000000001 | jq '.[] | {id, channel_type, enabled, channel_config}'" }
Schedule channels accept either 5-field cron (*/10 * * * *) or 7-field cron
(0 */10 * * * * *). The server stores 7-field cron.
execute { "commands": "CID=$(add_schedule_app_channel --app_id \"$APP_ID\" --cron_expression '*/10 * * * *' --timezone UTC --session_mode shared_session --message 'Run the scheduled check' | jq -r .id)\npublish_app \"$APP_ID\"\ntrigger_app_schedule_channel --app_id \"$APP_ID\" --channel_id \"$CID\"" }
Channel secret fields are write-only. Reads return non-secret fields and
*_configured booleans instead of plaintext tokens or signing secrets.
Look up an org by id.
get_org accepts the org_... entity id as a positional arg.
query { "commands": "get_org org_01933b5a00007000800000000000004 | jq '{id, name, default_model_id, default_harness_id}'" }
Find which org owns an entity.
resolve_org takes any prefixed entity id (agent_..., session_...,
harness_..., app_..., skill_..., mcp:..., identity_..., eval_...)
and returns {org_id, org_name} of the owning org — but only if the caller
is a member of that org. Use it to recover from a direct link into a
resource owned by a different org you also belong to.
query { "commands": "resolve_org session_019db85695a8785e87e8203109109343 | jq" }
Preview an agent or harness before saving.
preview_agent and preview_harness resolve capabilities, scoped MCP servers, and
parent harness inheritance into the final system prompt and tool list without
persisting anything. Read-only, available in query.
query { "commands": "preview_agent --system_prompt \"You are a careful researcher.\" --capabilities '[{\"ref\":\"web_fetch\"}]' | jq '{system_prompt, tools: [.tools[].name]}'" }
query { "commands": "preview_harness --parent_harness_id \"$HID\" --system_prompt \"Research harness.\" | jq '{system_prompt, tools: [.tools[].name]}'" }
Raw builtin examples
list_agents | jq '.data[] | {id, name, default_model_id}'
Defaults and limits
queryandexecutetime out after 30 s by default, max 60 s. For long workflows, split them into multiple calls.list_*operations default to--limit 20(max 100) with--offsetfor paging.- Org context for
queryandexecuteis selected by the top-levelorganization_idMCP argument. Do not pass--organization_idto builtins inside the script.
Entity cards (MCP Apps)
Everruns(Dev) exposes a small family of entity cards — sandboxed HTML
resources hosts can render alongside text output. See
specs/mcp-cards.md
for the standard.
- Tool:
agent_get_card { "agent_id": "<agent-id-or-name>" }. Add"organization_id": "org_..."when targeting a non-default org. - Result: an MCP
resourcecontent item atui://everruns/agent/{agent_id}/card(MIMEtext/html) plus a one-line text summary. - The HTML is a self-contained sandboxed document with strict CSP. Hosts that don't understand embedded UI resources still see the summary line.
- Currently read-only; future iterations will add buttons (run, archive)
that route through
tools/callwith host confirmation.
When a user asks for an "agent card", "agent overview", or wants stats
visible alongside a reply, prefer agent_get_card over get_agent if the
host is MCP-UI-aware. Otherwise call get_agent and render the JSON.
Card tools require MCP protocol 2025-06-18. Older clients won't see them
in tools/list and should use get_agent.
When things go wrong
- 401 / OAuth loop - The host handles the OAuth 2.1 flow. If it fails, sign out at https://dev.everruns.com and retry so a fresh client registers.
tool not foundin query -queryonly exposes read-only builtins. If the command mutates state, switch toexecute.tool not foundin execute - rundiscover { "all": true }to confirm the builtin exists under the expected name.- Operation unclear -
<cmd> --helpinsidequeryorexecuteprints usage;discover { "query": "<cmd>" }shows parameter types. - Wrong org -
mereports the default org. Calllist_organizations, then pass top-levelorganization_idexplicitly on each org-scoped MCP call.
Docs
- Product docs: https://docs.everruns.com
- Marketing: https://everruns.com
- Dev deployment: https://dev.everruns.com
- MCP endpoint: https://dev.everruns.com/mcp