A desktop coding agent for macOS

Rebuilds itself.
Keeps working.

Darkspyre is built from replaceable modules, and the agent can upgrade them while the app runs. Your conversations, drafts and open dialogs carry across the swap. If a new build fails, Darkspyre recovers to the last healthy version on its own.

Live self-rebuild

An agent that can change its own code.

The agent loop, the tools, the sidebar, the conversation view, plugin management and themes are each a packaged module. The agent replaces any of them with the core_upgrade tool, and the conversation that asked picks up where it left off.

  1. Check

    One module, checked first

    An upgrade replaces a single module inside the running app, such as the tools or the sidebar. The new module is verified before anything changes. A bad one is rejected, and the running module never notices.

  2. Swap

    State carried across

    The swap waits for the turn to end. Sessions, queued prompts, drafts, attachments, scroll position and open dialogs are handed to the new version. The old code is unloaded.

  3. Resume

    Recovers on failure

    A health check confirms the new version. If it fails, Darkspyre returns to the previous healthy version. Either way the outcome is posted back into the same conversation, and every attempt is recorded.

Why Darkspyre

What sets it apart.

Compared with pi, opencode and Hermes Agent, as each project documented itself in September 2026.

A kernel-enforced sandbox

Every shell command and everything it starts runs under macOS sandbox-exec, with read and write confinement. The others check permissions in their own process, leave isolation to containers, or ask an LLM to approve commands.

Hard boundaries, no prompts

Three fixed permission levels. An operation succeeds inside the level or fails. Rules can only deny, a deletion guard refuses wildcard deletes, and a provider's request to widen its own sandbox is always declined.

Plugins with a real interface

Plugins add Blazor panels, settings tabs and surfaces in the desktop window. Elsewhere, extensions reach the interface through terminal widgets, prompts or toasts.

Isolated extensions

C# and Python extensions run in their own processes. A crashing extension restarts, then is quarantined. Plugins load in collectible contexts with a fallback version at startup.

Your Claude subscription

Darkspyre uses a Claude subscription through the official Claude CLI, and a ChatGPT subscription through its own sign-in. opencode's documentation says a Claude Pro or Max subscription cannot be used with it.

Built for coding work

Build actions with parsed .NET errors, a source and diff viewer, Jira tools, durable task lists and a built-in worktree tool, without adding community plugins.

How the four agents compare
DarkspyrepiopencodeHermes Agent
OS sandboxsandbox-exec on every shell command, with read and write confinementNone; containers or VMs through extensionsNone; Docker image or pluginsDocker, SSH and cloud backends; none locally
PermissionsThree fixed levels, deny-only rules, no promptsNone built inAllow, ask or deny per tool; allow by defaultPattern rules and an LLM approver
ExtensionsC# plugins with interface panels; C# and Python extensions out of processTypeScript extensions in processJS and TS pluginsPython plugins in process
InterfaceNative macOS appTerminalTerminal, desktop beta, web, IDECLI, desktop, web, messaging

Built native

.NET 11 and Blazor, not a browser in a box.

Darkspyre is a C# application on .NET 11. The agent loop, tools, sessions and plugin runtime all run in one process. The interface is Blazor, rendered in a Photino window that uses the WebKit view built into macOS, so there is no bundled Chromium.

  • One signed bundle. Developer ID signed and self-contained.
  • Collectible modules. Core modules and plugins load in contexts that unload cleanly, which live self-rebuild depends on.
  • In-process models. A Tensor engine runs local models inside the app over TensorSharp and ONNX Runtime.
  • Sessions in SQLite. Transcripts and context survive restarts, and any prompt can fork the session.

What it does

An agent that works where you work.

A native macOS window around an agent loop that asks the model, runs the tools it asks for, and repeats until the work is finished.

01

Sandboxed shell

Every command runs inside a macOS sandbox-exec profile. The session's permission level decides what the agent may read, write and execute.

02

Bring your own model

Connect an API key, an OpenAI-compatible or local server, Amazon Bedrock, or an existing Claude, ChatGPT or Gemini subscription. Credentials stay in the macOS keychain.

03

Guarded tool calls

Every tool call, built in or added by a plugin, passes deny rules, a deletion guard and the permission level before it runs.

04

A worktree per task

The agent can branch a task into its own git worktree and continue there, so your main checkout stays untouched.

05

Keeps working in the background

Close the window and sessions keep running. Questions and blockers wait in the Prompts panel without stopping the run.

06

Plugins and extensions

Plugins add tools, settings and interface panels. Extensions add tools from a separate process, written in C# or Python. MCP servers connect over stdio.

Companion plugins

Six plugins for daily work.

Each one is a signed package that Settings → Plugins can import, enable and update. Each can be replaced by a newer version without reinstalling the app.

Build Tool

C# plugin

A repository declares its build actions once. The agent lists them with build_list and runs one with build_run, getting back each command's status, exit code, duration and up to 20 distinct errors, including parsed .NET and MSBuild errors. The Build Output panel streams the latest run.

File Viewer

C# plugin

A Files panel that browses the session's folders. Source view highlights C#, JavaScript, JSON, HTML, Razor, XML, CSS, SQL and Python. Diff view compares against HEAD or any reference and refreshes as the file changes. The agent opens files at a line with open_file.

MCP Client

C# plugin

Reads mcpServers from .mcp.json in the project and home folders and starts each server per session. Its tools join the agent's tool list and run at the session's permission level.

RightSize

C# plugin

Profiles a unit of work before it is dispatched. A small local ONNX classifier sizes it, estimates the reasoning it needs, flags gates such as security review, and suggests the model you assigned to that size.

Tickets

C# extension

Ten Jira Cloud tools: get, search, children, comments, create, create subtask, update, comment, reply and transition. Credentials stay in a file the agent never sees, and writes run one at a time.

Todo

C# extension

Durable task lists with open, done and blocked states, for each session and for the project. Every turn carries the current lists, so the agent keeps track of the plan across long runs.

Download

Darkspyre for macOS

Coming soon The first public build is being prepared. This page will offer the signed disk image as soon as it is ready.

Download for macOS
  • macOS 14Sonoma or later
  • Apple siliconM-series Mac
  • A model providerAPI key, subscription or local server