Extensions
MCP servers, language servers, DuckDB data, managed installs, and subagents.
MCP servers
MCP servers add tools to the agent. A server named studio exposing a timeline tool appears as studio.timeline. Server names can't reuse a built-in family name such as local, web, media, agent, google, or seo.
Manage servers with /mcp or rolit mcp, or list them in .rolit/config.json. Connections go directly from the CLI to the server, over stdio or HTTP. Tool definitions are deferred and loaded on demand with tool_search.
{
"tools": {
"mcpServers": [
{
"name": "example",
"enabled": true,
"transport": { "kind": "http", "url": "https://mcp.example.com/mcp" },
"auth": "rolit",
"timeoutSecs": 300,
"riskOverrides": { "send_campaign": "send" }
},
{
"name": "local-files",
"transport": { "kind": "stdio", "command": "my-mcp-server", "args": ["--stdio"] }
}
]
}
}| Setting | Meaning |
|---|---|
transport | {"kind": "http", "url", "headers"} or {"kind": "stdio", "command", "args", "env"}. |
enabled | Defaults to true. |
timeoutSecs | Per-call limit for that server. Default 300. Handshakes use a fixed 30-second limit. |
auth | none (default) sends only the entry's own headers. rolit sends your Rolit sign-in token as a bearer token. HTTP only. Opt in per server, because it is your Rolit credential. |
riskOverrides | Raises a tool's risk to send, spend, or publish. Other values fail config load. |
Approval
Every MCP call is the External MCP tier. It asks unless session Auto is on, and it is denied in plan-only and non-interactive sessions.
Risk can only be raised, never lowered. A tool is raised by riskOverrides, by labels in the built-in ESP, CMS, CRM, and ads connector maps, and by name: a tool called like send_email, publish_post, create_ad, or update_budget is treated as Send, Publish, or Spend, and the prompt says (risk inferred from tool name). A raised tool asks in every mode, becomes a pending action in scripts, and is never available to a subagent when it is Send or Spend.
A server that fails to connect stays listed in /tools as MCP server · connection failed with the error. Image results are passed to the model as images and not as base64 text.
Language servers (lsp.*)
Give the agent code intelligence from language servers. Servers start on first use and stay alive for the session. Results use workspace-relative paths and are redacted.
/lsp # list the catalog and current state
/lsp install rust # rust-analyzer, via rustup
/lsp install typescript # typescript-language-server, via npm
/lsp install python # python-lsp-server, via pip
/lsp install go # gopls, via the Go toolchain
/lsp rust off # disable an installed serverInstalls run in the background with a ten-minute limit, then restart the session with history preserved. The required ecosystem tool (rustup, npm, python3, or go) must be installed. To use another server, add it under tools.lspServers:
{
"tools": {
"lspServers": [
{ "name": "rust", "command": "rust-analyzer", "extensions": ["rs"], "languageId": "rust" }
]
}
}| Tool | What it returns |
|---|---|
lsp.hover | Hover information at a path, line, and character (zero-based lines, UTF-16 offsets) |
lsp.definition | Where a symbol is defined |
lsp.references | Where a symbol is used |
lsp.document_symbols | Symbols in one file |
lsp.workspace_symbols | Symbols matching a query (needs server if more than one is enabled) |
lsp.diagnostics | Errors and warnings for a file |
All are Read tier.
DuckDB data (duckdb.*)
Load files, query them with SQL, and chart the results in the terminal. Interactive chat only. Install the engine first:
/setup duckdbSee Setup.
The model supplies a table name, SQL, and column names, never a path, command, or server.
| Tool | Tier | What it does |
|---|---|---|
duckdb.load | Write (replace is Explicit consent) | Loads a workspace file or a public CSV, TSV, or Parquet link (up to 256 MiB) into a table. mode is create (never overwrites), replace, or append. Returns the schema, row count, and a 5-row preview. |
duckdb.query | By statement | One SQL statement. Queries run on a read-only connection. DROP, DELETE, TRUNCATE, and CREATE OR REPLACE need explicit consent. Returns up to 200 rows. It can't read or write files. |
duckdb.chart | Read | Draws a bar, line, or scatter chart from cached rows. Large series are sampled, and more than 60 bar categories are refused. |
duckdb.watch | Explicit consent | Re-runs a SELECT every 5 to 3,600 seconds and redraws. At most 3 at a time, and it stops after 3 failed refreshes. |
duckdb.watch_stop | Metadata | Stops one live chart or all of them. |
Open the charts with /data (←/→ switches charts, t shows the table, s stops a live chart). /data stop [id] stops live charts.
Subagents (agent.*)
A subagent is a second run with its own context, tool budget, and journal, working on the same workspace in the background. Use it to hand off a longer, independent goal.
- Run
/spawn <goal>yourself, or let the agent spawn one. - Press Ctrl+G to open the subagent panel:
j/kselect,xcancels,Esccloses. The composer footer shows how many are running or waiting. - A subagent can't spawn other subagents and can't ask you questions. It asks its parent with
agent.ask_parent.
Capability levels
The level bounds what a subagent may ever do, whatever the parent asks for.
| Level | Unlocks |
|---|---|
c0 | local.read, local.search, web.* (read-only) |
c1 | local.write, local.edit, local.run_command |
c2 | Browser inspection tools, computer.* |
c3 (default) | deploy, MCP tools, media.* |
A subagent runs under its parent's approval mode and the same workspace. Send and Spend tools are never available to it.
Settings
Change them in the /agents panel, with /agents model <id|clear>, level <c0-c3>, pane <n>, process <n>, or timeout <secs>, or in .rolit/config.json. Changes apply to the next session.
{
"tools": {
"subagents": {
"capabilityLevel": "c3",
"maxConcurrentPerPane": 4,
"maxConcurrentPerProcess": 12,
"defaultTimeoutSecs": 600,
"maxTimeoutSecs": 1800,
"defaultEscalationTimeoutSecs": 300
}
}
}Set defaultModel to a faster or cheaper model for routine delegated work. Without it, a subagent uses its parent's model.
Tools
| Tool | Side | What it does |
|---|---|---|
agent.spawn | Parent | Starts a subagent from a goal. mode is background (default) or await (waits up to 30 seconds). timeoutSeconds is 1 to 1,800 (default 600). |
agent.status | Parent | Current state of one subagent |
agent.result | Parent | The final answer once finished, or not_ready |
agent.wait | Parent | A bounded wait of 1 to 60 seconds. Background completion normally arrives automatically. |
agent.cancel | Parent | Requests cancellation |
agent.list | Parent | Lists subagents |
agent.answer | Parent | Answers a subagent's question |
agent.ask_parent | Subagent | Asks the parent a question. At most maxEscalations (0 to 3, default 3). |
A subagent's final answer comes back to the parent as ordinary user-level content, so it gains no extra authority. A subagent that is killed mid-run is recovered as orphaned on /resume, not restarted silently.