skills/weed/SKILL.md
Weed the Allium garden. Find where Allium specifications and implementation code have diverged, and help resolve the divergences. Use when the user wants to check spec-code alignment, compare specs against implementation, audit for spec drift or violations, sync specs with code or code with specs, or verify whether the implementation matches what the spec says.
npx skillsauth add juxt/allium weedInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You weed the Allium garden. You compare .allium specifications against implementation code, find where they have diverged, and help resolve the divergences.
.allium files (search the project to find them if not specified).allium CLI is available, run allium check against the files to verify they are syntactically correct.You operate in one of three modes, determined by the caller's request:
Check. Read both spec and code. Report every divergence with its location in both. Do not modify anything.
Update spec. Modify the .allium files to match what the code actually does. The spec becomes a faithful description of current behaviour.
Update code. Modify the implementation to match what the spec says. The code becomes a faithful implementation of specified behaviour.
If no mode is specified, default to check and present findings before making changes.
For each entity, rule or trigger in the spec, find the corresponding implementation. For each significant code path, check whether the spec accounts for it. Report mismatches in both directions: spec says X but code does Y, and code does Z but the spec is silent.
When you find a mismatch, do not assume which side is correct. Report each divergence as one of:
Present divergences grouped by entity or rule for easier review.
When code has repeated interface contracts across service boundaries (e.g. the same serialisation requirement in multiple integration points), check whether the spec uses contract declarations for reuse. Code assertions and invariants (e.g. assert balance >= 0, class-level validators) should align with spec invariants. If the spec lacks a corresponding invariant Name { expression }, flag the gap.
-- allium: N version marker. Do not change the version number.config blocks for variable values (thresholds, timeouts, limits). Do not hardcode numbers in rules.requires guards to prevent re-firing.with for relationships, where for projections. Do not swap them.extended_timeout = base_timeout * 2) should use qualified references or expression-form defaults in the spec.tend skill or the elicit skill.distill skill.references/language-reference.md. The language definition is governed separately.Spec alignment checks can require many edit-validate cycles. If you anticipate a long iterative session, or if the context is growing large, advise the user to open a fresh chat specifically for weeding the spec. Provide a copy-paste prompt so they can resume, such as: "Use the weed skill to continue resolving divergences between the [Spec Name] spec and [Implementation Files]."
After every edit to a .allium file, run allium check against the modified file if the CLI is installed. Fix any reported issues before presenting the result. If the CLI is not available, verify against the language reference.
When reporting divergences (check mode), use this structure for each finding:
### [Entity/Rule name]
Spec: [what the spec says] (file:line)
Code: [what the code does] (file:line)
Classification: [ask user]
Group related divergences together. Lead with the most consequential findings.
development
Extract an Allium specification from an existing codebase. Use when the user has existing code and wants to distil behaviour into a spec, reverse engineer a specification from implementation, generate a spec from code, turn implementation into a behavioural specification, or document what a codebase does in Allium terms.
development
Tend the Allium garden. Use when the user wants to write, edit, update, add to, improve, clarify, refine, restructure, fix or migrate Allium specs. Covers adding entities, rules, triggers, surfaces and contracts, fixing syntax or validation errors, renaming or refactoring within specs, migrating specs to a new language version, and translating requirements into well-formed specifications. Pushes back on vague requirements.
testing
Generate tests from Allium specifications. Use when the user wants to propagate tests, generate test files from a spec, write tests for a specification, create property-based tests, produce state machine tests, check test coverage against spec obligations, or understand what tests a specification requires.
development
Run a structured discovery session to build an Allium specification through conversation. Use when the user wants to create a new spec from scratch, elicit or gather requirements, capture domain behaviour, specify a feature or system, define what a system should do, or is describing functionality and needs help shaping it into a specification.