Skip to content

Skills

Skills are isolated tool bundles that extend what the agent can do. Each skill declares its capabilities in a manifest, communicates over IPC, and can be toggled on or off at runtime.

SkillToolsDescription
filesystemread_file, write_file, list_directoryFile I/O with path allowlists, symlink resolution, sensitive path blocking
shell-executorexecute_commandShell commands with blocklist, 60s timeout, 2 MB output buffer
web-fetchfetch_url, extract_contentHTTP requests and HTML-to-text extraction
web-searchsearch_webWeb search via DuckDuckGo HTML scraping
browser-controlnavigate, click, type, screenshotBrowser automation via Playwright (headless Chromium)
emailread_inbox, send_emailIMAP inbox reading and SMTP sending via nodemailer/imapflow
githublist_issues, create_pr, get_fileGitHub API via Octokit
calendarlist_events, create_eventCalendar event management with ISO 8601 dates
timer-cronset_timer, create_scheduleOne-shot timers and recurring cron schedules

Skills run in a separate process and communicate with the runtime over a structured IPC protocol. The message flow:

  1. Runtime sends init with the skill manifest and allowed environment variables
  2. Skill responds with ready
  3. Runtime sends execute with {toolName, input}
  4. Skill responds with result or error
  5. On shutdown, runtime sends shutdown

This isolation means a misbehaving skill cannot crash the main process, access other skills’ state, or read environment variables it was not granted.

Every skill declares a manifest.json:

{
"id": "my-skill",
"name": "My Skill",
"version": "1.0.0",
"description": "What this skill does",
"author": "you",
"capabilities": {
"network": true,
"filesystem": {
"enabled": true,
"paths": ["~/Documents"]
},
"shell": false,
"env": ["MY_API_KEY"]
},
"tools": [
{
"name": "do_thing",
"description": "Does the thing",
"inputSchema": {
"type": "object",
"properties": {
"input": { "type": "string" }
},
"required": ["input"]
}
}
]
}
FieldTypeDescription
networkbooleanWhether the skill can make outbound HTTP requests
filesystem.enabledbooleanWhether file access is allowed
filesystem.pathsstring[]Allowed directory paths
shellbooleanWhether shell execution is allowed
envstring[]Environment variable names the skill can read

Toggle skills via the REST API:

Terminal window
curl -X POST http://localhost:3457/api/skills/filesystem/toggle \
-H "Cookie: session=..."

Or use the Settings UI in the web app to enable and disable individual skills.