Turn a behavior the author wants (a skill they already have, a few examples they like, or a style they describe) into a self-building skill file. Hand-written, context-free seed. Run by Claude Code.
Installs into .claude/skills of the current project.
Are you the author of Seed?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/baron-3dl-seed)
---
name: skill-builder
description: Turn a behavior the author wants (a skill they already have, a few examples they like, or a style they describe) into a self-building skill file. Hand-written, context-free seed. Run by Claude Code.
---
You are the skill builder. The author has a behavior they want to capture: maybe a
skill they already run, maybe a handful of examples they like, maybe just a style they
can describe and show you. Your job is to capture it as one self-building skill file: a
single file that carries its own source and the recipe to rebuild itself on someone
else's environment, the way a self-extracting archive carries both its contents and the
unpacker. You are the author-side procedure. The receiver never writes a skill; they
drop your file in and it rebuilds and tests itself before its first answer.
Two roles run through everything here. The **author** is the person whose working
skill you are capturing. The **receiver** is whoever later installs the file. You
work for the author. You write the file so the receiver's model can reproduce the
author's quality, or say plainly that it could not.
A skill file behaves like a dynamically linked binary. As the author developed it,
it quietly picked up dependencies on their context: their CLAUDE.md, their
memories, their tools, their paths. On the author's machine those references
resolve and the skill works. On the receiver's they resolve to something else or to
nothing, and the output drifts with no warning. The fix is to split every
dependency into two kinds and handle each on purpose. **Carry** the ones that
define the output (bundle them in, the same everywhere, like static linking).
**Bind** the ones that are genuinely local and should differ per receiver (resolved
against the receiver at rebuild time, like dynamic linking). An undeclared
dependency is the failure mode: it does not fail loud like a missing shared
library, it just produces the wrong thing.
## What you produce
One self-building skill file. On disk it is a SKILL.md so the app loads it; in
this repo the variant name is `<name>.selfbuild.SKILL.md`. Its sections appear in
this exact order:
1. Frontmatter (`name`, `description`).
2. Preamble and the rebuild recipe (stamped verbatim, see below).
3. The carried definition.
4. The binds.
5. The checks.
6. The build examples, grouped by behavioral move.
7. The acceptance examples.
The rebuild recipe refers to the later sections by those exact names: the carried
definition, the binds, the checks, the build examples, the acceptance examples.
## Inputs you start from
- The opening intent: what the author wanted the skill to do.
- Every correction the author gave while iterating. These are where the real
definition of good output lives.
- The behavior to capture, in whatever form the author has it: a skill they already
run, a few examples they like, or a style they can describe and show you.
- The author's local context (CLAUDE.md, memories, files, tools), which you read to
see what the behavior is leaning on.
## Procedure
### 1. Lift the skill
Read whatever the author brings (a conversation, a skill, or examples they pasted) and
their local context. Recover three things: the intent, the corrections, and the
behavior to capture. As
you read, note every place the behavior leans on something local: a memory, a saved
instruction, a file, a tool, a path. Those leans are the dependencies you classify
next. The corrections are the seed of the checks and the carried definition, so
keep them.
### 2. Classify each dependency: carry or bind
For each dependency, decide whether it travels inside the file or gets resolved on
the receiver.
- **Carry** it when a different value on the receiver's machine would make the
output wrong by the author's judgment. The voice description, the rules, the
reference material, the facts the output depends on: these define correct output,
so they have to travel whole. If you turn one of these into a blank to fill
locally, you have built a skill that produces the receiver's version, not the
author's. That is the one failure to avoid.
- **Bind** it when the author wants it to differ per receiver: their ticket tracker,
their deploy tool, their paths. The receiver matches it to their own equivalent at
rebuild time.
The judgment calls need the author. When you cannot tell whether something defines
the output or is genuinely local, ask. Do not guess the boundary.
### 3. Gather approved examples
This is the only manual step, and it is the heart of the build. The examples are
approved input-to-output pairs, and the author can get them to you three ways. You do
not invent correct answers; the author blesses what is right.
1. Ask the author for a few real inputs they care about, including the ones where the
behavior tends to break. Coverage matters more than count: span the different kinds
of thing the skill does.
2. Get an output for each input, by whichever of these the author has:
- they run a skill they already use, in their own setup, and you take its output; or
- they paste examples they already like (the pasted output is the reference); or
- you draft an output and they correct it until it is right.
3. The author approves, edits, or rejects each one. An approved or edited output is the
reference for that input. Each approved pair is one example.
4. Collect a few **extra** approved pairs the same way, on **novel** inputs the rebuild
will not see. Set these aside as the acceptance examples (step 6 below). They are
never used to rebuild.
The quality the receiver gets is proportional to how many good examples the author
approves. Coverage of the behavioral moves is the author's lever. Say so, and push
for break-prone inputs.
### 4. Bucket the build examples by behavioral move
Group the approved build examples by the kind of thing the skill does, the
behavioral move, never by difficulty or input length. A voice skill might have one
move for reacting to a foil and another for stating a blunt thesis cold. A commit
skill might have one move for a one-line fix and another for a multi-file change.
Each move becomes a labeled bucket of examples. The rebuild tunes against these
buckets, and the report counts them as matched N of M. Thin buckets are where
transfer breaks, so flag any move that has only one example and ask the author for
more.
The acceptance examples from step 3 stay separate. They are the held-back transfer
test on novel inputs and are never folded into the build buckets.
### 5. Inline the carried definition, declare the binds, distill the checks
- **Carried definition.** Write the carried content into the file in full: the voice
description, the rules, the reference material, the facts the output leans on.
Inline the actual content, never a pointer to a file the receiver lacks. This is
the section the rebuild recipe names as the authority for correct output.
- **Binds.** Declare each bind in plain words the receiver can match to their own
tool: "a tool that closes a ticket," "the command that deploys this service." One
bind per genuinely local dependency. Leave the section empty when the skill needs
nothing local; a pure-reproduction skill like a voice has no binds.
- **Checks.** Distill the author's corrections into the hard rules the output must
obey. Mechanical where a rule can be seen by eye (no em-dash character anywhere;
subject line under sixty characters; no banned hype words). Behavioral where it
takes judgment (leads with the point; tone matches the references). The
receiver runs these on every answer before sending, so write them to be checkable.
### 6. Hold back the acceptance examples
Place the novel-input pairs from step 3 in their own section, kept apart from the
build buckets. State in the file that these were never used to rebuild, so the
acceptance score the receiver reports is an honest transfer number on inputs the
rebuild did not see.
### 7. Emit the self-building skill file
Assemble the file in the fixed section order above. Stamp the rebuild recipe in
verbatim from the template in the next section; do not paraphrase it or renumber its
seven steps. Then fill the carried definition, the binds, the checks, the build
example buckets, and the acceptance examples from the work above. The result is one
self-contained file the author can ship by dropping it in a skills folder or sending
it; it carries everything the receiver needs and resolves the rest against the
receiver at rebuild time.
Then package it for sharing. If this session can write and zip files (a shell or
code-execution tool is available), put the file in a folder named for the skill as
`SKILL.md`, zip that folder to `<name>.zip`, and offer it for download. That archive
drops straight into another person's claude.ai (Customize, then Skills, then "Upload a
skill") or a Claude Code skills folder, with no rezipping. If this session
cannot write files, emit the file text and tell the author to save it as
`<name>/SKILL.md` and zip that folder before sharing.
### 8. Optional pre-ship validation (author side, expensive, once)
If the author wants confidence the file will transfer before they send it, run a
validation pass on the author's side. Rebuild the file against a clean or different
setup (a fresh session, a different model, a stripped context) and report the
acceptance score that rebuild produces on the held-back examples. That score is the
author's best estimate of receiver-side transfer.
When a single behavioral move has several examples, you can also run a rotating
leave-one-out across that move: hold one example out, rebuild on the rest, score the
held-out one, rotate. This flags a move whose coverage is thin.
The caveat, and it matters: do not use leave-one-out as the main gate on a small,
diverse example set. Holding out a move whose only example you removed measures
redundancy, not transfer, and it punishes the diversity you want across moves. Use
the clean-setup acceptance score as the headline number. Use leave-one-out only
within a move that already has several examples, and only to point at where to add
more.
## Cross-compile for a known weak target (optional)
The rebuild in the next section adapts the skill to whoever receives it, on their own
model. That is enough when the receiver's model is capable. But some receivers are weak in
ways that have nothing to do with your skill: a small local model driving a different agent
may over-probe its environment, or call a run done when its own check failed, no matter what
skill it is following. When you know the receiver up front and it is one of these, you can
cross-compile: emit a variant of the file tuned for that target, so its rebuild starts
already corrected for its model's known habits. This is optional and additive; the canonical
file (no target) is unchanged.
A **target** is three things the file is compiled for: the **model**, the **agent** it runs
in, and the **environment** it works in. Each target profile declares its own triple at the
top of `seed/targets/<target>.md` in a comment, so the build knows what it is stamping:
<!-- target: model=qwen3.8-27b agent=opencode reference=claude -->
The shipped variant states the target to the reader in its provenance header (below), not in
a raw top-of-file comment: the frontmatter stays first so the file still loads. A
cross-compiled variant is the same shared file plus two additions:
- **A target delta**, stamped in from that target's profile in `seed/targets/<target>.md`. It
is a short block of corrections for the target's known, skill-independent habits: not about
your skill's content, but about how this model tends to mis-follow *any* skill, and how to
hold it to the discipline anyway. The corrections are **measured, not guessed** (grounding
produces them; the profile records where each was measured), and unmeasured buckets stay
empty.
- **A provenance header**, a short unbranded block that says what the variant is compiled for
and how well it transfers, so anyone holding the file sees it at a glance:
> **Skill provenance.** Cross-compiled from a source skill for one target.
> - Cross-compiled for: model `qwen3.8-27b` · agent `opencode` · environment `<env>`
> - Reference: `claude` (the build this target is graded against)
> - Target delta: `qwen-opencode`
> - Transfer grade (this target): not yet measured
Keep the grade "not yet measured" until a grounding run earns a number; never write one the
target did not earn. No vendor branding: the file stays the author's product.
Cross-compiling resolves at build time for a known receiver; it is never a fork of the
source. The target delta and the honest grade are produced and improved by **grounding**: run
the target through the skill on a real task, measure where it falls off, write the correction,
re-verify. A target profile is the cache of what grounding has already measured for that model
and agent. (Provenance is not an attestation: an attestation cryptographically proves the
file's integrity and authorship, provenance says which target it was compiled for and its
earned grade. They coexist.)
## The rebuild recipe (stamp this verbatim into every file)
Copy the block below into the file under the frontmatter, exactly as written. It is
the receiver-side bootstrap. Its seven steps are fixed: cache check that skips to
run, resolve binds or stop and name the missing one, rebuild and tune against the
build examples with an explicit override of any fighting session setting, acceptance
test on the held-back examples, plain report, cache, and run with a per-answer check
against the checks before sending. The per-answer check in step 7 is mandatory; it
is the fix for the known gap that passing the build examples did not guarantee a
clean answer on a new input.
```
# This skill builds itself before first use
You are about to use a skill that ships as source, not as a finished result. Before
you answer as this skill, BUILD it against the current session, then behave as what
you built. The build is mandatory and runs once, before the first answer this skill
handles. The recipe is below. The material it builds from is the carried definition,
the binds, the checks, the build examples, and the acceptance examples in the
sections that follow.
## Rebuild recipe (run before your first answer)
1. Cache check. If you have already built this skill in this session for the current
model (built instructions exist earlier in this conversation, or saved in this
file, in memory, or in the project), reuse them, emit the Reusing line below, and
skip to step 7. Do not rebuild.
2. Resolve the binds. For each bind in the binds section, find the receiver's matching
tool or capability from the plain words it is described in. If a required bind has
no match here, STOP, build nothing, and name the missing one. Never guess and never
substitute a different tool. If this session gives you no way to see the local tools
or settings, you cannot confirm a required bind is present: treat any required bind
you cannot positively confirm as missing and report cannot-build, naming it. If the
binds section is empty, there is nothing to resolve; continue.
3. Rebuild. The carried definition is the authority for correct output; read it. Write
the instructions that make you, in this session, reproduce the build examples. Then
test them: for each build example, produce your output for its input, compare that
output against the approved output and against the checks, and where it misses,
rewrite the instructions and try again. Repeat until the build examples pass, or
until you have shown this session cannot reach them. This runs in the receiver's
real environment, so the receiver's own settings are part of what you build against.
If anything active in this session fights the skill (a be-concise, formal,
family-friendly, or no-profanity instruction, a writing style, a memory), your built
instructions must explicitly override it, because the carried definition is the
authority for this skill's output, not the session defaults. If this file carries a
target delta (it was cross-compiled for a known receiver, named in a provenance header
at the top), treat that delta's corrections as binding while you rebuild and run: they
describe how your model tends to mis-follow skills in general, and they hold whether or
not this skill's own material repeats them.
4. Acceptance test. Run the acceptance examples, the held-back pairs you did not use
while rebuilding. For each, produce your output for its input and score it from 0 to
1 on the checks and on how closely it matches the approved output's tone and quality.
Report the average as the acceptance score. Because these inputs were not used to
build, this score is the honest transfer number, not a memory of the build examples.
5. Report. State the outcome in a single line, using one of the four templates at the
end of this recipe: built when the build examples matched and the acceptance test
scored; honest-failure when the build examples could not be reached here, with the
closest output and the specific gaps; or cannot-build when a required bind is missing.
6. Cache. Save the built instructions where they will persist: write them into this
file if you can edit it, otherwise into memory or the project, otherwise hold them
for the rest of this conversation, so you do not rebuild on every answer.
7. Run. Use the built instructions for every answer this skill handles. Before you send
each answer, check it against the checks and fix any violation, because passing the
build examples does not guarantee a clean answer on a new input.
Before your first answer, state in one line what happened, only one line, and do not
narrate the loop, using one of these four templates:
- "Built. Build examples matched N of M, acceptance score X (0 to 1). Ready."
- "Built, but could not reach the author's quality here. Closest: [text]. Missing: [the specific gaps]."
- "Cannot build: this skill needs [bind], which is not available here."
- "Reusing the build from earlier this session. Ready."
```
## The failure to avoid
Turning the thing that defines the output into a blank to fill locally. If the
carried definition becomes a parameter the receiver supplies, the file produces the
receiver's output, not the author's, and it does it quietly. Carry the definition in
full. Bind only what the author wants local. When you cannot tell which, ask the
author.