A self-improving harness for AI-assisted software development, built on a flat catalog of reusable Agent Skills. Each skill is a self-contained folder; on top of the catalog, the Evolving Harness adds a lifecycle router, four themed plugin bundles, and a session-end loop that turns each session's lessons back into skills.
There are two ways to use this repo, and they don't interfere:
- Flat catalog — pull individual skills into any project (unchanged).
- Plugin bundles — install a whole themed bundle through the Claude Code plugin marketplace.
Install skills using any compatible Agent Skills package manager, or copy individual skill folders directly into your project:
npx skills add Harduex/skills
Each skill follows the Agent Skills specification
— browse the folders to see what's available. The root folders remain the
source of truth; plugins/ is generated output and is never hand-edited.
Consult the using-evolving-harness router skill at the start of any
non-trivial task. It routes the work through a gated lifecycle (frame → design →
plan → test-first → build → review → land) and, before a session ends, runs the
evolution loop (save lessons, extract new skills, re-tune the repo).
| Bundle | What it's for |
|---|---|
| harness-evolution | The core self-improvement loop: extract skills from sessions, save learned lessons, analyze agent sessions, and evolve the repo. Includes the router and output-style setup. |
| delivery-lifecycle | Gated idea-to-shipped pipeline: plan, design, spec, test cases, autonomous build loop, review, verification, checkpoint — plus formal verification, functional-programming guidance, ASD-STE100-derived standards for code and documents, and site refinement. |
| git-ops | Git hygiene and delivery ops: linear history, fixup distribution, PR comment handling, shipped-state audits, secret-leak audits. |
| thinking | Reasoning and research toolkit: deep research, adversarial questioning, zero-assumption analysis, teaching, quick-wins triage. |
Every skill belongs to exactly one bundle; the flat catalog still lets you install any skill individually.
/plugin marketplace add Harduex/skills
/plugin install harness-evolution@harduex
/reload-plugins
Swap harness-evolution for any bundle above. The marketplace is named
harduex. Use /plugin list and /plugin marketplace list to see
what's installed.
/plugin uninstall harness-evolution@harduex
/plugin marketplace remove harduex
/reload-plugins
bundles.json is the single source of truth for bundle membership and the
version. Regenerate the plugins/ output after any change:
python3 scripts/generate_bundles.py # regenerate plugins/
python3 scripts/generate_bundles.py --check # validate only (used in CI)
Cut a release with:
python3 scripts/bump_version.py [major|minor|patch]
which bumps the version in bundles.json, prepends a CHANGELOG.md entry, and
prints the git tag command. Versioning: major = a skill removed/renamed or
a lifecycle change; minor = bundle membership change; patch = wording,
script, or CI fixes.
Follow this exact order when a skill is added, edited, or renamed and you're
asked to deploy it. Never hand-edit plugins/ — it is generated.
- Author the skill at the flat root — a folder named exactly as the skill,
containing
SKILL.mdwith valid frontmatter (namematching the folder, non-emptydescription). Seewrite-a-skill/. Editing an existing skill in place needs no other structural change. - Decide bundle membership. A new skill joins exactly one bundle in
bundles.json(add its folder name to that bundle'sskillslist). Renames must be updated inbundles.jsontoo. A pure edit to an existing skill changes nothing here. - Regenerate, validate, and commit the change:
python3 scripts/generate_bundles.pythenpython3 scripts/generate_bundles.py --check; runpython3 -m unittest discover -s tests. Commit the root skill change,bundles.json, and the regeneratedplugins/together. - Bump the version on the now-clean tree (
bump_version.pyrefuses a dirty tree so the bump stays an isolated, reviewable change):python3 scripts/bump_version.py [major|minor|patch]— a wording-only skill edit is apatch— then fill in the newCHANGELOG.mdentry. - Regenerate and commit the release: rerun the generate/check/test
commands from step 3, then commit
bundles.json,CHANGELOG.md, andplugins/as the release commit. Get the human's approval before pushing. - Push and tag (human-gated):
git push origin master, then push the tag the bump printed (git tag vX.Y.Z && git push origin vX.Y.Z) and, if desired,gh release create vX.Y.Z.
Both install paths pick the change up automatically: npx skills add Harduex/skills sees the flat folder, and bundle users get it on their next
/plugin update of the affected bundle.
The harduex marketplace also serves
agentic-notebook, which lives
in its own repo. Its marketplace entry pins a commit sha, so a release there
does not reach users until the pin is updated here:
- Release in the
agentic-notebookrepo as usual (its own version and history). - In
.claude-plugin/marketplace.json, update theagentic-notebookentry'sshato the new release commit. - Commit and push this repo. Do not run
bump_version.py— it governs only the four bundles' shared version, not this plugin.
See the write-a-skill/ folder for the authoring guide.