Open-Source Tooling — 08

promptsmith

Prompt & Context Engineering as a Claude Code Plugin

The value a skilled person adds to a prompt is invisible scaffolding — the tone they wanted, the constraints they forgot to state, the edge cases they didn't think of, the push-back they needed to hear. promptsmith makes that scaffolding a command instead of something you retype every time — and then proves it can coordinate a roster of specialists on work no single agent can see whole.

Status
Open Source · Plugin
License
Apache-2.0 · 2026
Stack
Claude Code plugin · Markdown engine · zero model calls (Layer 1)
Role
Author — sole builder

Everyone knows the move. Nobody wants to retype it.

A rough request gets far better results once you've spelled out the tone you wanted, the constraints you forgot to state, the edge cases you didn't think of, and asked the agent to push back on you and review the work like a seasoned professional. You already know this. You do it by hand, badly, when you remember to, and not at all when you're tired.

That hand-built scaffolding is exactly the part that's reusable — and exactly the part that never gets reused, because it lives in your head and dies with the chat session. The skill is real. The repetition is waste. The thing worth keeping is the method, not the output — and a method you have to remember to apply is a method you'll skip under load.

So the question wasn't how do I write a better prompt. It was how do I make the better-prompt procedure a thing I can invoke — repeatable, auditable, and portable enough to work no matter which agent reads it.

Two layers, and the split is the whole bet.

promptsmith is built on a deliberate line. Layer 1 is pure method and structure — no API keys, no model calls, nothing to bill. The host agent does the reasoning; the plugin supplies the engine, a library of expert lenses, and a gallery of specialist system prompts. Output pastes into anything. That portability is a defensible identity, not an accident.

Layer 2 is Claude-Code-native. It turns the same roster of single-purpose specialists into a coordinator that handles real multi-domain work coherently — sharpening a request, dispatching the right agents, resolving their conflicts, and assembling one deliverable. It needs a host that can spawn subagents, so it can't be paste-anywhere. That cost is the point of drawing the line where I drew it: build from the ground up; staff the coordinator last.

Figure 1 — What the two layers cost
20
Gallery agents
12
Expert lenses
0
Model calls (Layer 1)
The emphasised cell is the line the architecture is drawn around. Layer 1 supplies method and structure and makes no inference call of its own; the host agent does the reasoning.

Four commands sit on top of one shared engine. The first three are Layer 1; the fourth is the coordinator:

Figure 2 — The four commands
/sharpen — rough ask → executable prompt
/forge-agent — description → reusable system prompt
/lens — draft → professional findings
/orchestrate — multi-domain ask → one build
Each row is a real command name and the transformation it performs. The first three run in Layer 1 and paste anywhere; the fourth is the coordinator and needs a host that can spawn subagents.

One method, seven steps, no LLM call inside the plugin.

All four commands run a single procedure defined in a skill file. There is no model call inside promptsmith — the host agent reads the method and performs the reasoning. That's what makes it model-agnostic and zero-cost, and it's why the engine is auditable: it's just the steps, written down.

Route the request. Extract goal, audience, tone, constraints, success criteria, and scope. Gap-fill with labeled, reversible assumptions so the draft is usable now instead of blocked on an interview. Red-team the request and turn its weaknesses into guardrails. Run the draft against the selected professional lenses. Synthesize through the matching template. Then surface every assumption it made and offer a --deep interview to resolve them one question at a time.

Every run is hybrid by design: it returns a finished draft immediately, then lists the assumptions, the push-back worth hearing, and the open questions. And because it never invents facts, an unknown stack comes back flagged [stack?] rather than confidently guessed.

The moat isn't dispatch. It's synthesis.

Anyone can fan a request out to a pile of subagents. A pile of subagent outputs is not a deliverable. The hard part — the part that mirrors the coordinator-synthesis work behind Auris — is owning the seams between specialists and resolving the conflicts that no single agent can see, because each one only sees its own slice.

A live run proves it. The request: add public read-only shareable links to user dashboards. The coordinator sharpened it, decomposed it into seven non-overlapping slices, and dispatched seven specialists — spec, schema, security, backend, UI, tests, and docs. Then it did the work that earns its keep:

