Sophon 1.15 is here
All Posts
announcement
release

Sophon 1.15: Plugins, Grounded Documents, and an Assistant That Asks First

Sophon Team·

Sophon 1.15 is built around trust. Extensions you explicitly opt into, one plugin at a time. Answers you can check against the source they came from. And an assistant that, when it's missing something, asks you a real question instead of guessing.

Plugins: Extend the Core, Not Just the Tools

Skills and MCP servers add tools. Plugins go deeper: they extend Sophon's core interfaces without forking Sophon. A plugin is an out-of-process dotnet program that the Gateway spawns, talks to over gRPC, healthchecks every 30 seconds, and restarts with backoff if it crashes.

Two interfaces are live today. ChannelAdapter plugins add entire messaging channels — a proprietary in-house chat system, an internal ticketing bridge, a niche protocol Sophon doesn't speak natively. Your channel shows up in the Dashboard's add-channel wizard next to the built-ins, with full session, routing, and approval integration. DocumentExtractor plugins teach the document pipeline new file formats — EPUB, RTF, CAD drawings — with built-in formats always winning ties.

A plugin is a directory with a manifest.json:

{
  "name": "acme-chat-adapter",
  "version": "1.0.0",
  "description": "Channel adapter for the Acme in-house chat system",
  "author": "Your Name",
  "type": "plugin",
  "pluginInterface": "ChannelAdapter",
  "entrypoint": "AcmeChatAdapter.dll",
  "channelType": "acme-chat",
  "recipientMetadataKey": "channel",
  "settings": [
    {
      "name": "serverUrl",
      "displayName": "Server URL",
      "type": "string",
      "required": true
    },
    {
      "name": "apiToken",
      "displayName": "API Token",
      "type": "secret",
      "required": true
    }
  ]
}

Settings of type secret are stored in the vault and masked everywhere. Pack and install with two commands:

sophon dev build
sophon dev install

Be clear-eyed about the trust model, because we are: plugins are full-trust local processes, not sandboxed code. That's a deliberate design — it's what lets a ChannelAdapter be a first-class channel rather than a bolted-on webhook. The controls sit at the boundary instead: plugins are off by default (Sophon:Plugins:Enabled), an admin allowlist decides which plugins may load, management lives on an admin-only Settings page with hot start and stop, and you should only install plugins from sources you trust. Running out of process buys stability, not security — a crashing plugin can't take the Gateway down with it.

ModelProvider, EmbeddingProvider, and VaultBackend manifests are accepted today and will be wired into the runtime in a coming release — and Tool plugins are refused on purpose, because custom tools belong in sandboxed skills or MCP servers, not in a full-trust process. See the plugins overview or start building with the plugin guide.

A Memory Graph That Maintains Itself

The Dashboard's graph explorer has been rebuilt: force-directed layout, per-agent colors, kind filters, a date window, node-cap presets, and a co-mention overlay that draws dashed edges between entities that keep appearing in the same entries. Any view exports as a Mermaid diagram — from the graph page, from the new memory.diagram tool, or right in chat, where mermaid fences now render as theme-aware diagrams.

Facts change, and the graph now handles that honestly. memory.write accepts a supersedes reference, so "moved to Berlin" replaces "lives in Munich" instead of contradicting it — superseded entries drop out of default views and search but stay inspectable, with per-entry history in the Dashboard. When one entity accumulates under two names, the duplicate detector flags the pair and a one-click merge in the Duplicates review sheet resolves it.

The graph also tends itself: a nightly consolidation job promotes durable facts from the daily log into long-term memory, then prunes logs past the retention window. And wikilinks learned a display form — [[Acme Corp|the client]] links the entity Acme Corp while showing "the client", without ever recording the display text as an alias. Full details in Memory Graph.

Ask Your Documents — and Get Answers You Can Check

Point a question at one document, or at your whole library, and Sophon answers with numbered citations that resolve to the exact file, chunk, and snippet it drew from. Small documents are answered from the full text; larger ones through top-k retrieval. And when retrieval finds nothing relevant, Sophon says so — no model call, no invented answer. Agents get the same powers through document.ask for synthesized answers and document.retrieve for verbatim passages.

Getting documents in is just as direct. Send a PDF to your agent on WhatsApp, Telegram, or Slack and it lands in your library automatically. Scanned PDFs are detected and run through OCR. Ask Sophon to save any URL and web pages become readable documents. Updating a file keeps its identity: the old revision is archived with full version history and per-version download. The in-app viewer now handles PDF, spreadsheets, DOCX, images, audio, Markdown, Mermaid, and syntax-highlighted code. Read Documents.

Sophon Asks Instead of Guessing

When an agent needs input, it can now ask a structured question: up to four questions per ask, each with two to four described options, multi-select where it fits, and free text always allowed. On the Dashboard the question is a card — typing in the composer answers it. The CLI walks you through pickers, Mobile shows its own card, and on messaging channels you reply with a number. If you don't answer in time, the agent receives an explicit timed-out result — never a silently picked first option.

Plan approval became a mode, too: interactive sessions default to showing you the plan before execution, while heartbeat, cron, webhook, and subagent runs proceed on their own — overridable per session or host-wide from Settings. And agent.delegate now accepts a task list, fanning out two to five subagents in parallel and returning their results in a structured envelope. See Approvals and Orchestration.

Bring Your Claude Subscription

If you pay for Claude Pro or Max, Sophon can now run on it. Three providers appear in Settings → Models. anthropic-subscription calls the API directly using the OAuth token the Claude Code CLI already stores — great for chat, though tool-bearing requests land in the overage lane on a plain subscription. claude-code shells the claude CLI for text-only generation within normal subscription limits. And claude-code-agent runs claude as its own agent loop exposed as an ordinary model provider, driving Sophon's tools over the embedded MCP server — tool-using and overage-free, with every tool call still passing Sophon's approval, risk, and sandbox gates. It's a v1 with honest limits: final-answer-only streaming, mid-loop approvals auto-deny in its non-interactive runs, and it needs a recent Claude Code CLI. Details in Subscriptions.

Also in 1.15

Canvas v3

Every frame now keeps its own version history with a stepper to walk revisions, plus a frame toolbar and width presets. A new DocumentFrame type opens uploaded or generated documents directly on the canvas through the shared viewer. See Canvas.

One-Click Backups

Create, list, and delete full data-directory backups from a Dashboard page — creation runs async with live progress, and every route requires the manage-settings permission, since backups contain every user's data. This release also applies eight database migrations on upgrade, so take a backup first. See Backup and Upgrade.

MCP Gets Per-User Identity

MCP tokens can now be bound to a specific Sophon user: every tool call and resource read over that token runs as that user, with per-user memory, document, and agent resources. One migration note: tools previously ran as the placeholder user "mcp-client" and resources were exported for "system" — data under those placeholder identities is no longer reachable over MCP, so generate a fresh token bound to your real user (single-user Personal installs fall back to the default user automatically). See MCP Server.

Get Sophon 1.15

The complete list of changes — including memory tenant-isolation hardening across every read and write — is in the changelog, and new installs start at Installation. Plugins ship disabled: enable Sophon:Plugins:Enabled, allowlist your first plugin, and build the channel you have always wanted.