// Practice & standards
How we work with agents, how they think before they answer, and how we write. Extracted from real jobs, then published so the next session starts where the last one stopped.
ForgeTrail
v0.3.0 Forge the path. Keep the trail.
A persistent development system for building software with AI agents. Most AI coding sessions forget everything the moment you close the tab. ForgeTrail keeps the phase you are in, the decisions you made, and the gotchas you hit inside the repo, so the next session picks up the trail.
Seven phases, entry and exit criteria for each, and a library of lessons pulled from shipping real products. The work leaves structured knowledge that improves the next project. Works with Cursor, Claude Code, Windsurf, and anything else that speaks MCP.
- Ships as
- Methodology, CLI, and MCP server
- Built with
- Node.js, TypeScript
- License
- Apache 2.0
- Status
- Active, pre-1.0
aiBreze
v0.1.1 Editorial rules for prose that says something, instead of just sounding like it.
Unearned language is the problem, not the dictionary. aiBreze is a composable rule set you point an agent at: core law, genre extras, a project overlay, then a smell audit and a claims pass. It does not detect who wrote the sentence. It does not care. Bad prose is bad prose.
Not a humanizer. It will not fool an AI detector and it does not try. Spray the prose, not the author. This site and the launch copy run on it.
- Ships as
- npm package
- Built with
- Markdown, TypeScript
- License
- MIT
- Status
- Active, early
TemperPass
v0.1.0 Tempered judgment your agent can install.
Most agents answer immediately and confidently. TemperPass makes them say what they are assuming first. Four numbered passes, written as SKILL.md files: clarify-first (auto), plus red-team, scope-lock, and tradeoff-matrix (called). Copy one into the skills directory and it runs over the thinking on the way to the answer.
Four is the whole set. An earlier draft had nine; five of those were behavior a competent model already produces when you ask. Ambiguity alone is not a reason to halt. Ambiguity plus irreversibility is. Closest cousin on this shelf is aiBreze: a rule set you point an agent at.
- Ships as
- npm package
- Built with
- Markdown, SKILL.md
- License
- MIT
- Status
- Active, early
// Nutrition labels
xFacts is the family: one small validatable file per layer of the AI stack. Objective facts only. When a number is withheld, the file says undisclosed, because that is a fact too. The hub is xfacts.dev. Each label keeps its own spec and site.
xFacts
suite Nutrition labels for every layer of the AI stack.
x is a variable, not a social network. The suite is facts(x): one small, validatable nutrition label per layer, so software is legible at the moment someone decides whether to trust it. Five labels, all live. A serious AI product can ship the full panel and be more transparent than any incumbent.
Shared teeth across the family: objective facts only, undisclosed over omission, closed enums so labels compare, CC0 specs and MIT tooling. A new label earns a domain only if someone adopts the thing and needs trust at that moment, the facts are machine-derivable, and no incumbent format already answers the question. Dataset labels and prompt labels were refused in public.
| Label | Layer | Answers |
|---|
| AppFacts | Body | What is this app built from? |
|---|
| ModelFacts | Brain | What went into this model? |
|---|
| ToolFacts | Toolbelt | What does this instrument touch when invoked? |
|---|
| AgentFacts | Hands | What may this actor do, and on what leash? |
|---|
| SkillFacts | Playbook | What will this teach my agent to do? |
|---|
- Ships as
- Hub and five label specs
- Built with
- YAML specs, JSON Schema, Node and Python generators
- License
- CC0 specs, MIT tooling
- Status
- All five labels live
// Forge tools
Utilities from our own shop. Each one started as an itch while building, then grew a site, and usually an npm package. Gladly shared.
FilePress
v0.1.2 A folder of Markdown in, a fast prerendered site out.
You write posts as plain files with YAML frontmatter, commit them to git, and build with the filepress CLI. There is no admin UI, no database, and no server at runtime. Edit on a laptop, on GitHub, or from your phone. The next build is the site.
Reverse-chronological index, tags, RSS, sitemap, and a quiet Essay theme you can override. Several of the sites on this page are FilePress, including FilePress itself.
- Ships as
- npm package
- Built with
- SvelteKit, TypeScript
- License
- MIT
- Status
- Active, early
IngotVault
v0.1.0 Every commit in a second place you control.
IngotVault scans a workspace, ensures a local backup remote, and pushes every local branch and tag into bare mirrors on a path you choose: USB, SD, NAS, or another disk. It never modifies origin. Force-push is never the default. Deleted branches are not pruned. The mirror is a ratchet.
Forge remotes cover what you pushed upstream. File backups cover bytes on disk. The gap is unpushed branches, repos with no remote, and agents that rebase, amend, or delete a "stale" branch. An append-only spare remote survives that class of failure. Opt-in WIP capture snapshots a dirty tree before an unattended session can erase it.
- Ships as
- npm package
- Built with
- Node.js, TypeScript
- License
- Apache 2.0
- Status
- Active, early
Finetuna
v1.1.1 Fit more context on your GPU, and keep it.
Not weight fine-tuning. No LoRA, no training. Finetuna tunes Ollama runtime settings (num_ctx, num_batch, num_gpu), verifies the model stays in VRAM, and saves a named variant you can keep. Ollama's defaults are safe, and they often leave a 24GB card running 4K context.
Pairs with ollanet: tune on the host, then reach the model from anywhere on the network. Honest "no change needed" is a feature. Auto-tune only switches settings when the win beats measured noise.
- Ships as
- npm package
- Built with
- Node.js, JavaScript
- License
- MIT
- Status
- Active
ollanet
v0.4.1 Find Ollama on any network you already trust, then talk to it.
Scan for Ollama hosts on localhost, LAN, Tailscale, or VPN. Prompt by hostname or IP, stream the reply, and continue later by a short chat hash. Also an MCP server for agents, and a Node library for apps. Nothing leaves the networks you can already reach.
Pairs with Finetuna: the host shapes the model, ollanet finds it and talks to it from another machine. LAN scan is opt-in. Hard-coding 127.0.0.1 treats Ollama like a local daemon. ollanet treats it like a private inference mesh.
- Ships as
- npm package
- Built with
- Node.js, TypeScript
- License
- MIT
- Status
- Active, early
Docupuncture
v0.1.1 Treat the document you already have.
When an AI regenerates a Google Doc, Sheet, or deck, you lose the theme, format, comments, and history. Docupuncture is three agent skills that write a small Apps Script instead. You paste it, run it, and insert precise edits without changing those.
Docs, Sheets, and Slides. Dry-run first. Missing anchors are logged, never guessed. Closest cousin on this shelf is TemperPass: a rule set you point an agent at.
- Ships as
- Agent skills
- Built with
- Markdown, SKILL.md, Apps Script
- License
- MIT
- Status
- Active, early
DictaWhisper
pre-1.0 A local voice journal. Audio stays on this computer.
Record in the browser, drop a file, or optionally sync a phone folder. DictaWhisper transcribes on your GPU with faster-whisper, then turns the raw speech into readable notes and tags via ollanet. The .json next to each recording is the note: no database, no account.
Files are the database. Each note is audio plus a sidecar, so you can rsync the tree or open a file in an editor. Cleanup drops fillers and keeps Whisper word times, so playback follows the cleaned paragraphs. Default bind is localhost; Tailscale is opt-in for a phone on your tailnet. If ollanet is down, you still have the raw transcript.
- Ships as
- Git clone
- Built with
- Node.js, TypeScript, Python (faster-whisper)
- License
- MIT
- Status
- Active, early
LocalBerth
v0.2.0 Local DNS for ports.
You start a Svelte app. Vite takes 5173. You start a second one. It takes 5174. After a reboot you start them in the other order, and bookmarks hit the wrong app. LocalBerth names the port so foo stays on 5173 and bar stays on 5174.
Claim a name, then ask the CLI or a Vite helper for the number. A claim is loopback unless you pass --lan. localberth serve opens a dashboard on 127.0.0.1:54321. localhost is the machine; LocalBerth is the slip.
- Ships as
- npm package
- Built with
- Node.js, TypeScript
- License
- Apache 2.0
- Status
- Active, early