- Building the missing toolbelt for Claude Code: captain-hook for declarative hooks, cc-pool for account pooling, cc-review for reviewing Claude's diffs in a PR-style web UI, cc-transcript for typed transcripts, and slop-cop to catch AI-flavored prose — and now to rewrite it, with a
plainifypass that puts prose into plain English under word and vocabulary constraints - Turning design docs into something you can interrogate: the
design-docskill in cc-skills went v0.12.0 to v0.16.0 in three days — a summary deck and Mermaid overview diagrams, term hover and a plain-language twin beside every section, then an Ask bar over the whole document whose follow-ups stay grounded in the doc, whose cites preview the evidence they lean on, and whose every doc now makes exactly one argument. A doc is now something you can talk back to as well: reader comments arrive as margin threads anchored to the quote they mark, queue through an append-only outbox, and land as pull requests that merge themselves. That machinery has since become shared substrate: v0.17.0 builds design-doc's template, scripts, and component schemas from canonical partials, and the newincident-retroskill rides the same partials — one canonicalretro.jsonbeside committed evidence snapshots (Datadog notebooks, Slack threads, images) rendering as an interactive retro with Markdown and PDF editions, TTD/TTE/TTM/TTR tiles derived from timestamps alone, and a Google Docs importer that records every guess it made rather than smoothing the narrative. design-doc now drafts its prose with Astra and falls back to Claude, and a newlong-runningskill carries the context discipline the multi-lane orchestration needs - Converging those pieces into one session-activity platform — typed events, a decision ledger, and now a
corpuscommand in cc-transcript, so one sweep answers a hundred questions instead of one, with captain-hook as its hook runtime. Both sides now read a relay envelope as agent-injected, so a relay stops opening a turn in cc-transcript and stops counting as an authored prompt in captain-hook, whose dispatch judges lane tool events against the lane transcript rather than the parent's task, scales its budget to live sessions, reads its version from Info.plist rather than exec'ing capt-hookd, and digests settings down to the enablement keys — so a busy machine stops blocking hooks, no hook pays two execve for a string, and settings churn stops costing every root a 3.3s spawn. That runtime has since gone after its own per-event cost: less overhead per event in the Python worker, workers stopped concurrently at restart and shutdown, a Python reply discarded once its caller has abandoned the id, and cc-transcript 14.16.1 underneath so a deep condition stops reparsing sidechains. The 12.30.8 through 12.30.11 line has since made a root deleted underneath a running hookd survivable: the worker leaves the removed directory before the runtime's init getcwd, cleans the temp dir it spawned in, and reads its plugin roster from the nearest surviving ancestor — with binrun taking that same getcwd fix, and cc-transcript answering a deep predicate from held inputs rather than held lifts — and building cc-orchestrate into a pure-Go CLI that runs fleets of agents across pluggable backends like cmux, superset, tmux, and zellij, each with an AgentProber liveness check for long-lived, keep-alive sessions — with cc-vigil, a transcript-oracle sleep inhibitor, keeping the Mac awake only while those agents are truly working - Running the whole cc-* fleet on shared substrate: daemonkit for daemon lifecycle — one macOS-only Serve/Client/Control surface, one schema generating the frame codec for both Go and Swift behind a drift gate, and no byte reaching a peer whose code identity hasn't been judged. captain-hook, cc-pool, cc-notes, cc-interact, fusekit, cookiesync, synckit, cc-orchestrate, cc-present, cc-review, cc-runtime, and cc-squash have all moved onto it, each stating a deadline budget at every choke point; v0.22 took the socket path out of a spawned child's argv entirely — the child inherits its session on fd 3 — and v0.23 has since moved every daemon's private state under
~/.daemonkit/a/<label>, with HelperPaths no longer deriving the socket at all. With v0.23 in, the fleet has deleted what it made obsolete: daemonkit retiredRemoveUnmarkedand itsErrMarkedsentinel, the deprecated launchdSessionTypeAPI, the legacy bbolt sweep, the pre-rename metadata migration, and the markerless-plist fallback, and synckit dropped its pre-v0.21 LaunchAgent sweep — while every agent plist now renders a Homebrew-first PATH. v0.24 has since let aversion.fileread the host's version without a spawn and taught gc to prune the tool store, with binrun repinned onto it the same day — and v0.25 has put a clock on an idle session, so a peer that neither sends another frame nor closes its socket gives its lane slot back instead of holding it until the daemon restarts, with a full lane now carrying its own error: a consumer can tell transient saturation from a daemon that was never installed, where captain-hook had been reporting the first as the second and sending operators to reinstall a healthy host — and v0.26 through v0.28 have taught a signed app to name a formula as its upgrade hint and to require a minimum version, and a python-tool install to refresh uv's index, with binrun repinned onto each one the day it landed — and v0.28.1 and v0.29.0 have since gone after the lifecycle's own edges: a demanded session gets proved inside the children tail's own deadline, a kill keeps one settlement grace instead of compounding them, and an abort that restored the incumbent now says so rather than reporting a bare failure - Cutting that substrate through to releases: cc-review has cut 0.36.0 — daemonkit v0.23.0 underneath, cc-interact v0.33.0's subprocess-free Root above it, and a daemon that chains turn starts when no review is open — while cc-runtime cut 0.18.0 onto the same surface, cc-orchestrate runs its pty hosts as Serve products under one Daemon, and binrun gates every release on a tag resolving to one exact commit on main
- Teaching cc-context to ship the way I actually branch:
ccx vcs stackdrives a Graphite stack that spans one working copy per branch — restacking one spread across working copies instead of refusing it, pinning every child to its own copy andgt trackto its branch, and running a repo's hooks only where CI never will. Those paths have since moved off the gt CLI: the stack is read from Graphite's own database, the downstack submits over Graphite's API, and a refusal carries what Graphite actually said — withccx vcs statusreading the merge queue through gt to reconstruct the snapshot no GitHub field carries, catching a branch reparented out from under its PR, submitting one whose work is already committed instead of refusing it, and no longer telling a--no-commitship to re-run the command that just failed. Restack has since moved ontogit replay, so a branch another worktree holds can no longer stop the stack, a merged decline from gt gets read rather than dropped, and the submit anchors on the remote trunk so it drops the branches Graphite already holds. v0.57.0 has since taught the submit to open one pull request per Graphite call, the way gt does, to ship a path-scoped change whose paths are already committed, and to report a failed--amendrather than pushing the un-amended commit — and v0.58.0 has taken the last of gt out of the ship itself, committing and restacking the graphite lane without it, resolving a non-stub git, and overlapping what the ship used to do serially - Running cc-sentiment, an open experiment in whether developer sentiment with Claude Code tracks the model, the tooling, or just the time of day
- Self-hosting yclaw, an always-on, reproducible Apple Silicon home server for the Nous hermes-agent — gVisor-sandboxed and tailnet-only, so the agent never touches your credentials
- Engineer & CEO at Aneta
Recent activity
2026-09-15Pushed to yasyf/daemonkit2026-09-15Worked on a pull request in yasyf/daemonkit — kept one settlement grace for a kill, and named the abort that restored the incumbent2026-09-15Created something new in yasyf/daemonkit2026-09-15Worked on a pull request in yasyf/captain-hook — gave a release ten minutes to show up in PyPI's index before CI calls it failed2026-09-15Worked on a pull request in yasyf/cc-skills — taught open-pr's watcher to see a Graphite queue drop2026-09-15Worked on a pull request in yasyf/binrun — made the CLI leave a removed working directory before the runtime's init getcwd2026-09-14Worked on a pull request in yasyf/spawnllm — resolved the small and medium codex tiers to gpt-5.6-luna2026-09-14Worked on a pull request in yasyf/cc-transcript — answered deep predicates from held inputs instead of held lifts2026-09-14Was active in yasyf/spawnllm2026-09-14Was active in yasyf/captain-hook2026-09-14Was active in yasyf/cc-transcript2026-09-14Created something new in yasyf/captain-hook
25,199 contributions in the last year
- gpt-do ⭐ 211 — GPT-powered bash commands.
Python - summ ⭐ 152 — GPT-based Conversation Summarizer
Python - compress-gpt ⭐ 217 — Self-extracting GPT prompts for ~70% token savings
Python - anthropic-computer-use-modal ⭐ 50 — Anthropic Computer Use with Modal Sandboxes
Python - shamer ⭐ 37 — Code Coverage Gamified
Python
Claude Code, continued
- cc-skills — the plugin marketplace where the whole toolbelt ships
- cc-guides — src→artifact doc rendering with embedded canonical fragments, keeping every repo's CLAUDE.md and AGENTS.md in sync
- cc-notes — a notes-and-tasks layer agents can actually use, now with a derived knowledge graph over everything they've recorded
- cc-runtime — a runtime that hands Claude Code its harness-injected tools, AskUserQuestion and friends
- cc-interact — the human-in-the-loop agent/daemon/web framework, pulled out of cc-review
- cc-present — ad-hoc live web artifacts for a session: approval boards and choices whose every click streams back to the agent
- cc-factory — a software factory where orchestrated agents plan, build, review, and ship
- cc-steer — learns how you steer Claude from past sessions, then does the steering for you
- cc-pane — one pane of glass over Claude Code and the whole cc-* toolbelt
- cc-sudo — sudo for Claude Code: one Touch ID tap per privileged command
- cc-patch — fast mode for Claude Code's delegated agents, re-applied automatically on every spawn, now with local packs and replace sites
Taming long sessions
- cc-merge — a merge queue for the git worktrees where finished Claude outputs land
- cc-context — ccx, token-bounded codebase context for agents; takes
cataway from your agent - cc-squash — augmented auto-compaction for marathon Claude Code sessions
- cc-vigil — a transcript-oracle sleep inhibitor that keeps your Mac awake only while Claude agents are truly working
Claude Code, off the clock
- getaway — plan award trips from Claude Code: sweeps seats.aero across 28 mileage programs and composes whole journeys, flights out and home plus hotel award nights via rooms.aero
- dailies — stop being your own cron job
Systems & libraries
- authkit — a signed macOS helper for Touch ID consent and Secure Enclave attestation, replacing the old cookiesync keyhelper
- fusekit — detached FUSE-T mount-holder and mount-lifecycle primitives for Go, now under cc-pool and cc-notes, with a process ledger that tells a real reboot from a slewed clock
- daemonkit — the durable daemon-lifecycle runtime the cc-* control planes now ride: detached spawns, codesign trust, and drain-on-upgrade
- binrun — fetch, verify, and exec the exact artifact a descriptor pins: release binaries, Python tools, signed apps — the shim the cc-* tools now ship behind
- semisweet — an async, in-memory semantic cache with pluggable backends
- experiment-at-home — the plumbing every local AI experiment rebuilds, built once: modal, mlx-lm, and tinker backends behind one registry
- spawnllm — call an LLM from any subshell: Claude, Codex, a local MLX model, or Apple's on-device Foundation Models
- pocket-llm — on-device LLM sessions for any browser: Chrome's Prompt API, WebLLM, or wllama, picked by feature detection, smallest model first
Cross-host sync
- synckit — the shared substrate the tools below build on: host mesh, a convergent registry, unix-socket RPC, and synckitd, the daemon they now ride
- reposync — your other machine already pulled: git checkouts kept in step across every host you work from
- cookiesync — your other Mac already did the 2FA: browser sessions moved between your own machines, consent gated behind Touch ID via authkit
Python, with fewer footguns
- python-defer — Go-style
deferin Python, no decorators required - python-secret-type — a rune-style
secrettype so credentials can't leak by accident - docker-dsl — write multi-stage Dockerfiles as Python context managers
- bcferries — the Python client for BC Ferries schedules; proudly Canadian 🇨🇦
Earlier eras
- safemodels — cryptographic provenance proofs for model weights, before that was cool
- vc — the voting platform Dorm Room Fund used to pick its investments
- hifromtheotherside — fighting the echo chamber, one cross-aisle match at a time
- controlio — control your computer over SMS, 2014 edition
2026-09-15daemonkit v0.30.12026-09-15captain-hook v12.30.11 — read a removed root's plugin roster from its nearest surviving ancestor2026-09-09cc-notes v0.52.0 — made package install work on a clean machine2026-09-05cc-skills v1.12.0 — shipped design-doc's Ask bar and whole-document assistant, and routed the codex prose lane to gpt-6-astra2026-09-03slop-cop v0.1.70 — made --sentence-timeout and --document-timeout bound the whole pass, retries included2026-08-30cc-pool v0.69.0 — addedccp package resetto retire a wedged deployment2026-07-27spawnllm v0.11.0 — added an Apple Foundation Models on-device backend and exact-model passthrough
Language breakdown
Go ████████████████████ 35%
Python ███████████████████░ 33%
Ruby ██████░░░░░░░░░░░░░░ 10%
Rust ████░░░░░░░░░░░░░░░░ 6%
Swift ████░░░░░░░░░░░░░░░░ 6%
TypeScript ████░░░░░░░░░░░░░░░░ 6%
HTML █░░░░░░░░░░░░░░░░░░░ 2%
Latest from Yasyf's Random Musings:
- Less prompts, more guardrails
- Improving Claude Computer Use
- On Securing Model Supply Chains
- python 🤝
defer - Haystack + Pinecone Hybrid Vectors
Automate the boring parts, then automate the automation.






