Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
80f5c8e
test(infra/assets): add failing tests for mermaid vendor, gitattribut…
Trecek Apr 12, 2026
47fa874
feat(infra): vendor mermaid v11, add .gitattributes binary rule, add …
Trecek Apr 12, 2026
a47ddc6
test(recipe): write failing tests for bundle lifecycle refactor [#741…
Trecek Apr 12, 2026
1d53c00
feat(recipe): split commit_research_artifacts into stage/finalize ste…
Trecek Apr 12, 2026
3f2e90b
chore: commit auto-generated files
Trecek Apr 12, 2026
6aac02c
fix: remove dead capture from finalize_bundle; update re_push_researc…
Trecek Apr 12, 2026
a2e8156
test(vis-lens): write failing tests for P0 vis-lens skill registratio…
Trecek Apr 12, 2026
5a3dc36
feat(vis-lens): register vis-lens pack in PACK_REGISTRY [#741 groupC]
Trecek Apr 12, 2026
3f09201
feat(vis-lens): add P0 vis-lens skill SKILL.md files [#741 groupC]
Trecek Apr 12, 2026
9648041
feat(vis-lens): add 5 vis-lens contract entries to skill_contracts.ya…
Trecek Apr 12, 2026
a98b52b
feat(vis-lens): add 5 vis-lens skill names to write-recipe bundled ca…
Trecek Apr 12, 2026
e97eb38
docs(vis-lens): update skill count 95→100 in docs/skills/visibility.m…
Trecek Apr 12, 2026
0ce2141
docs(vis-lens): update skill count 95→100 across all doc files [#741 …
Trecek Apr 12, 2026
75d36ba
fix(vis-lens): add cwd anchor to output paths and tier2 assignments i…
Trecek Apr 12, 2026
968ec3c
test(vis-lens): extend parametrization + count assertions for 4 P1 sl…
Trecek Apr 12, 2026
aa1aa70
feat(vis-lens): add 4 P1 skill directories and register contracts [#7…
Trecek Apr 12, 2026
e913ae5
fix(vis-lens): add 4 P1 skills to write-recipe bundled list and tier2…
Trecek Apr 12, 2026
6b5457e
feat(vis-lens): add 3 P2 skills and finalize 12-lens vis-lens family …
Trecek Apr 12, 2026
df76eaa
feat(vis-lens): add plan-visualization skill dir and update skill cou…
Trecek Apr 12, 2026
0d88061
feat(vis-lens): update write-report SKILL.md with generate-report con…
Trecek Apr 12, 2026
5446913
feat(vis-lens): wire plan_visualization step and rename report steps …
Trecek Apr 12, 2026
58ec881
test(vis-lens): add test_plan_visualization_step.py for groupF Part A…
Trecek Apr 12, 2026
4c7b62e
style: apply ruff-format to test_plan_visualization_step.py
Trecek Apr 12, 2026
d171fd1
fix(vis-lens): update tests and tier assignment for plan-visualizatio…
Trecek Apr 12, 2026
4581e11
fix(vis-lens): resolve test failures for groupF Part A
Trecek Apr 12, 2026
f49d941
fix(vis-lens): add plan-visualization outputs contract to skill_contr…
Trecek Apr 12, 2026
86bb707
fix(vis-lens): add visualization_plan_path and report_plan_path to ou…
Trecek Apr 12, 2026
eb112a8
fix(vis-lens): update test assertions for re_write_report → re_genera…
Trecek Apr 12, 2026
7383729
feat(groupF-part-b): rename write-report → generate-report skill
Trecek Apr 13, 2026
a5ab3a5
feat(groupG): add bundle-local-report skill + recipe wiring
Trecek Apr 13, 2026
44e626c
fix(groupG): resolve 14 test failures for bundle-local-report skill
Trecek Apr 13, 2026
3580617
feat(groupH-part-a): add output_mode ingredient + local/pr route bran…
Trecek Apr 13, 2026
83029c8
fix(groupH-part-a): resolve 4 test failures for output_mode recipe ch…
Trecek Apr 13, 2026
7d08879
feat(groupH-part-b): add output_mode semantic rule, runtime gate, gen…
Trecek Apr 13, 2026
5b07dd0
fix(review): chain exp-lens cp for-loop with && to propagate copy fai…
Trecek Apr 13, 2026
eadc984
fix(review): escape dots in EXCLUDE_PATTERN and LEFTOVER_PATTERN for …
Trecek Apr 13, 2026
d0b6676
fix(review): correct catalog.md skill count from 107 to 109 (3 tier1 …
Trecek Apr 13, 2026
1641dd4
fix(review): anchor SKILL_MD/mermaid paths via __file__ and use match…
Trecek Apr 13, 2026
0b253db
fix(review): update test assertion to match escaped report\.html in E…
Trecek Apr 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Vendored binary assets — suppress diff spam on updates
src/autoskillit/assets/**/*.js binary
src/autoskillit/assets/**/*.css binary
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
AutoSkillit is a Claude Code plugin that runs YAML recipes through a two-tier
orchestrator. Bundled recipes turn GitHub issues into merged PRs by chaining
plan, dry-walkthrough, worktree, test, and PR-review skills against 42 MCP
tools and 95 bundled skills.
tools and 108 bundled skills.

https://github.com/user-attachments/assets/bcd910c8-7269-46d6-a496-53b2cb24d212

Expand Down
13 changes: 13 additions & 0 deletions Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -174,3 +174,16 @@ tasks:
cmds:
- uv tool install --force "autoskillit[dev] @ git+https://github.com/TalonT-Org/AutoSkillit.git@integration"
- "$(uv tool dir)/autoskillit/bin/autoskillit install"

vendor-mermaid:
desc: Download latest mermaid v11 UMD bundle to src/autoskillit/assets/mermaid/
cmds:
- mkdir -p src/autoskillit/assets/mermaid
- |
VERSION=$(curl -sfL https://unpkg.com/mermaid@11/package.json \
| python3 -c "import sys, json; print(json.load(sys.stdin)['version'])")
echo "Fetching mermaid ${VERSION}..."
curl -sfL "https://unpkg.com/mermaid@${VERSION}/dist/mermaid.min.js" \
-o src/autoskillit/assets/mermaid/mermaid.min.js
echo "${VERSION}" > src/autoskillit/assets/mermaid/VERSION
echo "Vendored mermaid ${VERSION} ($(wc -c < src/autoskillit/assets/mermaid/mermaid.min.js) bytes)"
2 changes: 1 addition & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

AutoSkillit is a Claude Code plugin that runs YAML recipes through a
two-tier orchestrator. The bundled recipes implement issue → plan → worktree
→ tests → PR → merge pipelines using 42 MCP tools and 95 bundled skills.
→ tests → PR → merge pipelines using 42 MCP tools and 108 bundled skills.

## Start here

Expand Down
2 changes: 1 addition & 1 deletion docs/developer/end-turn-hazards.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ two detectors on every SKILL.md in the project:
| `_check_loop_boundary()` | "For each" loops with tool invocations but no anti-prose guard |

These run as part of `test_no_text_then_tool_in_any_step`, a parametrized
test that scans all 95 bundled skills. Any new skill with an unguarded
test that scans all 108 bundled skills. Any new skill with an unguarded
loop fails CI automatically.

## If This Gets Fixed Upstream
Expand Down
2 changes: 1 addition & 1 deletion docs/examples/research-pipeline.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ fifth example, update the test fixture in the same commit.
The first run exercised the `research` recipe end to end against an empty
target repository. The orchestrator collected ingredients, ran
`scope` → `plan-experiment` → `implement-experiment` → `run-experiment` →
`write-report`, and committed both the experiment results and the auxiliary
`generate-report`, and committed both the experiment results and the auxiliary
artifacts in two separate PRs so reviewers could read the report without
diffing the data.

Expand Down
2 changes: 1 addition & 1 deletion docs/execution/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ How AutoSkillit runs a recipe end to end: orchestrator, kitchen gating, clone an

## Overview

AutoSkillit is a Claude Code plugin that orchestrates automated workflows using headless sessions. It provides 42 MCP tools and 95 bundled skills, organized into a gated visibility system.
AutoSkillit is a Claude Code plugin that orchestrates automated workflows using headless sessions. It provides 42 MCP tools and 108 bundled skills, organized into a gated visibility system.

## Core Concepts

Expand Down
2 changes: 1 addition & 1 deletion docs/recipes/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ Two-phase technical research recipe. Phase 1 scopes a research question and open
| `base_branch` | `main` | Branch to target for the research PR |
| `setup_phases` | `false` | When `true`, decompose experiment into sequenced setup phases |

**Requires pack:** `research` (pack members: `scope`, `plan-experiment`, `implement-experiment`, `run-experiment`, `write-report`)
**Requires pack:** `research` (pack members: `scope`, `plan-experiment`, `implement-experiment`, `run-experiment`, `generate-report`)

## Project Recipes

Expand Down
31 changes: 26 additions & 5 deletions docs/skills/catalog.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Skill catalog

The complete list of bundled skills (95 total: 3 in `src/autoskillit/skills/`,
92 in `src/autoskillit/skills_extended/`). Filesystem walk this directory if
The complete list of bundled skills (109 total: 3 in `src/autoskillit/skills/`,
106 in `src/autoskillit/skills_extended/`). Filesystem walk this directory if
you need an exhaustive listing; this catalog groups by purpose.

## Tier 1 — free range (3)
Expand Down Expand Up @@ -33,7 +33,7 @@ Located under `src/autoskillit/skills_extended/`. Grouped by purpose:

### Experiment family
`scope`, `plan-experiment`, `implement-experiment`, `run-experiment`,
`write-report`, `troubleshoot-experiment`
`generate-report`, `troubleshoot-experiment`

## Tier 3 — pipeline / automation

Expand Down Expand Up @@ -91,6 +91,27 @@ answers a specific question about the system:
| `exp-lens-validity-threats` | Validity threats |
| `exp-lens-variance-stability` | Variance stability |

## vis-lens family (12)

12 visualization-planning lenses orchestrated by `plan-visualization`, under
`skills_extended/vis-lens-*/`. Each answers a specific question about a figure or the
figure set:

| # | Skill | Cognitive Mode | Primary Question | Priority |
|---|-------|---------------|------------------|----------|
| 1 | `vis-lens-always-on` | Composite | Is everything correct by default? | P0 |
| 2 | `vis-lens-antipattern` | Diagnostic | What visualization antipatterns are present? | P0 |
| 3 | `vis-lens-chart-select` | Typological | What chart type fits this data shape? | P0 |
| 4 | `vis-lens-domain-norms` | Normative | Does the figure follow domain conventions? | P0 |
| 5 | `vis-lens-uncertainty` | Probabilistic | Is uncertainty properly communicated? | P0 |
| 6 | `vis-lens-color-access` | Chromatic | Is the color encoding accessible and perceptually uniform? | P1 |
| 7 | `vis-lens-figure-table` | Decisional | Should this result be a figure or a table? | P1 |
| 8 | `vis-lens-multi-compare` | Comparative | Are multi-condition comparisons statistically sound? | P1 |
| 9 | `vis-lens-temporal` | Sequential | Is temporal/sequential data displayed correctly? | P1 |
| 10 | `vis-lens-caption-annot` | Annotative | Are figure captions and axis labels fully self-contained? | P2 |
| 11 | `vis-lens-story-arc` | Narrative | Do the figures tell a coherent story across the report? | P2 |
| 12 | `vis-lens-reproducibility` | Replicative | Can the figures be reproduced from the data and code? | P2 |

## Rectify doctrine

Several Tier 2 skills (`rectify`, `audit-bugs`, `design-guards`,
Expand All @@ -100,8 +121,8 @@ symptom, and the audit suite is updated so the same class of bug cannot
recur. Commit messages prefix with `Rectify:` for traceability; the count of
`Rectify:` commits is reported in `docs/developer/contributing.md`.

## Total: 95
## Total: 109

3 (Tier 1) + 92 (`skills_extended/`) = 95 bundled skills. The total is
3 (Tier 1) + 106 (`skills_extended/`) = 109 bundled skills. The total is
verified by `tests/docs/test_doc_counts.py` against a filesystem walk so any
addition or removal is caught immediately.
2 changes: 1 addition & 1 deletion docs/skills/visibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Overview

AutoSkillit's 95 bundled skills are organized into three tiers that control when and where
AutoSkillit's 108 bundled skills are organized into three tiers that control when and where
they appear as slash commands. The tier system is orthogonal to subset categories — you can
disable a subset across all tiers simultaneously, or reclassify individual skills between
tiers. See [Subset Categories](subsets.md) for subset configuration.
Expand Down
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "autoskillit"
version = "0.7.84"
version = "0.8.0"
description = "MCP server for orchestrating automated skill-driven workflows with Claude Code"
readme = "README.md"
license = {text = "MIT"}
Expand All @@ -29,6 +29,7 @@ dependencies = [
"fastmcp>=3.2.0,<4.0",
"httpx>=0.28,<0.29",
"igraph>=1.0,<2.0",
"markdown-it-py>=3.0",
"packaging>=23.0",
"psutil>=7.2.0",
"pygments>=2.20.0",
Expand Down
16 changes: 12 additions & 4 deletions scripts/check_doc_counts.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,21 @@


def count_skills() -> int:
"""Count directories in skills/ and skills_extended/ that contain a SKILL.md."""
"""Count public skills in skills/ and skills_extended/.

Only counts skills whose SKILL.md begins with YAML frontmatter (``---``),
matching the behaviour of DefaultSkillResolver().list_all() which excludes
internal bootstrap documents such as sous-chef.
"""
count = 0
for skills_dir in (SKILLS_DIR, SKILLS_EXTENDED_DIR):
if skills_dir.is_dir():
count += sum(
1 for d in skills_dir.iterdir() if d.is_dir() and (d / "SKILL.md").exists()
)
for d in skills_dir.iterdir():
skill_md = d / "SKILL.md"
if d.is_dir() and skill_md.exists():
text = skill_md.read_text(encoding="utf-8")
if text.startswith("---\n"):
count += 1
return count


Expand Down
2 changes: 1 addition & 1 deletion src/autoskillit/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "autoskillit",
"version": "0.7.84",
"version": "0.8.0",
"description": "Orchestrated skill-driven workflows using Claude Code headless sessions"
}
21 changes: 21 additions & 0 deletions src/autoskillit/assets/mermaid/LICENSE.mermaid
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
mermaid.js — https://mermaid.js.org
Copyright (c) 2014-2025 Knut Sveidqvist and contributors
License: MIT (https://opensource.org/licenses/MIT)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
1 change: 1 addition & 0 deletions src/autoskillit/assets/mermaid/VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
11.14.0
3,298 changes: 3,298 additions & 0 deletions src/autoskillit/assets/mermaid/mermaid.min.js

Large diffs are not rendered by default.

16 changes: 15 additions & 1 deletion src/autoskillit/config/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,22 @@ skills:
- plan-experiment
- implement-experiment
- run-experiment
- write-report
- generate-report
- validate-audit
- vis-lens-always-on
- vis-lens-antipattern
- vis-lens-chart-select
- vis-lens-color-access
- vis-lens-domain-norms
- vis-lens-figure-table
- vis-lens-multi-compare
- vis-lens-temporal
- vis-lens-uncertainty
- vis-lens-caption-annot
- vis-lens-reproducibility
- vis-lens-story-arc
- plan-visualization
- bundle-local-report
tier3:
- prepare-pr
- compose-pr
Expand Down
1 change: 1 addition & 0 deletions src/autoskillit/core/_type_constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ class PackDef(NamedTuple):
"audit": PackDef(True, "Codebase audit skills"),
"research": PackDef(False, "Research recipe and experiment skills"),
"exp-lens": PackDef(False, "Experimental design audit lenses"),
"vis-lens": PackDef(False, "Visualization planning lenses"),
}

CATEGORY_TAGS: frozenset[str] = frozenset(PACK_REGISTRY.keys())
Expand Down
125 changes: 125 additions & 0 deletions src/autoskillit/migrations/0.7.77-to-0.8.0.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
from_version: "0.7.77"
to_version: "0.8.0"
description: >
Research recipe: write-report renamed to generate-report, output_mode ingredient added
(default 'local'), bundle lifecycle refactored, plan-visualization step and vis-lens
pack requirement added.
changes:
- id: research-rename-write-report
description: "write-report skill and steps renamed to generate-report"
instruction: |
In any research.yaml recipe:
1. Rename step 'write_report' → 'generate_report'.
2. Rename step 'write_report_inconclusive' → 'generate_report_inconclusive'.
3. Rename step 're_write_report' → 're_generate_report'.
4. In each step's skill_command, replace '/autoskillit:write-report' with
'/autoskillit:generate-report'.
5. Update all on_success, on_failure, on_result routes that reference the old names.
example_before: |
write_report:
tool: run_skill
with:
skill_command: "/autoskillit:write-report ${{ context.worktree_path }} ..."
on_success: test
retest:
on_failure: re_write_report
example_after: |
generate_report:
tool: run_skill
with:
skill_command: "/autoskillit:generate-report ${{ context.worktree_path }} ..."
on_success: test
retest:
on_failure: re_generate_report

- id: research-add-output-mode-ingredient
description: "Add output_mode ingredient (default 'local') — BREAKING: old default was implicit pr"
instruction: |
In any research.yaml recipe, add to the ingredients block (after audit_claims):

output_mode:
required: false
default: "local"
description: >
Where research outputs land. 'local' (default) produces a self-contained
report.html bundle under {source_dir}/research-bundles/{date-slug}/ with
no GitHub interaction. 'pr' opens a GitHub PR alongside the HTML bundle
and runs the full review/archival flow.

BREAKING CHANGE: Prior to 0.8.0 the recipe always opened a GitHub PR. The new
default is 'local'. To restore previous behavior, set output_mode: "pr" in your
recipe or pass it as an override to open_kitchen.
example_before: |
ingredients:
audit_claims:
required: false
default: "false"
example_after: |
ingredients:
audit_claims:
required: false
default: "false"
output_mode:
required: false
default: "local"
description: "..."

- id: research-replace-commit-with-stage-and-finalize
description: "commit_research_artifacts replaced by stage_bundle + finalize_bundle lifecycle"
instruction: |
In any research.yaml recipe:
1. Remove the 'commit_research_artifacts' step.
2. Add 'stage_bundle' after run_experiment_lenses (idempotent cp, no commit).
3. Add 're_stage_bundle' after 're_generate_report'.
4. Add 'finalize_bundle' in the archival phase (after re_push_research.on_success).
finalize_bundle conditionally renames/commits in pr mode and keeps browsable files
intact in local mode.
5. Update all route edges that referenced commit_research_artifacts.
example_before: |
run_experiment_lenses:
on_success: commit_research_artifacts
commit_research_artifacts:
tool: run_cmd
with:
cmd: "... git commit ..."
on_success: push_branch
example_after: |
run_experiment_lenses:
on_success: stage_bundle
stage_bundle:
tool: run_cmd
with:
cmd: "... cp (no commit) ..."
on_success: route_pr_or_local

- id: research-add-plan-visualization-step
description: "Add plan_visualization step after design review GO verdict"
instruction: |
In any research.yaml recipe, wire a 'plan_visualization' step between the design
review GO verdict and create_worktree. The step invokes
'/autoskillit:plan-visualization' and captures visualization_plan_path and
report_plan_path.
example_before: |
revise_design:
on_result:
- when: "${{ result.verdict }} == GO"
route: create_worktree
example_after: |
revise_design:
on_result:
- when: "${{ result.verdict }} == GO"
route: plan_visualization
plan_visualization:
tool: run_skill
with:
skill_command: "/autoskillit:plan-visualization ..."
on_success: create_worktree

- id: research-add-vis-lens-pack-requirement
description: "Add vis-lens to requires_packs"
instruction: |
In any research.yaml recipe, ensure 'vis-lens' appears in the requires_packs list.
example_before: |
requires_packs: [research, exp-lens]
example_after: |
requires_packs: [research, exp-lens, vis-lens]
Loading
Loading