Skip to main content
The Concierge agent setting up sandboxes, agents, and integrations from natural language. Every Copass account ships with a per-user agent called the Concierge. Instead of remembering CLI commands or wiring SDK calls to manage your setup, you describe intent in plain English — “create a Slack reactor agent,” “what triggers do I have firing,” “give my teammate access to my Concierge” — and it runs the right sequence of management calls for you. The Concierge is the recommended on-ramp for everything past the first install. It covers sandboxes, sources, agents, triggers, runs, integrations, and API keys.

Try it now

curl -N -X POST "https://api.copass.id/storage/sandboxes/$COPASS_SANDBOX_ID/concierge/chat" \
  -H "Authorization: Bearer $COPASS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"message": "What sandboxes and agents do I have? Anything need attention?"}'
The Concierge looks up your sandboxes, your agents, recent runs, then writes a one-paragraph status report back. No tool wiring on your side.

What you can ask it to do

Set up an agent

“Create an agent that reacts to Slack mentions and drafts a reply.” The Concierge creates the agent, picks tool sources, deploys the trigger, returns the test command.

Connect an integration

“Connect my Slack workspace.” The Concierge mints a Pipedream Connect URL, returns it for you to open, and reports back when the OAuth lands.

Diagnose a quiet agent

“My triage agent fires but doesn’t do anything — why?” The Concierge pulls recent runs, reads the tool-resolution trace, points to the missing tool name or stale allowlist entry.

Mint API keys

“Give my teammate access to my Concierge.” The Concierge mints a shared key, explains the difference between invoke and delegate keys, surfaces the plaintext once.

Tune an existing agent

“Switch the support agent to Sonnet, raise the turn limit to 15, and add the Linear search tools.” Partial updates — only the fields you mention change.

Pause / inspect triggers

“Pause the GitHub-issues trigger overnight; resume at 9am.” Pause and resume are reversible Concierge actions. Permanent removal stays a CLI command on purpose.

Two endpoints

Both endpoints are scoped to a sandbox you own or have a connection grant on.
EndpointShapeWhen to use
POST /storage/sandboxes/{sandbox_id}/concierge/testOne-shot, synchronous JSON responseScripts, batch jobs, one-line answers
POST /storage/sandboxes/{sandbox_id}/concierge/chatSSE-streamed, multi-turn (session_id continues)Interactive UIs, conversational management, anything multi-step

One-shot turn (/test)

curl -X POST "https://api.copass.id/storage/sandboxes/$COPASS_SANDBOX_ID/concierge/test" \
  -H "Authorization: Bearer $COPASS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"message": "What sandboxes do I have?"}'
Returns a single JSON object with run_id, status, output_text, token counts, and duration_ms. Use this when you don’t need streaming or multi-turn.

Streaming chat (/chat)

# First turn — no session_id
curl -N -X POST "https://api.copass.id/storage/sandboxes/$COPASS_SANDBOX_ID/concierge/chat" \
  -H "Authorization: Bearer $COPASS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"message": "Set up a Slack mention reactor"}'

# Continue the conversation — pass back the session_id from the prior agent_finish event
curl -N -X POST "https://api.copass.id/storage/sandboxes/$COPASS_SANDBOX_ID/concierge/chat" \
  -H "Authorization: Bearer $COPASS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"message": "Use channel C0123456", "session_id": "sess_..."}'
Frames you’ll see (Server-Sent Events):
EventPayloadWhen
run_started{ run_id }First frame, after the run row is created.
agent_text_delta{ text }Incremental model output. Streams as it generates.
agent_tool_call{ call_id, name, arguments }Each management tool the Concierge invokes.
agent_tool_result{ call_id, name, result, error }Each tool’s return value.
agent_finish{ stop_reason, session_id, usage, run_id }Terminal frame on success. Capture session_id to continue.
agent_error{ message, type, run_id }Replaces agent_finish on failure.
Drop the connection mid-stream and the run is marked cancelled server-side — no orphaned billing.

Example prompts

Drop any of these into the message field:
  • “List my sandboxes.”
  • “Create an agent named support that runs claude-sonnet-4-6 with a 15-turn cap.”
  • “Connect my Slack workspace.”
  • “What triggers fire for the support agent? Which ones have been quiet?”
  • “Mint a delegate key for support labeled ‘embed-on-marketing-site’.”
  • “Pause every trigger on the triage agent until I resume it.”
  • “Test the intake agent with this fake event payload:” { "title": "...", "body": "..." }
  • “My agent isn’t using tools — what’s wrong?” (reads tool_resolution_trace and points to the gap)
The Concierge is taught the right pre-flights for each capability. It will ask follow-up questions when it needs missing information (channel id, model name, agent slug, etc.) rather than guess.

Permissions

The Concierge respects the sandbox’s role model:
Your roleWhat you see
Owner of the sandboxRead tools + reversible mutations (28 tools)
Editor via connection grantRead tools + reversible mutations (28 tools)
Viewer via connection grantRead tools only (13 tools); mutating tools are hidden
Roles are checked at resolve time, before the model sees the tool catalog — viewers literally cannot see the mutation surface.

What the Concierge won’t do

Destructive operations are intentionally CLI-only:
  • Archive / destroy a sandbox
  • Delete an agent or source
  • Disconnect a trigger permanently
  • Revoke an API key
The Concierge will surface the correct copass … command for these, but it won’t run them. The asymmetry is the gate — a human typing a CLI command is the line that prevents a chat turn from accidentally deleting your production agent.

Tool catalog at a glance

The Concierge has 28 tools. You don’t need to memorize them — natural language is the interface — but here’s the lay of the land:
CategoryRead toolsMutating tools
Sandboxeslist_sandboxes
Sourceslist_sources, get_sourceprovision_source, update_source
Agentslist_agents, get_agentcreate_agent, update_agent_prompt, update_agent_tools, update_agent_model_settings, update_agent_tool_sources, test_agent
Triggerslist_triggerscreate_trigger, update_trigger, pause_trigger, resume_trigger
Runslist_runs, get_run_trace
Integrationslist_apps, list_trigger_components, list_connected_accountsstart_integration_connect
API keyslist_api_keysmint_agent_invoke_key, mint_agent_delegate_key
Agent toolslist_agent_tools

Bootstrap (once)

Before your first call you need a sandbox and an API key — same prerequisites as everything else:
npm install -g @copass/cli
copass login                       # email OTP
copass setup                       # creates a sandbox, writes .olane/refs.json
copass apikey create --name my-app # prints an olk_... key — save it once

export COPASS_API_KEY=olk_...
export COPASS_SANDBOX_ID=sb_...    # from .olane/refs.json
That’s the only CLI step you’ll need for setup. From here on, the Concierge handles the rest.

Next steps

Quickstart (manual)

Prefer to drive it yourself? The CLI/SDK quickstart shows the same lifecycle without the agent.

Agent Router

Run your own agents (not just the Concierge) on Anthropic or Google with one provider-neutral API.

Sandboxes

The tenancy model the Concierge operates inside.

Cookbooks

Multi-integration recipes — what to build with the agents the Concierge sets up.