Skill Synthesizer: From Fix to Procedure

Follow Skill Synthesizer from a completed conversation to a discoverable SKILL.md, and separate confidence, artifact validation and useful transfer.

#plugins #skills #agents

Animated Skill Synthesizer checklist: a solved conversation becomes a written SKILL.md, while transfer remains untested

An agent finally fixes a difficult integration problem. The transcript contains three failed theories, a workaround that only helped briefly, the actual cause, and the successful repair. Saving the transcript preserves the story. Saving a good skill should preserve a procedure another run can use without repeating the story's mistakes.

Skill Synthesizer watches completed root-agent monologues and asks a utility model to extract reusable skills. It writes them into Agent Zero's skill directory after validating their structure and checking for ownership conflicts. The hard question is whether a successful-looking conversation contains a lesson that generalizes. Plugin overview

Research basis: We reviewed version 1.0.1 by a0-community-plugins at 1a269999b6e7. We inspected the extension, synthesis prompt, defaults, and model-selection contract. All seven repository tests passed in the framework runtime with synthetic model outputs and temporary files. These checks concern the artifact-management contracts, not the quality of skills generated from real work.

The short version

  • The output is a real reusable artifact. Generated instructions need explicit applicability and prerequisites.
  • Ownership protects curated work. The default update policy avoids overwriting non-plugin skills.
  • Confidence and structure are different from transfer. A valid file still needs a meaningful new task.
Evidence What it says
Model confidence The generator’s assessment
Format validation The artifact meets structural checks
Ownership check The target is eligible for this write policy
Transfer evaluation The procedure works on an independently judged case

A bounded trigger precedes generation

The extension runs at monologue_end and ignores subordinate agents. It checks whether synthesis is enabled, whether the context remains eligible, a global pause file, a per-session write count, a cooldown, conversation significance, and a history digest. Only then does it call the synthesis model. Extension implementation

The defaults include a 0.7 confidence threshold, a maximum of five skills per session, a three-turn cooldown, and a minimum conversation length of 400 characters. The history passed to synthesis is bounded as well. Configuration

These controls reduce unnecessary calls and repeated writes. They do not determine whether a lesson is correct. A long conversation can contain no reusable insight, and a short interaction can contain an important one. The significance gate is a heuristic deciding what deserves model attention.

Likewise, confidence is supplied by the generated response. A value of 0.8 is not an independently calibrated probability that the procedure will succeed on a new task. It is a threshold within this plugin's generation contract.

The output is a real artifact

The model returns a JSON envelope including a decision about writing and a complete SKILL.md. The validator checks the skill's format, name, description, trigger patterns, required headings, and minimum body length. It also invokes the framework's skill validation. Validation implementation Synthesis prompt

The required headings include “When to Use” and “The Process.” This encourages a procedure with a recognizable activation context, rather than a vague note that something worked once. The artifact lands at usr/skills/<name>/SKILL.md and becomes discoverable through Agent Zero's skill mechanisms.

Validation here is structural. A perfectly formed skill can still recommend an outdated API, omit a critical precondition, or repeat a command that succeeded accidentally. The validator does not execute the generated process against an independent task.

For a useful review, ask what condition made the original repair valid. Was a certain version installed? Was the workspace disposable? Did the user authorize a side effect? A reusable procedure should preserve those conditions instead of converting one successful action into a universal instruction.

Ownership prevents a particularly bad kind of overwrite

The update policy distinguishes plugin-generated skills from hand-authored and built-in ones. Ownership is identified using the plugin's author/source markers. Existing generated skills may be updated; non-plugin conflicts are protected by the default configuration and resolution logic. Ownership policy Skill resolution

That is a valuable boundary. A generated repair note should not silently replace an operator's curated procedure merely because both use the same name. Naming and provenance become part of the integrity of the skill library.

It is still important to inspect updates to generated skills. “Owned by the generator” does not mean “unimportant to people.” Once a generated skill has become useful, repeated automatic rewriting can change assumptions on which later work depends. Curate the procedure deliberately before relying on it as established practice.

Animated evaluation branch: a generated skill is checked for confidence, format and transfer, with transfer highlighted

The model override changes a name, not a provider

An empty synthesis_model uses the active utility model. A configured override rebuilds the utility-model configuration with the replacement model name while retaining the active provider, API base, credentials, and other configuration. If that path fails, the extension falls back to the ordinary utility-model call. Model override specification Call path

This is easy to misread in a settings panel. Entering a model name associated with another provider does not automatically switch providers. The value must be accepted by the already configured endpoint, including any proxy routing convention it uses.

For reproducible evaluation, record both the configured override and the actual route used. A successful write alone does not prove that the override succeeded, because the fallback path can still produce the skill.

A global skill needs carefully bounded assumptions

The output directory is the user skill library. A lesson extracted while working on one project may later be discovered in another context. That makes the “When to Use” section especially consequential. It should identify the relevant stack, version, symptom, and prerequisites rather than rely on the original chat remaining in memory. Runtime skill roots and write path

A procedure learned from a synthetic demo should say so. A provider-specific fix should not become generic network advice. An instruction to restart a test service should not quietly expand to production. These are examples of review criteria implied by reusable scope, not claims that the generator has solved scope inference.

The plugin supports a global .synth-lockfile under /a0/usr/skills/ to pause synthesis during curation. That is a simple operational coordination mechanism, and the path is literal in this release. Operators using a different filesystem layout should verify it rather than assume a relocated directory changes the pause check. Pause mechanism

A good evaluation tests transfer

Take a synthetic solved problem with a known cause. Let a candidate skill describe the procedure, then try it on a different example that shares the relevant mechanism. Include a near-miss case where the preconditions are absent. The skill should activate in the first case and avoid misleading the second.

That experiment tests transfer. Our performed tests instead checked creation and later discovery, updates to plugin-owned skills, preservation of non-plugin skills, validation, cooldown, and rejection of low-confidence output. They establish those artifact-management contracts, not generalization quality. Repository tests

The final write uses a direct text-file write in the reviewed implementation. There is no archive-and-merge recovery contract equivalent to AutoDream's in this path. Keep versioned backups of a skill library that matters to ongoing work; a structurally valid update is still a file change.

Skill Synthesizer supplies a bridge from experience to reusable instructions. It is most valuable when the generated result becomes a reviewable candidate procedure, with its assumptions intact and its success tested somewhere beyond the conversation that inspired it.

Sources