Skip to content

Roadmap & API status

The whole platform Silo is building toward — and what's real today. This page is the source of truth for what you can build on now vs. what's still being designed. As a primitive ships, its badge flips from

planned to stable.

The goal: a small, stable core, after which most new features are extensions built on these primitives — first-party and third-party alike. When the core table below is all green, we've hit that inflection point.

Legend: stable available now ·

experimental usable, may change ·planned designed, not yet implemented

Core (ctx) primitives

PrimitiveStatus
Registration (register*)stabledocs
executeCommandstabledocs
ctx.workspacesstabledocs
ctx.layoutstabledocs
ctx.process (persistent sessions)stabledocs
ctx.process.exec (one-shot subprocess)stabledocs
Terminal environment (SILO_* identity, spawn env)stabledocs
ctx.processes (foreground process observer)stabledocs
ctx.agents (coding-agent activity + resume hints)betaHow it works — keyed on the Agent Session (Terminal or Chat), one AgentInfo shape for both, including a host-computed title; reveal / resume / close verbs, getActive / subscribeActive, and bindActivity / bindIcon keyed on the session so one provider badges a terminal tab and a Chat transcript tab alike (RFC 0038)
ctx.agents.catalog() (+ AgentIconGlyph)betadocs · RFC 0033
Agent Profiles (ctx.agents.profiles)betadocs · RFC 0033list() + launch({ prompt }); an opening prompt is delivered as a literal or refused, never mangled
Chat sessions (ctx.agents.sessions)betadocs · RFC 0038connect() a user-authored Chat profile (an Agent Client Protocol child) and prompt / cancel / watch it; needs the "agents" permission. The update stream models what a transcript must draw — toolCall (id, title, kind, status, content, locations) and the whole plan — so raw is an escape hatch, not the way to render one. connect({ resume }) reconnects a persisted session over session/resume / session/load, falling back to the transcript journal (RFC 0042 Phase 1); a session in a workspace you haven't opened yet is still listed, as chatResumeState: "dormant", and connects when you reveal it
Extension-API mechanism (getExtension)stabledocs
ctx.editors (documents)stabledocs
ctx.terminals (terminal tabs)stabledocs
Tab adornments (editors / terminals setIcon / setIndicator / setActivity / …)stabledocs · ADR 0029 · ADR 0030
Activity chrome (Activity kind + SDK ActivityGlyph)stableADR 0030 · workspace status + tab adornments
ctx.terminals.registerTabDecoration (deprecated shim)stabledocs — prefer bindIndicator / bindActivity
Side-panel tab adornments (owner handle)plannedRFC 0022
Recorded dock panels (DockPanelKind.persistence + Workspace.panels)experimentaldocs · RFC 0041 — a DockPanelKind that declares persistence: "recorded" gets a DockPanelRecord per open panel, reopened on restart like an editor/terminal tab; t.workspaceId on the "panel" toolbar target. RFC 0046 adds a generic "panel/tab" context-menu surface (every panel tab, any kind) and DockPanelKind.renamable (DockPanelRecord.customTitle, host-owned and restart-durable). Enumeration + tab adornments (ctx.panels) are a later phase
DockPanelProps.onScreenstabledocs — host-resolved "the user can see this panel" (tab selected and workspace active). A dock panel is never remounted for going off screen, so DOM measurement and restore belong on this flag, not on mount
ctx.registerToolbarItemstabledocs · RFC 0021
ctx.terminals.focusstabledocs
ctx.terminals.subscribeOscstabledocs
ctx.terminals.getActive / subscribeActivestabledocs
ctx.terminals.subscribeOutputstabledocs
includeReplay on subscribeOutput / subscribeOsc / onDatastabledocs — opt in to the scrollback replayed on re-attach, tagged so it isn't read as live activity
ctx.workspaces status / badges (set / clear / bind)stabledocs · adorn verbs; registerStatus / registerBadge deprecated shims
ctx.workspaces.registerSectionstabledocs
ctx.registerNavigatorView (Navigator panel views)stabledocs · RFC 0023
ctx.workspaces.getOpenWorkspaceMenuItemsstabledocs
ctx.workspaces.getWorkspaceMenuItemsstabledocs
ctx.terminals.getTabMenuItemsstabledocs
ctx.filesstabledocs
ctx.theme + ctx.theme.registerPresetstabledocs
ctx.dnd (drag-and-drop)stabledocs
useServiceState (reactive reads)stabledocs
useFocusGroup (keyboard nav for a group)stabledocs
Tooltip (styled hover popup)stabledocs
Design-system components (modal kit)stabledocs · RFC 0016
--silo-list-* tokens + .silo-scrollstabledocs
ctx.ui (pickers + notify w/ actions + menus)stabledocs
ctx.ui (confirm / prompt)stabledocs
ctx.ui.showModal (custom modal content)stabledocs
ctx.layout.openPanelSheet (dock sheet anchored to a side panel)stabledocs · RFC 0029
ctx.ui.confirmWithDontShowAgainstabledocs · RFC 0029
ctx.ui.openExternal (open a URL out)stabledocs
ctx.ui.getActiveSelectionTextstabledocs
ctx.net (server-side HTTP, bypasses CORS)stabledocs
ctx.system (OS, arch, Silo version)stabledocs
ctx.system.homeDirstabledocs · RFC 0029
ctx.search (cross-file content search)stabledocs
ctx.search (replace-in-files)planneddesign
ctx.ui (quickPick / progress)planneddesign
ctx events (typed Event<T>)stabledocs
ctx.editors.getState / subscribestabledocs
path (cross-platform path utilities)stabledocs
per-extension settings (page + persistence)stabledocs
ctx.storage (global / workspace)stabledocs
ctx.storage directories (globalDir / workspaceDir / workspaceDirs)stabledocs
ctx.secrets (host-mediated credentials)plannedRFC 0004
ctx.webview (cross-origin iframe bridge)stabledocs
context-menu contributions (workspace, terminal/link, editor/tab, terminal/tab)stabledocs
context-menu contributions (explorer/item)planneddesign
ctx.workspaces.registerPropertyPagestabledocs

