Agent skill

Daemon Dev

by nteract in nteract/nteract

Develop, debug, and manage the runtimed daemon, Python bindings, and build system.

BSD-3-ClauseAuto-check passedDevelopment

Install Daemon Dev

skills CLI
$ npx skills add nteract/nteract --skill daemon-dev -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install nteract/nteract daemon-dev --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/nteract/nteract.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/daemon-dev .claude/skills/daemon-dev && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
daemon-dev
GitHub stars
178
Token cost
~3k tokens
SKILL.md length
1,138 words
Files
1
Skills in repo
10
Repo updated
First seen
Licence
BSD-3-Clause

At a glance

Develop, debug, and manage the runtimed daemon, Python bindings, and build system.

  • Works in 4 steps: Artifact guard: Verify gitignored WASM,… → Single Rust compilation: cargo build -p… → Frontend build: pnpm build (TypeScript +… → …
  • Working on daemon code
  • SKILL.md covers Quick Reference, Architecture, Build System and Development Workflow, plus 8 more sections
  • Calls cargo, uv and python3

What it does

Daemon Dev is an agent skill from nteract/nteract. Develop, debug, and manage the runtimed daemon, Python bindings, and build system. Use when working on daemon code, kernel issues, maturin builds, or xtask workflows.

Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development. It works with Python, WebAssembly and Rust. The repository describes itself as: We're back! Now firing notebooks out of a t-shirt gun. The licence is BSD-3-Clause.

When your agent uses it

  • Working on daemon code
  • Xtask workflows

Example prompts

  • “/daemon-dev”

Requirements

  • Python 3

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Artifact guard: Verify gitignored WASM, renderer-plugin, and MCP widget outputs. Build/dev commands fingerprint workspace inputs and skip…
  2. Single Rust compilation: cargo build -p runtimed -p runt -p nteract-mcp -p mcp-supervisor. Sidecars copied to crates/notebook/binaries/…
  3. Frontend build: pnpm build (TypeScript + Vite). --rust-only skips this.
  4. Tauri link: cargo tauri build --debug --no-bundle with embedded frontend assets. Use --skip-tauri only for fast edit checks where updated…

What it can do on your machine

Read from SKILL.md and the folder at commit 217d6fe. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • cargo
    • uv
    • python3
    • python
    • pnpm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use uv and pnpm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Daemon Dev loads about 3k tokens when it runs. Until then it costs about 44 tokens; SKILL.md has 1,138 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~44
When it runs · the whole SKILL.md, loaded when a task matches
~3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from nteract/nteract at commit 217d6fe, republished under its BSD-3-Clause licence (© nteract). 1,138 words, ~2,953 tokens.

Download SKILL.mdSave it as .claude/skills/daemon-dev/SKILL.md (or your agent's skills folder).
name
daemon-dev
description
Develop, debug, and manage the runtimed daemon, Python bindings, and build system. Use when working on daemon code, kernel issues, maturin builds, or xtask workflows.

Daemon Development

Quick Reference

TaskCommand
Start full dev loopcargo xtask dev
Report app + daemon identitycargo xtask dev status
Focus exact macOS dev appcargo xtask dev focus
Restart app + daemon cleanlycargo xtask dev --fresh
Start dev daemoncargo xtask dev-daemon
Full buildcargo xtask build
Rust-only rebuildcargo xtask build --rust-only
Fast sidecar checkcargo xtask build --rust-only --skip-tauri
Run bundled binarycargo xtask run
WASM rebuildcargo xtask wasm
Install nightly (Linux)./scripts/install-nightly
Daemon status./target/debug/runt daemon status
Daemon status (JSON)./target/debug/runt daemon status --json
Tail logs./target/debug/runt daemon logs -f
List kernels./target/debug/runt ps
List notebooks./target/debug/runt notebooks
Flush pool./target/debug/runt daemon flush
Stop daemon./target/debug/runt daemon stop
Run daemon testscargo test -p runtimed
Lintcargo xtask lint --fix

Architecture

The daemon (runtimed) is a singleton coordinating notebook windows over a Unix socket. Without it: race conditions on prewarmed environments, wasted resources, slow cold starts.

Components: Unix socket (IPC), lock file (singleton guarantee), UV/Conda pools (prewarmed envs), blob store (content-addressed outputs), notebook-docs (persisted Automerge documents).

Protocol: Length-prefixed typed frames over Unix socket. Preamble → JSON handshake → Automerge sync → steady state. Frame types: AutomergeSync (0x00), Request (0x01), Response (0x02), Broadcast (0x03), Presence (0x04), RuntimeStateSync (0x05), PoolStateSync (0x06), SessionControl (0x07), PutBlob (0x08), CommsDocSync (0x09).

CRDT ownership: Frontend WASM writes cell source, position, type, metadata. Daemon writes RuntimeStateDoc for outputs, execution counts, comm topology, trust, env progress, and project context. Mutable widget state lives in CommsDoc and is gated by RuntimeStateDoc topology. Write to a CRDT document only from an authority allowed for that document.

Build System

How cargo xtask build works (4 phases)
  1. Artifact guard: Verify gitignored WASM, renderer-plugin, and MCP widget outputs. Build/dev commands fingerprint workspace inputs and skip wasm-pack when outputs are current; rebuild only when outputs are missing, invalid, or stale.
  2. Single Rust compilation: cargo build -p runtimed -p runt -p nteract-mcp -p mcp-supervisor. Sidecars copied to crates/notebook/binaries/. The notebook crate is intentionally excluded until the Tauri link phase after frontend assets exist.
  3. Frontend build: pnpm build (TypeScript + Vite). --rust-only skips this.
  4. Tauri link: cargo tauri build --debug --no-bundle with embedded frontend assets. Use --skip-tauri only for fast edit checks where updated sidecar binaries are enough; run a normal build before launching the bundled app.

All Rust targets build in one cargo build call to avoid feature-unification recompilation. WASM outputs are gitignored; runtimed's build.rs panics if missing. nteract-mcp embeds the MCP widget HTML; prepare it with cargo xtask artifacts ensure mcp-widget.

WASM rebuild

Run after changing crates/runtimed-wasm/, crates/sift-wasm/, crates/notebook-doc/, crates/notebook-wire/, or scripts/build-renderer-plugins.ts:

bash
cargo xtask wasm             # all (runtimed-wasm + sift-wasm + renderer plugins)
cargo xtask wasm runtimed    # only runtimed-wasm
cargo xtask wasm sift        # only sift-wasm

Development Workflow

Fast iteration
bash
cargo xtask dev

This is the normal desktop workflow: it starts the per-worktree daemon, waits for readiness, launches the hot-reload app, and stops the daemon it started when the app exits. On macOS the app has a distinct per-worktree display name, bundle ID, and process record. Inspect or focus that exact process with:

bash
cargo xtask dev status
cargo xtask dev focus

After Tauri bootstrap or listener changes, use cargo xtask dev --fresh to reset only this worktree's app and daemon. Use the split workflow when the daemon must remain independently managed:

bash
# Terminal 1
cargo xtask dev-daemon

# Terminal 2
cargo xtask notebook
Testing
bash
cargo test -p runtimed                          # All tests
cargo test -p runtimed --test integration       # Integration tests only
cargo test -p runtimed test_daemon_ping_pong    # Specific test
Per-worktree isolation

cargo xtask dev, cargo xtask dev-daemon, cargo xtask notebook, and cargo xtask run-mcp derive the git worktree automatically. State lives at <cache>/runt-nightly/worktrees/{hash}/. Set RUNTIMED_DEV=1 and RUNTIMED_WORKSPACE_PATH="$(pwd)" only for raw ./target/debug/runt commands outside xtask.

Python Bindings

Two venvs
VenvPathPurpose
Workspace.venv (repo root)Day-to-day dev, MCP server
Testpython/runtimed/.venvIsolated pytest runs
Installation
bash
# Into workspace venv (most common; what `up rebuild=true` does)
cd crates/runtimed-py
VIRTUAL_ENV=../../.venv uv run --directory ../../python/runtimed maturin develop

# Into test venv (for pytest)
VIRTUAL_ENV=../../python/runtimed/.venv uv run --directory ../../python/runtimed maturin develop

Always set VIRTUAL_ENV explicitly. Without it, the .so installs into whichever venv uv run resolves.

Basic usage
python
import asyncio, runtimed

async def main():
    client = runtimed.Client()
    async with await client.create_notebook() as notebook:
        cell = await notebook.cells.create("print('hello')")
        result = await cell.run()
        print(result.stdout)  # "hello\n"

        # Granular execution control
        execution = await cell.execute()
        print(execution.status)  # "queued" | "running" | "done" | "error"
        result = await execution.result()

asyncio.run(main())
Output.data typing
MIME categoryPython typeNotes
Binary image (image/png)bytesRaw binary
JSON (application/json)dictParsed
Text (text/plain, text/html)strUTF-8
LLM hint (text/llm+plain)strSynthesized blob URL
Integration tests
bash
RUNTIMED_SOCKET_PATH="$(./target/debug/runt daemon status --json | python3 -c 'import sys,json; print(json.load(sys.stdin)["socket_path"])')" \
  python/runtimed/.venv/bin/python -m pytest python/runtimed/tests/test_daemon_integration.py -v

MCP Server

Use nteract mcp for the supervised MCP server. runt mcp remains available to run the worker directly. Run via cargo xtask run-mcp for development.

Advertised tools (all_tools()): list_active_notebooks, list_notebooks, connect_notebook, create_notebook, save_notebook, show_notebook, disconnect_notebook, create_cell, set_cell, delete_cell, move_cell, execute_cell, run_all_cells, get_results, interrupt_kernel, restart_kernel, manage_dependencies, replace_match, replace_regex.

Hidden/callable read tools (hidden_tools()): get_cell, get_all_cells. These are callable but not advertised in list_tools(). They are dispatch-only read paths for clients that prefer direct tool calls over resource URIs.

Legacy dependency and cell-metadata tool names still dispatch for compatibility, but new workflows should use manage_dependencies for dependency inspection/edits and get_results for execution output lookup by execution_id.

Show full SKILL.md (422 more words)Show less

RuntimeStateDoc

Daemon-authoritative Automerge document synced via frame 0x05. Frontend reads only (useRuntimeState()); Python reads via notebook.runtime.

Schema: kernel/{status, starting_phase, name, language, env_source}, queue/{executing, queued}, executions/{id → cell_id, status, execution_count, success}, env/{in_sync, added, removed}, trust/{status, needs_approval}, last_saved, plus comm topology/routing. Mutable widget values live in CommsDoc, not RuntimeStateDoc.

Execution lifecycle: Client sends ExecuteCell → daemon generates execution_id → writes to queue → status progresses through running/done/error → Python Execution handle polls for updates.

Async CRDT Mutations

Any daemon code that reads doc state, does async work, then writes back must reconcile against the captured baseline heads. Prefer document-owned transact_at_heads_recovering(...) for ordinary async writes. Use fork_with_actor(...) + merge_recovering(...) only when the async worker genuinely needs an editable fork across the await. Direct mutation after an async gap overwrites concurrent edits.

rust
let baseline_heads = {
    let mut doc = room.doc.write().await;
    doc.get_heads()
};
let result = do_async_work().await;
let mut doc = room.doc.write().await;
doc.transact_at_heads_recovering(&baseline_heads, Some("runtimed:formatter"), "tx", |doc| {
    doc.update_source(&cell_id, &result)?;
    Ok(())
}).ok();

For synchronous blocks: doc.fork_and_merge(|fork| { ... }).

Notebook Room Lifecycle

Each open notebook has a room (NotebookRoom), keyed by UUID. A PathIndex maps canonical paths to room UUIDs.

  • Autosave: 2s quiet, 10s max interval. Skips untitled/mid-load notebooks.
  • Multi-window: Multiple windows join the same room as Automerge peers.
  • Eviction: All peers disconnect → delayed eviction (default 30s) → kernel shuts down, room removed.
  • Crash recovery: Untitled notebooks persist to notebook-docs/{hash}.automerge; snapshots in notebook-docs/snapshots/.

Key Invariants

  • is_binary_mime() has one canonical Rust implementation in notebook-doc::mime, shared across all crates.
  • Iframe sandbox: allow-same-origin is forbidden.
  • Per-cell O(1) accessors must stay in sync across WASM, Rust, and Python.
  • Hold tokio mutex guards only within synchronous blocks (use block scoping, verify with cargo test -p runtimed --test tokio_mutex_lint).
  • Cell list renders in stable DOM order (sorted by ID) with CSS order for visual positioning.

Troubleshooting

Daemon lock held: Inspect the selected endpoint with nteract daemon status and check its daemon.lock with lsof. The OS releases the advisory lock when its owner exits; an existing file is not proof of a live owner. Do not delete the lock file to bypass contention, since replacing its inode can allow two owners. Filesystem failures are separate errors, and live socket metadata is the discovery source.

Pool not replenishing: Verify uv --version and check ~/.cache/runt/envs/.

Wrong daemon (Python): If outputs return parse errors with hashes, the bindings connect to the wrong daemon (blob store is per-daemon). Set RUNTIMED_SOCKET_PATH.

Build not reflected (Python): Rebuild into the correct venv with explicit VIRTUAL_ENV. Or use up rebuild=true.

Shipped App / System Daemon

Production daemon installs as a system service (macOS: launchd, Linux: systemd user). Manage with nteract daemon {status,stop,start,logs,uninstall}.

Key paths (macOS): Binary at ~/Library/Application Support/runt/bin/runtimed, socket at ~/Library/Caches/runt/runtimed.sock, logs at ~/Library/Caches/runt/runtimed.log.

Use ./target/debug/runt daemon stop to stop only your worktree's daemon. Avoid pkill/killall because they affect every worktree.

© nteract, BSD-3-Clause. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/daemon-dev of nteract/nteract.

Open the folder on GitHubat commit 217d6fe

Compare with similar skills

Daemon Dev next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Daemon Dev compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Daemon Dev this skillnteract/nteract178—~3kAutomated safety check: PassBSD-3-Clause
Check Loanwordayutaz/piper-plus218—~1.1kAutomated safety check: PassMIT
Prepare Releaseayutaz/piper-plus218—~2kAutomated safety check: PassMIT
Run Testsayutaz/piper-plus218—~641Automated safety check: PassMIT
Edge Pythondylan-sutton-chavez/edge-python271—~12kAutomated safety check: PassCustom licence
Test Runnernoumena-labs/Sipp121—~854Automated safety check: PassApache-2.0

Similar skills

  • Check Loanword

    ayutaz/piper-plus

    ZH-EN code-switching loanword の同期と forward-compat を 1 コマンドで検査。zhenloanword.json を編集したり 5 ランタイムのいずれかに新規エントリを追加する前後に呼ぶ。Python source を canonical とし、Rust×2 / Go / C / WASM / C++ の 6 mirror + Python…

    218 GitHub stars~1.1k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Prepare Release

    ayutaz/piper-plus

    9 パッケージ × 5 レジストリの version bump と関連ファイル更新 (Cargo.lock / package-lock.json / Swift checksum / CHANGELOG 昇格) を 1 コマンドで適用案にする read-mostly skill。release-prep (確認用) の続きに呼び、 実 bump 差分の markdown 提案 + 順序付き…

    218 GitHub stars~2k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Run Tests

    ayutaz/piper-plus

    piper-plus の各言語ランタイムのテストを実行します。引数 python/rust/cs/go/js/cpp/all で対象を選択。未指定なら git diff から自動判定。

    218 GitHub stars~641 tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Edge Python

    dylan-sutton-chavez/edge-python

    Write, run, test and package Edge Python programs with the edge CLI.

    271 GitHub stars~12k tokensUpdated today
    SecurityAuto-check passed
  • Test Runner

    noumena-labs/Sipp

    Runs the narrowest relevant tests to validate changes. An agent skill from noumena-labs/Sipp.

    121 GitHub stars~854 tokensUpdated 17 days ago
    AI & LLM EngineeringAuto-check passed
  • Check Runtime Parity

    ayutaz/piper-plus

    推論パスの canonical Python (exportonnx.py / vits/models.py:VitsModel.infer) を変更した PR で、6 ランタイム (Python runtime / Rust / Go / C / C++ / WASM) の inference path が追随しているかを git diff で確認。PR

    218 GitHub stars~972 tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed

More from nteract/nteract

All 10 skills in this repo
  • Automerge Sync

    nteract/nteract

    Automerge sync protocol internals, document model (OpSet, ChangeGraph, fork/merge, save/load lifecycle), and higher-level protocol design patterns.

    178 GitHub stars~4.5k tokensUpdated today
    Auto-check passed
  • Execution Pipeline

    nteract/nteract

    The end-to-end cell execution pipeline from MCP tool call through daemon to kernel and back.

    178 GitHub stars~2.7k tokensUpdated today
    Auto-check passed
  • Nteract Diagnostics

    nteract/nteract

    Pull and triage submitted nteract diagnostics archives from Cloudflare using a diagnostics id/token.

    178 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Repl

    nteract/nteract

    Use nteract notebooks as a persistent Python REPL. An agent skill from nteract/nteract.

    178 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Testing

    nteract/nteract

    Run tests, verify changes, and collect diagnostics. An agent skill from nteract/nteract.

    178 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Architecture

    nteract/nteract

    Architecture and documentation framing for cross-cutting repo decisions, docs taxonomy placement, ADRs, memos, PRDs, implementation plans, audits, measurements, runbooks, and source-grounded…

    178 GitHub stars~497 tokensUpdated today
    Auto-check passed

Categories

Questions about Daemon Dev

What does Daemon Dev do?

Develop, debug, and manage the runtimed daemon, Python bindings, and build system. Daemon Dev is an agent skill from nteract/nteract. Develop, debug, and manage the runtimed daemon, Python bindings, and build system.

When should I use Daemon Dev?

Daemon Dev fits situations like: working on daemon code; xtask workflows.

How do I install Daemon Dev in Claude Code?

Run `npx skills add nteract/nteract --skill daemon-dev -a claude-code`. Or copy the skill folder (.agents/skills/daemon-dev in nteract/nteract) into .claude/skills/daemon-dev in your project. Claude Code loads it when a task matches its description.

How do I install Daemon Dev in Codex?

Run `npx skills add nteract/nteract --skill daemon-dev -a codex`. Or copy the skill folder (.agents/skills/daemon-dev in nteract/nteract) into .agents/skills/daemon-dev in your project. Codex loads it when a task matches its description.

Can I use Daemon Dev in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add nteract/nteract --skill daemon-dev -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/daemon-dev, .gemini/skills/daemon-dev, .github/skills/daemon-dev and .opencode/skills/daemon-dev in your project.

What does Daemon Dev need to run?

Going by SKILL.md and its folder, Daemon Dev needs the command-line tools its instructions call (cargo, uv, python3, python and pnpm). Our summary lists: Python 3.

Does Daemon Dev access the network?

SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Daemon Dev safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Daemon Dev use?

Daemon Dev is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Daemon Dev use?

About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Daemon Dev?

Skills that share tags, products or a category with Daemon Dev: Check Loanword (ayutaz/piper-plus, 218 stars), Prepare Release (ayutaz/piper-plus, 218 stars), Run Tests (ayutaz/piper-plus, 218 stars) and Edge Python (dylan-sutton-chavez/edge-python, 271 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Daemon Dev?

nteract (a GitHub organization) maintains it in nteract/nteract, which has 178 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 7, 2026.

Source: nteract/nteract on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.