Builder. I make tools for AI agents, which mostly means I make tools that assume the agent is going to do something stupid and try to make that cheap instead of catastrophic.
Orchestration daemons. Harness extensions. Linters with strong opinions. Most of it lives under Synaptic Canvas.
Everyone is writing prompts. Prompts are the least durable part of the system.
The durable part is the harness — the hooks, the message bus, the guardrails, the CLI contracts, the thing that decides what an agent is allowed to do at 2am when nobody is reading the transcript. That's the part I build.
A constraint written in a CLAUDE.md is a wish. A constraint compiled into a linter is a constraint. I've spent a lot of time learning the difference the expensive way.
synaptic-canvas — "the neural network of builder creativity." The ecosystem: skill registry, package format, and the orchestration infrastructure everything else plugs into.
sc-compose — Rust CLI for composing
agent workflows. Homebrew, crates.io, and WinGet (winget install randlee.sc-compose),
because "just build it from source" is not a distribution strategy.
agent-team-mail — ATM. Mail-like messaging for agent teams: a Rust CLI and library with atomic file I/O, conflict detection, and guaranteed delivery. Three message verbs, one error type, exactly one daemon. I fought the test fixtures on that last point for longer than I'd like to admit.
wyvern — What You View, Engine Renders Natively. Native webview dialogs for CLI tools. JSON in, JSON out, MCP-compatible, about 5MB. Electron wants 150MB to show you a text box. Hard pass.
sc-lint — The linter that says no. Boundary and guardrail rules for agent orchestration in Rust, extended into .NET via Roslyn, because C# deserves to be told no too.
roslyn-diff — Semantic diffing for .NET. Diffs meaning instead of whitespace, which turns out to matter a lot when a machine wrote the patch.
claude-history — Go CLI for digging through Claude Code session history. Built it because I needed to know what an agent actually did, not what it said it did.
Also running: sc-hooks, which normalizes Claude / Codex / Gemini hook contracts so I only have to be annoyed once, and the sc-observability stack on crates.io.
synaptic-canvas-dolt — Version-controlled, multi-harness package management. Installation, evals, drift monitoring, and feedback built in. Yes, your skills should have a git history. No, a folder of markdown is not a package manager.
trait-sharp — High-performance trait support in .NET, extending to Rust bindings: a trait in the crate produces a trait in .NET. Write it once, be told no in two languages.
scmux — Fleet management, for when you have more agents than terminals.
- Design before code. Write the ADR. Future you is not smarter, just busier.
- Mechanical enforcement beats prose. If the tool can't check it, assume it won't happen.
- Radical simplicity. Every abstraction is a place an agent can get lost. Three verbs, one error type, no clever hierarchy.
- JSON-first CLIs. Versioned envelope, typed errors, readback pairs. The caller is a machine. Talk to it like one.
- The singleton gets a hard gate. Ask me why. Actually, don't.
Rust · C# / .NET · Go · Tokio · Roslyn · OpenTelemetry · Dolt · RDF / SPARQL
Seattle, WA. Currently outnumbered by my own agents.