Extension-owned features

Features that ship built-in but are implemented as extensions on the primitives above — so a third party could build the same.

FeatureStatusBuilt onPublishes
Gitstableprocess.exec + files + workspacesGitAPI (@silo-code/git-api) — one-shot reads/mutations plus a live watchRepo session (ADR 0037)
Markdown PreviewstableregisterEditor + files
Terminalstableprocess sessions + dock panel
Agent Chat panelbetaagents.sessions + dock panelsilo.agents-chat-panel — bundled (disable-only, like any silo.* extension); built on ctx.agents.sessions + the public SDK alone (DockPanelKind.toolbar / setBreadcrumb, the "panel" toolbar surface — trusted built-ins are exempt from declaring the "agents" permission a third-party Chat UI still needs), so it is the proof a third-party Chat UI is fully expressible (RFC 0038 · RFC 0039)
Theme managementstabletheme + files + ui
Search (find-in-files)stablesearch + editors

Each ships as a real extension package (core.* / silo.*) that touches the app only through ctx — the same surface a third party gets. The core primitives they lean on (the terminal's process sessions, the theme domain service) still live in the host; that split is by design. The decisions behind the model are recorded as ADRs in docs/decisions/.

This table is bundled features only. Extensions that live in silo-code/silo-extensions and are installed at runtime — silo.follow-ups, silo.agent-monitor, and silo.tasks (RFC 0031) — deliberately get no row here; they are discovered through Browse, not shipped in the app.

Extension distribution

How a third-party extension gets from a package into the running app. See Extensions (install / Browse / updates) and Publishing an extension.

CapabilityStatus
Author against @silo-code/sdk from npmstabledocs
Install from local folderstabledocs
Enable / disable / uninstall (runtime)stabledocs
First-party built-ins listed (disable-only, branded)stabledocs
Load on launch + persisted registrystabledocs
silo install / silo uninstall CLIstabledocs
npx create-silo-extension scaffoldstabledocs
Install from URL (tarball / GitHub release)stabledocs
Install from npm registrystabledocs
Update checking + applystabledocs
Extension registry — browse / search / installstabledocs · catalog
Registry website (extensions.getsilo.dev)stableextensions.getsilo.dev
Private / team registries (federated index)planneddesign
Permissions / capability modelstabledocs

Updates: "Update checking + apply" is the P1 registry feature — the app polls registry.getsilo.dev, shows a badge, and applies Update / Update all from Settings → Extensions. That is not the same as Safe update below (stage → validate → swap + rollback on a bad install), which is still planned.

Extension model & safety

The contract + lifecycle work that makes the system survivable at scale. The designed pieces are RFCs in docs/proposals/ (esp. 0005 / 0006); the rest is tracked in the table above.

CapabilityStatus
Manifest id / path validationstable
Declarative contributes + activation eventsplanned
engine compatibility enforcementplanned
Sandbox / capability gating (untrusted code)planned
Storage cleanup on uninstallplanned
Safe update (stage-validate-swap + rollback)planned
Failed-load error surfacing + collision reportingplanned

Designed surfaces (planned)

The shape of each planned surface is now designed in an RFC under docs/proposals/ (subject to change until it ships):

Planned surfaceRFC
ctx.ui slice 2 — quickPick / progress (prompt covers inputBox)RFC 0001
ctx.secrets — host-mediated credentials (storage global / workspace shipped)RFC 0004
Declarative contributes + activation eventsRFC 0005
Sandboxed extension execution (the permission model itself is stable)RFC 0006
Extension CSS auto-injection + SDK createStoreRFC 0007
Language intelligence (TS/JS via tsserver) — held, not scheduledRFC 0009
Context-menu contributions — explorer/item dispatchRFC 0013
pty-host daemon relocated outside the AppImage mount (Linux)RFC 0017
Hooks as an authoritative agent-activity channel (blocked state, sub-agents)RFC 0020
Side-panel tab adornments (owner handle from registerSidePanel)RFC 0022
Git-detection handler claim protocolRFC 0024
Extension-to-extension version floors (engine-style, generalized)RFC 0025
Private / team registries (federated index)RFC 0014

RFCs 0002 (typed ctx events), 0008 (package format + remote install) and 0014 (the registry) used to sit in this table and have since shipped — they are implemented now, and only the leftovers listed above are still open.


Tooling

Not part of the extension SDK — host-side developer/test surfaces.

SurfaceStatus
silo <path> CLIstabledocs
CLI noun grammarplannedADR 0047
CLI Control APIplannedRFC 0034
Automation RPC (dev)experimentaldesign
Nightly release channelstabledocs

silo <path> CLI stable

A terminal entry point: silo <dir> foregrounds (or launches) Silo and opens/activates a workspace for that folder; silo <file> opens the file in the active workspace; silo agent run [--profile <id>] launches an Agent Profile (RFC 0033) into the workspace the shell is in. Built on tauri-plugin-single-instance — a second launch is forwarded to the running instance rather than opening a new window. Commands that report a result (status, ws list, agent run) go through the Control API below instead. Install the command from File → Install silo Command in PATH. See the silo command.

CLI noun grammar planned

Every silo capability gets one canonical spelling, silo <noun> <verb>, with today's forms kept as permanent shorthands: silo <path> for silo ws open, silo install for silo ext install. Reserved nouns are ext, ws, agent, term, and help — a folder with one of those names is still reachable as ./ws or silo -- ws. Machine callers get --json, a --ws <folder|.|id> flag on workspace-scoped verbs, and commands that never prompt, because the CLI's primary consumer is a coding agent. Also lands the targeting fix: a path inside a workspace resolves to that workspace — so silo README.md stops opening in whichever workspace the app last focused, and silo . from a subdirectory switches to the project above it instead of creating a second workspace.

CLI Control API stable

A return channel, so a silo command can answer: real stdout, a real exit code, and one --json envelope. The CLI used to be a one-way forwarder — argv in, exit 0 out — which is fine for "open this folder" and useless for "which workspaces exist" or "what id did that get".

silo status reports whether Silo is running and whether it is actually serving commands (so a wedged app looks different from no app). silo ws list reads your workspace files from disk — it works with Silo closed — and annotates each row with live state when Silo is up. silo agent run now returns the id of the terminal it created. Every one takes --json for one parseable line, and every one exits with a code you can branch on. --launch starts Silo and waits for it when nothing is running.

The channel is a per-user Unix socket (Windows: a named pipe) that only processes running as you can reach — no port, nothing a web page can touch — and it accepts a closed list of named operations rather than anything the app can do. Extensions don't reach it; they have ctx. Separate from the dev-only Automation RPC below. See the silo command.

Automation RPC experimental

A dev-only loopback HTTP RPC for driving the real running app from a test suite, CI, or an agent — works around macOS having no WKWebView automation hook. Excluded from release builds (Cargo automation feature + frontend DEV guard); in dev it's always on but every request must carry an X-Silo-Automation header and a loopback Host, so a web page you visit can't drive it. Ops include ping, exec (run a registered command), activeElement / editorsDetail (focus introspection), workspace/file test-driver ops, contextKeys, and eval. See docs/automation.md.