{
  "schema": "rapp-brainstem/site-capabilities-v1",
  "updated": "2026-09-23",
  "runtime": {
    "name": "Brainstem Agent",
    "version": "0.2.0",
    "platform": "macOS only (qualified on Apple silicon); needs /usr/bin/sandbox-exec",
    "grail": {
      "repository": "kody-w/rapp-installer",
      "commit": "49db80c8c6b6caa7647369beaf477d374a8f293c",
      "version": "0.6.16",
      "kernel_sha256": "bd55a7f0bcf5efd3f7966ca39bb146da3c25fda9a0b1ce5ba587919d3c3775f4"
    }
  },
  "status_labels": {
    "available": "Available (experimental)",
    "partial": "Partial",
    "in-development": "In development",
    "not-yet": "Not yet"
  },
  "capabilities": [
    {
      "id": "deploy",
      "title": "Deploy",
      "group": "primary",
      "status": "partial",
      "summary": "setup downloads and verifies the pinned core and builds a private environment; doctor --deep proves readiness.",
      "limits": ["This Mac only; no cloud or remote deployment yet."],
      "evidence": [
        { "kind": "docs", "ref": "runtime/README.md" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_grail.py" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_cli.py" }
      ]
    },
    {
      "id": "always-on",
      "title": "Always available",
      "group": "primary",
      "status": "partial",
      "summary": "serve --detach runs an always-on daemon with a warm worker; service install adds a login LaunchAgent.",
      "limits": ["Work pauses while the Mac sleeps; no remote host yet."],
      "evidence": [
        { "kind": "docs", "ref": "runtime/README.md" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_daemon.py" }
      ]
    },
    {
      "id": "schedule",
      "title": "Schedule",
      "group": "primary",
      "status": "available",
      "summary": "Ask in plain language or use schedules: one-time, interval and cron, time zones and DST, missed-run and overlap rules, pause, resume, edit, run-now and remove, with results in an inbox.",
      "limits": ["Runs only while the daemon is running."],
      "evidence": [
        { "kind": "recorded-run", "ref": "schedule" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_schedules.py" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_clock_oracle.py" }
      ]
    },
    {
      "id": "connect",
      "title": "Connect",
      "group": "primary",
      "status": "not-yet",
      "summary": "Messaging apps and email are not connected yet; today you use the terminal or the web companion on this Mac, and tools connect through MCP.",
      "limits": ["No messaging channels."],
      "evidence": [
        { "kind": "docs", "ref": "runtime/README.md" }
      ]
    },
    {
      "id": "remember",
      "title": "Remember",
      "group": "primary",
      "status": "available",
      "summary": "Workspace and profile memory with correction and forgetting, search across past conversations, and AGENTS.md context files.",
      "limits": ["Local to this Mac; retrieval is keyword ranking (BM25), not semantic embeddings."],
      "evidence": [
        { "kind": "tests", "ref": "runtime/tests/test_cell_memory.py" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_retrieval.py" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_learning.py" }
      ]
    },
    {
      "id": "isolate",
      "title": "Isolate",
      "group": "primary",
      "status": "available",
      "summary": "Every core worker, shell command, script and local MCP server runs under the macOS sandbox (Seatbelt) with private per-worker files; tool processes cannot read your home folder or your sign-in and write only inside the workspace; the shell has no network.",
      "limits": ["macOS sandbox only; not a VM or container."],
      "evidence": [
        { "kind": "tests", "ref": "runtime/tests/test_cell_sandbox.py" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_shell.py" },
        { "kind": "docs", "ref": "runtime/README.md" }
      ]
    },
    {
      "id": "skills",
      "title": "Learns skills",
      "group": "secondary",
      "status": "available",
      "summary": "Saves how it solved a task as a versioned skill (unreviewed until you approve), offers it in later turns, and lets you review, approve, edit, disable and export it.",
      "limits": ["Skills are data offered to the model, never executed and never granting permissions; review is manual."],
      "evidence": [
        { "kind": "tests", "ref": "runtime/tests/test_cell_skills.py" }
      ]
    },
    {
      "id": "long-work",
      "title": "Long tasks",
      "group": "secondary",
      "status": "available",
      "summary": "Continues automatically past the core's three-tool-round limit and streams progress; Ctrl-C cancels and stops the worker.",
      "limits": ["Bounded per turn (segments, tool calls, time)."],
      "evidence": [
        { "kind": "recorded-run", "ref": "long-chain" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_longturn.py" }
      ]
    },
    {
      "id": "delegate",
      "title": "Helpers",
      "group": "secondary",
      "status": "available",
      "summary": "Runs up to three helper workers in parallel, each a fresh sandboxed core worker with narrower permissions.",
      "limits": ["One level of helpers; bounded count."],
      "evidence": [
        { "kind": "recorded-run", "ref": "parallel-helpers" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_delegation.py" }
      ]
    },
    {
      "id": "tools",
      "title": "Tools and processes",
      "group": "secondary",
      "status": "available",
      "summary": "Files, a sandboxed shell, sandboxed Python scripts that call tools, and background processes (start, poll, log, stop).",
      "limits": ["Inside the workspace; the shell has no network."],
      "evidence": [
        { "kind": "tests", "ref": "runtime/tests/test_cell_files.py" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_shell.py" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_programmatic.py" }
      ]
    },
    {
      "id": "web",
      "title": "Web",
      "group": "secondary",
      "status": "available",
      "summary": "Fetches pages and searches (Wikipedia by default) with citations; private and cloud-metadata addresses are refused; an owner egress policy and log; web content can never make it remember or forget.",
      "limits": ["The search provider is Wikipedia unless configured."],
      "evidence": [
        { "kind": "tests", "ref": "runtime/tests/test_cell_reach.py" }
      ]
    },
    {
      "id": "mcp",
      "title": "MCP",
      "group": "secondary",
      "status": "available",
      "summary": "Connects MCP servers (stdio and streamable HTTP) from a JSON config; tools appear as mcp__server__tool; each local server gets its own sandbox profile and permission.",
      "limits": ["You add and trust servers yourself."],
      "evidence": [
        { "kind": "tests", "ref": "runtime/tests/test_cell_reach.py" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_reach_hardening.py" }
      ]
    },
    {
      "id": "receipts",
      "title": "Receipts and recovery",
      "group": "secondary",
      "status": "available",
      "summary": "Every tool call gets a receipt (succeeded, failed or uncertain); repeated requests replay without a new model call; interrupted work is recovered or marked uncertain; backup writes a verified snapshot while the daemon runs and restore checks every digest before writing; export writes skills, memory, profile and sessions in portable formats; upgrade installs a local release side by side and switches back by itself if it does not come up, and rollback returns to the previous version; a rejected sign-in is an explicit state (turns refused, no retries), and signing in again is picked up without a restart.",
      "limits": ["Backups are local, unencrypted and started by you, and leave out workspace files; upgrades only from a local checkout, zipapp or wheel (nothing is downloaded); a revoked sign-in can keep working until the core's cached Copilot token expires (about 25 minutes)."],
      "evidence": [
        { "kind": "tests", "ref": "runtime/tests/test_cell_durability.py" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_state_v2.py" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_operable_backup.py" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_operable_upgrade.py" },
        { "kind": "tests", "ref": "runtime/tests/test_cell_operable_credential.py" },
        { "kind": "docs", "ref": "runtime/README.md" }
      ]
    },
    {
      "id": "companion",
      "title": "Terminal session and web companion",
      "group": "secondary",
      "status": "available",
      "summary": "brainstem-agent on its own opens an interactive terminal session (streamed answers, slash commands, Ctrl-C cancels the turn and keeps the session); open prints a one-time link to an owner-only web companion served on 127.0.0.1 (chat, sessions, schedules and inbox, skill review, memory and profile, MCP and the outbound request log).",
      "limits": ["This Mac only; each sign-in link works once, in one tab; the terminal is a line session, not a full-screen interface."],
      "evidence": [
        { "kind": "tests", "ref": "runtime/tests/test_companion_repl.py" },
        { "kind": "tests", "ref": "runtime/tests/test_companion_api.py" },
        { "kind": "tests", "ref": "runtime/tests/test_companion_security.py" },
        { "kind": "tests", "ref": "runtime/tests/test_companion_browser.py" },
        { "kind": "docs", "ref": "runtime/README.md" }
      ]
    },
    {
      "id": "browser-media",
      "title": "Browser, images and voice",
      "group": "secondary",
      "status": "not-yet",
      "summary": "No browser automation, image understanding or generation, transcription or speech yet.",
      "limits": [],
      "evidence": [
        { "kind": "docs", "ref": "runtime/README.md" }
      ]
    }
  ]
}
