RTK Rust Design Patterns
rtk-ai/rtk
Describes seven Rust design patterns for the RTK CLI filter modules, with when to use each, RTK examples, and notes on when a pattern is overkill.
Automerge sync protocol internals, document model (OpSet, ChangeGraph, fork/merge, save/load lifecycle), and higher-level protocol design patterns.
$ npx skills add nteract/nteract --skill automerge-sync -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nteract/nteract automerge-sync --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/nteract/nteract.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/automerge-sync .claude/skills/automerge-sync && rm -rf skills-srcUse ~/.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/
Install the "automerge-sync" agent skill from https://github.com/nteract/nteract/tree/main/.agents/skills/automerge-sync into .claude/skills/automerge-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automerge-sync", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/nteract/nteract/tree/main/.agents/skills/automerge-syncType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add nteract/nteract --skill automerge-sync -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nteract/nteract automerge-sync --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nteract/nteract.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/automerge-sync .agents/skills/automerge-sync && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "automerge-sync" agent skill from https://github.com/nteract/nteract/tree/main/.agents/skills/automerge-sync into .agents/skills/automerge-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automerge-sync", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nteract/nteract --skill automerge-sync -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nteract/nteract automerge-sync --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nteract/nteract.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/automerge-sync .cursor/skills/automerge-sync && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "automerge-sync" agent skill from https://github.com/nteract/nteract/tree/main/.agents/skills/automerge-sync into .cursor/skills/automerge-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automerge-sync", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/nteract/nteract.git --path .agents/skills/automerge-sync--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add nteract/nteract --skill automerge-sync -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nteract/nteract automerge-sync --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nteract/nteract.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/automerge-sync .gemini/skills/automerge-sync && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "automerge-sync" agent skill from https://github.com/nteract/nteract/tree/main/.agents/skills/automerge-sync into .gemini/skills/automerge-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automerge-sync", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install nteract/nteract automerge-syncInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add nteract/nteract --skill automerge-sync -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/nteract/nteract.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/automerge-sync .github/skills/automerge-sync && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "automerge-sync" agent skill from https://github.com/nteract/nteract/tree/main/.agents/skills/automerge-sync into .github/skills/automerge-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automerge-sync", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nteract/nteract --skill automerge-sync -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install nteract/nteract automerge-sync --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nteract/nteract.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/automerge-sync .opencode/skills/automerge-sync && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "automerge-sync" agent skill from https://github.com/nteract/nteract/tree/main/.agents/skills/automerge-sync into .opencode/skills/automerge-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automerge-sync", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
automerge-syncAutomerge sync protocol internals, document model (OpSet, ChangeGraph, fork/merge, save/load lifecycle), and higher-level protocol design patterns.
Automerge Sync is an agent skill from nteract/nteract. Automerge sync protocol internals, document model (OpSet, ChangeGraph, fork/merge, save/load lifecycle), and higher-level protocol design patterns. Use when debugging sync failures, reasoning about convergence, changing reconnection logic, working with document structure, diagnosing panics in op application, adding new sync streams, or evaluating architectural patterns from automerge-repo and samod.
Its SKILL.md is about 4.5k 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, covering Design patterns. It works with Rust and WebAssembly. The repository describes itself as: We're back! Now firing notebooks out of a t-shirt gun. The licence is BSD-3-Clause.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 32e010b. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are rust).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Automerge Sync loads about 4.5k tokens when it runs. Until then it costs about 104 tokens; SKILL.md has 1,956 words of instructions outside code blocks.
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.
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.
The full file from nteract/nteract at commit 32e010b, republished under its BSD-3-Clause licence (© nteract). 1,956 words, ~4,550 tokens.
.claude/skills/automerge-sync/SKILL.md (or your agent's skills folder).Production Rust and runtimed-wasm use crates.io Automerge exactly 0.11.0
(Cargo.toml:57, Cargo.lock:627). Commit ae6aef0f adopted it on 2026-08-26.
The frontend uses these Rust WASM bindings, not @automerge/automerge.
The only remaining Automerge git dependency is automerge-legacy, a dev-dependency of
automerge-store pinned to nteract/automerge revision
3fb6af5cc3af23b79f27cebfa339c8c98987e7b7 (Rust 0.10.0). It is a test peer
for snapshot and encoded-sync compatibility, not a production patch override.
See crates/automerge-store/Cargo.toml:17 and
crates/automerge-store/tests/version_compat.rs:282.
| Type | Role | Key detail |
|---|---|---|
OpId(counter, actor_index) | Universal op identifier | ROOT = (0,0). Counter is per-actor monotonic. Actor index is position in actor table. |
ActorId | Peer identity (TinyVec<[u8;16]>) | Lexicographic byte ordering is load-bearing. nteract uses "runtimed", "human:<uuid>". |
Change | Batch of ops with causal deps | Has actor_id, seq (per-actor monotonic), deps (parent hashes), hash (SHA-256). |
ChangeGraph | DAG of history | heads = changes with no children. has_change(&hash) is O(1). Backs required_heads. |
OpSet | Materialized document (columnar) | Ops sorted by (object, key, lamport_ts). Rebuilt from columns on load(). |
Actor table ordering: OpSet.actors is a sorted Vec<ActorId>. Ops store only the index. If two documents disagree on index→actor mapping, ops are misinterpreted. This is the root of the historical #1187 panic class.
// Automerge: raw document
Automerge { queue: ChangeQueue, change_graph: ChangeGraph, deps: HashSet<ChangeHash>, ops: OpSet, actor: Actor }
// AutoCommit: wrapper nteract uses
AutoCommit { doc: Automerge, transaction: Option<(PatchLog, TransactionInner)>,
patch_log: PatchLog, diff_cursor, save_cursor, isolation: Option<Vec<ChangeHash>> }Auto-transaction: Mutations open a transaction implicitly. Reads, save(), fork(), merge(), and sync() commit pending ops first.
Isolation mode: isolate(heads) limits visible state. Mutations while isolated depend on isolation heads, not tips. integrate() returns to latest.
PatchLog: Tracks diffs for incremental materialization. nteract's WASM computes CellChangeset by diffing after sync frames.
rebuild_from_save() can fail or reject cell loss; it is containment, not a guarantee that arbitrary corruption is repaired.receive_sync_message calls internally.| Method | Semantics | Cost |
|---|---|---|
fork() | Deep clone + new random actor | O(doc size) |
fork_at(heads) | Replay changes up to heads into fresh doc | More expensive than fork; use for views/diagnostics |
merge(other) | Apply other's new changes to self | O(changes added) |
DuplicateSeqNumber trap: Two concurrent forks sharing the same ActorId produce changes with identical (actor, seq). The second merge fails. Use unique actors for concurrent forks.
| Factor | Growth | Notes |
|---|---|---|
| Operations | O(total mutations) | Largest factor |
| Tombstones | Accumulate forever | No built-in GC |
| Actor table | O(unique peers) | Small per entry |
| ChangeGraph | O(total changes) | Metadata per change |
save() compacts via columnar + DEFLATE. No history compaction exists.
Message { heads, need, have: Vec<Have>, changes: ChunkList, flags, version }heads: "here's what I have"need: "I'm missing these specific changes"have: bloom filter (1% FP rate, 10 bits/entry, 7 probes) of changes since last_syncchanges: actual change data| Field | Persists across encode/decode? | Purpose |
|---|---|---|
shared_heads | Yes | Hashes both peers agree they share |
last_sent_heads | No | Our heads at last send |
their_heads / their_need / their_have | No | Peer's last advertisement |
sent_hashes | No | Dedup already-sent changes |
in_flight | No | Suppresses duplicate sends while awaiting ack |
have_responded | No | True after first message sent |
Critical: encode() only serializes shared_heads. All else is session-ephemeral. sync::State::new() is always safe for reconnection: you lose optimization (may resend) but keep correctness.
generate_sync_message() returns None when in_flight && last_sent_heads == our_heads && have_responded. Any incoming message sets in_flight = false (counts as ack). If you need a fresh exchange, reset sync state rather than working around None.
shared_headssent_hashesV1 is original; V2 allows compressed document encoding. Backward-compatible via MessageFlags appended to V1 messages. V2 discovered via flags, then used for subsequent messages.
| Stream | Frame | Document | Ownership |
|---|---|---|---|
| Notebook | 0x00 AutomergeSync | SharedDocState.doc | Bidirectional |
| RuntimeState | 0x05 RuntimeStateSync | SharedDocState.state_doc | Daemon-authoritative |
| CommsDoc | 0x09 CommsDocSync | SharedDocState.comms_doc | Widget state, gated by RuntimeStateDoc topology |
| CommentsDoc | 0x0a CommentsDocSync | SharedDocState.comments_doc (typed clients + frontend WASM); daemon replica persisted by comments_store.rs | Notebook-room comments sidecar; ingress validates change actor labels against the connection principal |
| PoolState | 0x06 PoolStateSync | PoolDoc | Frontend owns sync state; daemon carries pool_peer_state separately |
For CommentsDoc, see crates/comments-doc, daemon persistence at
crates/runtimed/src/notebook_sync_server/comments_store.rs, ingress at
peer_comments_sync.rs. Typed clients (notebook-sync crate) and frontend
WASM (runtimed-wasm) both hold CommentsDoc replicas. Optimistic client
mutations apply via Automerge; the daemon validates change actor labels against
the connection principal (clone-preview) and strips writes from scopes without
comment authority. There is no daemon finalization step. Attribution
(resolved_by_actor_label, resolved_at) is projected from admitted change
actors.
Priority: Frame (drain socket) → Changed (outbound sync) → Command (RPC) → Maintenance (50ms tick).
Mutex is std::sync::Mutex, never held across .await. Poison recovery: unwrap_or_else(|e| e.into_inner()).
Automerge is treated as a fallible boundary. Policy belongs to the document owner; sync and mutation helpers do not handle panics the same way.
Sync policy (2026-09-04):
recoverable_automerge_operation rebuilds and retries once only for a
caller-marked operation error. It returns a caught panic immediately, without
rebuild or retry (crates/automerge-recovery/src/lib.rs:163–201).NotebookDoc::receive_sync_message_recovering marks only
AutomergeError::PatchLogMismatch(_) recoverable. It resets the peer's
sync::State, rebuilds the document, then retries the original frame once
(crates/notebook-doc/src/lib.rs:2479–2508,
crates/automerge-recovery/src/lib.rs:159–160).NotebookDoc::generate_sync_message_recovering marks no operation error
recoverable; caught panics are returned to the caller
(crates/notebook-doc/src/lib.rs:2446–2464).Mutation policy: NotebookDoc::merge_recovering attempts to rebuild both
sides after a panic, then returns the failure. transact_at_heads_recovering
restores actor/isolation state and attempts rebuild on panic without rerunning
the mutation closure (crates/notebook-doc/src/lib.rs:400–491).
RuntimeStateDoc has its own transaction recovery and rollback handling
(crates/runtime-doc/src/doc.rs:761–819). These are nteract wrappers around
upstream APIs, not fork-only methods.
Notebook rebuild: rebuild_from_save saves and loads the document, rejects
a result with fewer cells, and preserves the actor before replacing the live
document (crates/notebook-doc/src/lib.rs:1477–1502). Rebuild can fail. Peer
state reset belongs to the calling sync helper, not to rebuild_from_save.
Do not treat save/load as proof that arbitrary corruption has been repaired.
DocHandle::current_heads_hex()required_heads in envelopewait_for_required_heads() checks containment via get_change_by_hashconfirm_sync (legacy alternative): Client-side waiter on shared_heads. Blocks client, daemon free. Still used for SaveNotebook.
| Scenario | Use |
|---|---|
| Execute / run-all | required_heads via send_request_after_heads |
| Client-initiated save | confirm_sync before SaveNotebook request |
| Daemon-internal autosave | Neither; daemon reads its own doc directly |
RuntimeStateDoc is the durable state boundary, not the hot transport for every transient kernel event. Control-plane signals must stay independent of output work:
KernelIdle, ExecutionDone, CellError, and KernelDied use reliable
lifecycle/control paths, not bounded output queues.update_display_data with a display_id is transient display churn. Coalesce
to the latest pending value per display_id off the IOPub path, then flush
before ExecutionDone.| automerge-repo | samod | nteract | |
|---|---|---|---|
| Topology | Mesh, transport-agnostic | Sans-IO state machine | Direct socket to single daemon |
| Heads tracking | RemoteHeadsSubscriptions (pub/sub) | Per-peer monotonic counters on every message | required_heads (request-scoped causal gate) |
| On disconnect | Keep sync state, encode/decode to clear in-flight | Clean slate (peer_disconnected) | Clean slate (sync::State::new()) |
| Batch→Incremental | Bloom filter exchange → live sync frames | Fingerprint reconciliation → subscription push | Same as raw automerge |
| Testability | Async, needs mocks | Pure sans-IO functions | Async select! loop |
nteract implements required_heads in its daemon: it defers one request until
its causal preconditions are met while sync continues unblocked.
Settings have two distinct client shapes:
SyncClient::connect, then keep receiving
recv_changes. ACK-only frames are processed without emitting document changes.
Watch writes send immediately and require continued receiving. Failed or
cancelled writes close the connection in both modes; reconnect before retrying.SyncClient::connect_snapshot /
connect_snapshot_with_timeout. Their writes drive heads/need exchanges
until the daemon confirms all local changes, with a two-second deadline.
Sending one frame alone is insufficient because Bloom false positives can
require another round. A failed or cancelled write closes the connection.Both paths wait until the daemon's advertised heads are present, bounded by
one deadline covering connection, handshake, and initial sync. Neither probes
for quiescence with a timed partial-frame read. Initialization timeout or
cancellation drops the connection; callers reconnect with fresh peer state.
If a recv_changes future is cancelled, discard that client and reconnect.
Do not route connected-window settings UX through the JSON watcher. The daemon
persists settings.json for durability and imports external edits through a
debounced file watcher; ordinary window-to-window propagation should use the
settings sync stream plus Tauri settings:changed events.
| System | On Disconnect | On Reconnect | Preserved |
|---|---|---|---|
| automerge-repo | Keep sync state | encode/decode clears in-flight, keeps shared_heads | Sync state |
| samod | Remove + peer_disconnected | Fresh handshake + batch sync | Nothing |
| nteract | Clear session, stash target | sync::State::new() + full handshake | Session identity only |
If reconnect latency becomes a problem, preserving shared_heads (automerge-repo approach) could reduce initial sync burst.
| Scenario | Method |
|---|---|
| Synchronous batch mutation | fork_and_merge(|fork| { ... }) |
| Async write from captured heads | transact_at_heads_recovering(&baseline_heads, actor, label, |doc| { ... }) |
| Concurrent async fork | fork_with_actor("runtimed:iopub:kernel-abc") (unique actor per fork) |
| Per-cell O(1) reads (WASM) | Direct map lookups via ObjIndex |
| Recovery from corrupted indices | save() → load() round-trip |
The fork addressed historical MissingOps and patch-log failures. Production
has since moved to crates.io 0.11.0. The local upstream source contains the
fork_at dependency-walk deduplication, no-op actor cleanup, stale-orphan sync
correction, and historical-view patch finalization. This is not an exhaustive
accounting of the 21 patches recorded in the earlier b3502d42 rebase.
Keep the regressions in crates/automerge-recovery/src/lib.rs:416–483 and the
document-owned policies above. A fixed historical bug does not justify
removing recovery or treating every Automerge failure as rebuildable.
notebook-wireSharedDocState, managed by sync_task.rssync::State. Sharing causes duplicate/missing sends.generate_sync_message() returning None after local mutations is correct (in-flight suppression).await: compute inside lock, send outside| Situation | Action |
|---|---|
| Transport disconnect | Reset sync::State (new or encode/decode) |
Recoverable sync error (PatchLogMismatch) | Reset peer state, rebuild, retry once; return failure if recovery fails |
| Sync panic caught | Return failure without rebuild or retry |
| Mutation panic caught | Follow the document helper's cleanup/rebuild policy; do not rerun the closure |
| Local mutation | Let next generate_sync_message handle it |
| Check if peer has changes | change_graph.has_change(&hash) (O(1)) |
| Document at earlier point | fork_at(heads) (expensive, views only) |
| Async notebook write at captured heads | transact_at_heads_recovering() |
| Concurrent async fork | fork_with_actor() with unique actor |
| Shrink document bytes | save() compacts; no history GC available |
| Daemon must see edits before executing | required_heads (not confirm_sync) |
| Adding a new sync stream | New frame type + sync::State + recovery helper |
| Should this block client or daemon? | Prefer daemon-side waits (required_heads) |
| Should protocol logic be async? | Consider sans-IO for testability (samod pattern) |
© 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
Just SKILL.md in .agents/skills/automerge-sync of nteract/nteract.
Open the folder on GitHubat commit 32e010b
Automerge Sync 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Automerge Sync this skillnteract/nteract | 179 | — | ~4.5k | Automated safety check: Pass | BSD-3-Clause | |
| RTK Rust Design Patternsrtk-ai/rtk | 83k | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Style Checkernoumena-labs/Sipp | 121 | — | ~1.4k | Automated safety check: Pass | Apache-2.0 | |
| Working With Nixxmtp/libxmtp | 121 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Upgrade Dear Imgui StackLatias94/dear-imgui-rs | 107 | — | ~977 | Automated safety check: Pass | Apache-2.0 | |
| shiguredo_mp4 Rust MP4 Library Referenceshiguredo/mp4-rs | 159 | — | ~4.4k | Automated safety check: Pass | Apache-2.0 |
rtk-ai/rtk
Describes seven Rust design patterns for the RTK CLI filter modules, with when to use each, RTK examples, and notes on when a pattern is overkill.
noumena-labs/Sipp
Enforces this monorepo's coding style rules by inspecting git diffs, reading .agents/skills/style-checker/references/styleguidance.md, fixing style violations, and reporting the result.
xmtp/libxmtp
A skill your agent uses when working with Nix flakes, selecting devShells, debugging environment issues, or understanding Nix infrastructure - covers shell selection, environment detection, common…
Latias94/dear-imgui-rs
A skill your agent uses when a user asks to upgrade Dear ImGui, cimgui, ImPlot, ImPlot3D, ImNodes, ImGuizmo, Dear ImGui Test Engine, or related bindings in this repository.
shiguredo/mp4-rs
API reference for the shiguredo_mp4 Rust library: muxing and demuxing MP4 and fragmented MP4, encoding and decoding boxes, and its Sans I/O design.
wado-lang/wado
Profile the native Rust wado binary (compile/serve/run) for host-side bottlenecks — CPU with a sampling profiler, memory with the span trace's RSS and valgrind DHAT.
nteract/nteract
Develop, debug, and manage the runtimed daemon, Python bindings, and build system.
nteract/nteract
The end-to-end cell execution pipeline from MCP tool call through daemon to kernel and back.
nteract/nteract
Pull and triage submitted nteract diagnostics archives from Cloudflare using a diagnostics id/token.
nteract/nteract
Use nteract notebooks as a persistent Python REPL. An agent skill from nteract/nteract.
nteract/nteract
Run tests, verify changes, and collect diagnostics. An agent skill from nteract/nteract.
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…
Works with
Categories
Automerge sync protocol internals, document model (OpSet, ChangeGraph, fork/merge, save/load lifecycle), and higher-level protocol design patterns. Automerge Sync is an agent skill from nteract/nteract. Automerge sync protocol internals, document model (OpSet, ChangeGraph, fork/merge, save/load lifecycle), and higher-level protocol design patterns.
Automerge Sync fits situations like: debugging sync failures; reasoning about convergence; changing reconnection logic; working with document structure.
Run `npx skills add nteract/nteract --skill automerge-sync -a claude-code`. Or copy the skill folder (.agents/skills/automerge-sync in nteract/nteract) into .claude/skills/automerge-sync in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nteract/nteract --skill automerge-sync -a codex`. Or copy the skill folder (.agents/skills/automerge-sync in nteract/nteract) into .agents/skills/automerge-sync in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add nteract/nteract --skill automerge-sync -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/automerge-sync, .gemini/skills/automerge-sync, .github/skills/automerge-sync and .opencode/skills/automerge-sync in your project.
SKILL.md names no scripts, command-line tools or credentials: Automerge Sync is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
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.
Automerge Sync 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.
About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Automerge Sync: RTK Rust Design Patterns (rtk-ai/rtk, 83k stars), Style Checker (noumena-labs/Sipp, 121 stars), Working With Nix (xmtp/libxmtp, 121 stars) and Upgrade Dear Imgui Stack (Latias94/dear-imgui-rs, 107 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
nteract (a GitHub organization) maintains it in nteract/nteract, which has 179 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 9, 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.