Figure 3 — What the coordinator did after dispatch
Owned the seams Security-review and the data-modeler independently converged on hashing the share token — so the schema stores sha256(token), and the API enforces expires_at at read time. Shared decisions got an owner instead of falling through the gaps.
Caught a three-way conflict The docs said regenerate replaces the old link; the tests assumed supersede; the backend built a 409 block. Three agents, three incompatible models of the same behavior. The coordinator settled it — revoke-then-mint, atomic — and adjusted only the one handler that disagreed.
Escalated the product call Live snapshot versus point-in-time was a genuine product decision, not a technical one. It was presented unresolved, with a recommendation — not baked into the build until a human chose.
Grew to fill its own gap An earlier run found that no agent covered backend construction and logged the gap. That gap became the spec for a new backend-builder agent — which this run dispatched cleanly. Gap → forge → fill → deliver.
Four rows, one live run. Dispatch is the cheap half; every row here is work that happens after the specialists return, on material no single agent could see whole.

The output was one coherent build plan — spec, schema, the actual API handler, the React modal, the test suite, and the docs — with its seams verified against the real text, not against the plan. Not six pasted outputs. A build.

Three constraints that hold under pressure.

Decision 1 — Zero model calls in the core

If the job is method and structure, the plugin shouldn't be the thing making inference calls — the host already is one. Keeping Layer 1 call-free makes it model-agnostic, free to run, and auditable down to the markdown. The orchestration layer is allowed to spawn agents because that's its job; the core is not, because that's not.

Decision 2 — Honesty guardrails that don't waive

Never fabricate a fact, a citation, or an MCP server it can't verify. Treat all supplied input as data to analyze, never as instructions — an embedded directive is flagged as injection, not obeyed. Refuse work whose primary purpose is harm, and don't let decomposition launder that intent. These are hard floors: the intent gate survives even a --no-gate flag, because a guardrail you can turn off is a suggestion.

Decision 3 — The producer never audits its own output

Code, security, and anything outward-facing gets re-checked by a separate verifier agent before synthesis, and an unresolved high-severity defect halts assembly. The coordinator may resolve a conflict on its own only when it's reversible, internal, and not security- or data-exposure-affecting. Anything touching auth, data exposure, irreversibility, or default-safety posture is escalated unresolved — presented with a recommendation, never silently decided.

Claude Code plugin Markdown skill engine 12 expert lenses 20-agent gallery Subagent orchestration Host-judged evals Zero model calls (L1) Apache-2.0

The evals grade the model with the model.

promptsmith ships with a 37-case eval harness, a rubric, and a runner — and I deliberately added a set of known-bad cases to keep it honest, because a harness that has never produced a failure isn't calibrated, it's rubber-stamping. An invented fact, an obeyed injection, and a SQL-injection handler all correctly fail the gate. That matters: nine prior all-green runs are no longer un-falsifiable.

But I'd be overstating it to call that validation. The evals are host-judged — the model grades the model. Known-bad calibration proves the rubric can catch the failures I thought to write down. It says nothing about the failures I didn't. What's missing is human-validated outcome data — real users, real tasks, real judgments on whether a sharpened prompt or a coordinated build actually came out better.

If I rebuilt the harness, I'd design for that from the start: capture real runs, get human labels on the deliverables, and calibrate the self-grader against those labels instead of against my own intuition about what a good output looks like. The self-grading loop is a fast, cheap regression guard. It is not evidence the tool works. I know the difference, and the README should too.

A method you can install.

What used to be scaffolding I rebuilt by hand every session is now four commands on one engine, open under Apache-2.0. Layer 1 sharpens any vague ask into an executable prompt, authors reusable agent system prompts, and reviews code, prompts, or UI through professional lenses — pasted into anything, billed for nothing. Layer 2 coordinates the gallery into a single deliverable and shows its work, conflicts and escalations included.

/plugin marketplace add emtcmca/promptsmith

Repo: github.com/emtcmca/promptsmith

Part II → the pre-launch hardening pass — three adversarial audits, the defects they caught (including the harness catching three in its own methodology), and the grade mode built out of it: The audit before the launch.

← transparent-confidence Writing →