[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GXMQR9BH4YSTV206TN5AF2":3,"skill-same:01M6GXMQR9BH4YSTV206TN5AF2":82},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":47,"ownerHtmlUrl":48,"ownerBlogUrl":47,"ownerDescription":49,"updatedAt":50,"install":51,"resources":63},"01M6GXMQR9BH4YSTV206TN5AF2","experiment",null,"Automated optimization loop with scalar fitness function. Proposes changes in isolated worktrees, measures against a fixed baseline, and retains verified candidates locally. Supports convergence detection and diminishing returns.","SethGammon\u002FCitadel","SethGammon","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F5523585?v=4","01M6GXJ90FD2CE9QF5GQERWN06","Seth Gammon","01M6GXJ94VXYGK5KAW14EYE901",929,"MIT","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fexperiment\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30],"Optimization","detection","baseline","loop","returns","worktrees","optimize","false","with","true","verified","convergence","2026-11-10 10:12:30",false,"---\nname: experiment\nlicense: MIT\ndescription: >-\n  Automated optimization loop with scalar fitness function. Proposes changes in\n  isolated worktrees, measures against a fixed baseline, and retains verified\n  candidates locally. Supports convergence detection and diminishing returns.\nuser-invocable: true\nauto-trigger: false\ntrigger_keywords:\n  - experiment\n  - optimize\n  - try\n  - A\u002FB\n  - measure\nlast-updated: 2026-10-15\n---\n\n# \u002Fexperiment — Metric-Driven Optimization Loop\n\n## Identity\n\nCoordinate bounded metric-driven experiments in isolated checkouts, retaining\ncandidates locally until the declared verification and independent review pass.\n\n## Orientation\n\n### When to Use\n\n- When you want to optimize a measurable metric (bundle size, error count, test coverage, FPS)\n- When you have a clear hypothesis but aren't sure which of several approaches wins\n- When manual A\u002FB testing would be too slow or error-prone\n- NOT when the goal is subjective (\"make it feel better\") — the metric must be a number\n\n### Inputs\n\nThe user provides three things:\n1. **scope**: Files to modify (glob pattern, e.g., \"src\u002Fapi\u002F**\u002F*.ts\")\n2. **metric**: Project command that outputs a single number (e.g., `node tools\u002Fbundle-bytes.cjs`)\n3. **budget**: Iteration cap (default: 5) or time cap (e.g., \"10 minutes\")\n\nAsk only for missing inputs that cannot be resolved from the request or project.\nThe metric MUST exit successfully and output a single finite number to stdout.\n\n## Protocol\n\n### Step 1: BASELINE\n\n1. Read project instructions and inspect the checkout, index, untracked files,\n   and active worktrees. Record the source commit and dirty-file hashes\u002Fstatus.\n   Leave user work in place: never stash, reset, clean, switch branches, or commit\n   unrelated changes to make an experiment possible.\n2. Create a dedicated worktree at an explicit commit, or a separate local clone\n   at that commit. Verify its path, HEAD, and clean status before running commands.\n   If the requested baseline includes authorized working changes, copy only those\n   changes into the isolated checkout, preserving deletions and file contents;\n   verify their hashes and commit the snapshot there. Leave the original index and\n   files untouched. If the intended snapshot is unclear, clarify before copying.\n3. Before iterations, write the evaluation plan in the experiment report: source\n   and snapshot commits, allowed source scope, metric command and direction,\n   timeout, repeat\u002Fnoise policy, and required typecheck, regression and behavioral\n   checks. Record any inapplicable check and its reason now, not after a failure.\n   Ask about direction only if ambiguous. A scalar is a proxy, not acceptance.\n4. Freeze the evaluator: record hashes for the metric implementation, test\n   assertions, fixtures\u002Fexpected outputs, and relevant command\u002Fconfig files.\n   These are outside candidate edit scope, even if a broad glob includes them.\n   Keep the original incumbent commit, evaluator and plan fixed for the run.\n5. Pin one file-byte representation before measuring, including checkout filters\n   and line endings. Compare baseline and evaluator hashes with their committed\n   blobs; for commit-based evaluation, materialize matching bytes in the isolated\n   checkout. Use the same representation for every candidate and independent\n   check; a clean Git status alone does not establish byte identity.\n6. Measure the baseline and run the declared checks in isolation. Record commands,\n   exit codes, values and evidence paths. An invalid baseline or required-check\n   failure holds optimization until resolved; do not silently waive the check.\n\nRun commands from the intended isolated checkout. Bind `CLAUDE_PROJECT_DIR` for\neach child process to that checkout so timeout\u002Ftelemetry helpers cannot write into\nthe user's source checkout. Use the installed timeout helper (in Citadel itself,\n`node scripts\u002Frun-with-timeout.js 300 \u003Ccommand> [args...]`).\n\n### Step 2: ITERATE\n\nFor each iteration (up to budget):\n\n1. **Create isolation**: Use a fresh worktree\u002Fclone from the original incumbent or\n   the last verified retained candidate; record that parent commit. Give the worker\n   the fixed plan, scope, evaluator exclusions and previous attempts. Verify actual\n   isolation rather than relying on a branch name or a spawn option alone.\n2. **Propose change**: Modify only allowed source files. Never change the metric,\n   tests, expected outputs, exclusions or thresholds to earn a pass. If the\n   evaluator needs repair, stop this run and establish a new baseline and plan.\n3. **Inspect and measure**: Check the full diff and evaluator hashes first. Reject\n   scope violations or evaluator changes, even if they improve the number. Run the\n   unchanged metric and declared checks with bounded timeouts and the same setup\n   as the incumbent. Keep raw results, candidate commit and evaluator identity.\n4. **Review**: For an improving candidate, obtain independent review of the exact\n   diff, scope, behavior\u002Fregressions and evidence. The proposer cannot approve its\n   own result. A summary-only HANDOFF check is insufficient. Review unavailability,\n   stale evidence, timeout or an incomplete required check means HELD, not passed.\n5. **Decide**:\n   - **KEEP**: Improved under the declared repeat\u002Fnoise policy, with every required\n     check and independent review passed for this exact candidate. Retain its local\n     commit; it may seed the next iteration. Do not merge into the user's checkout.\n   - **DISCARD**: Same\u002Fworse, failed required check, scope violation or evaluator\n     tampering. Log why; preserve evidence before removing only experiment-owned\n     disposable worktrees. Never clean another agent's or the user's worktree.\n   - **HELD**: Missing\u002Funknown evidence or review. Preserve the local candidate and\n     reason; it cannot seed a subsequent iteration or authorize promotion.\n6. **Log**: Record value, delta against both the original baseline and the previous\n   retained best, verdict, change, commit, required-check results and review evidence.\n\nPromotion is separate from KEEP. Only after all gates pass may an already\nauthorized local integration proceed into a safe, clean destination. Recheck the\nresulting integration subject with the declared checks and independent review if\nits content differs. Otherwise leave the candidate local and report the held gate.\nNever push, publish, or overwrite dirty work as part of the optimization loop.\n\n### Step 3: CONVERGENCE CHECK\n\nAfter each iteration, check:\n- **Local optimum**: Last 3 iterations all discarded → stop (\"no more improvements found\")\n- **Diminishing returns**: Last kept improvement was \u003C 0.5% → stop (\"diminishing returns\")\n- **Budget exhausted**: Iteration count or time exceeded → stop\n- **Held gate**: Required evidence or isolation unavailable → stop and report it;\n  do not count a held candidate as an accepted improvement\n\nCalculate diminishing returns against the previous retained best. Keep reporting\noverall improvement against the original baseline; never replace that baseline.\nFor a zero baseline, report absolute delta instead of dividing by zero.\n\n### Step 4: REPORT\n\nCreate and update `.planning\u002Fresearch\u002Fexperiment-{unique-slug}.md` in the isolated\nrun checkout; do not overwrite another run's report. Include the frozen plan and\nidentities from Step 1, followed by:\n\n```\n# Experiment: {Description}\n\n> Metric: `{command}`\n> Direction: {lower|higher} is better\n> Scope: {glob pattern}\n> Budget: {N iterations}\n> Date: {ISO date}\n> Original incumbent: {commit and evaluator hashes}\n> Checks: {commands, acceptance conditions, repeat\u002Fnoise policy}\n\n## Results\n\n| Iteration \u002F Commit | Value | Delta from original \u002F best | Verdict | Checks \u002F Review \u002F Evidence |\n|--------------------|-------|----------------------------|---------|----------------------------|\n| baseline \u002F {sha}   | {N}   | —                          | —       | {paths}                    |\n| 1 \u002F {sha}          | {N}   | {+\u002F-} \u002F {+\u002F-}              | KEEP    | {paths}                    |\n| 2 \u002F {sha}          | {N}   | {+\u002F-} \u002F {+\u002F-}              | HELD    | {reason and paths}         |\n\n## Outcome\n- **Start**: {baseline}\n- **Best verified local candidate**: {value and commit, or none}\n- **Improvement**: {percentage}\n- **Iterations**: {kept}\u002F{total}; held: {N}\n- **Stop reason**: {convergence|diminishing|budget|held gate}\n- **Integration**: {not attempted|held with reason|verified target commit}\n- **Source checkout preservation**: {before\u002Fafter dirty-file hashes and index\u002Fstatus comparison}\n\n## Retained Local Changes\n{Changes, commit hashes, checkout paths, and any unresolved gates}\n```\n\nLog the run through the existing integrity-aware telemetry writer, with the\nisolated run checkout as `CLAUDE_PROJECT_DIR`:\n```text\nnode .citadel\u002Fscripts\u002Ftelemetry-log.cjs --event agent-complete --agent experiment --session {slug} --status {success|partial|failed}\n```\nIn Citadel itself use `scripts\u002Ftelemetry-log.cjs`. Put detailed results in the\nreport; use `partial` for held gates. The writer supplies `_hash` and `_hash_v: 1`.\nIf unavailable, report that limitation; never append raw JSONL or fabricate hashes.\n\n## Common Metrics\n\n| Goal | Numeric output from the project metric command |\n|------|-----------------------------------------------|\n| Reduce bundle size | Built bundle bytes; a failed build is a failed measurement |\n| Increase throughput | Operations per second under the fixed workload |\n| Reduce latency | A predeclared percentile in milliseconds |\n| Reduce file\u002Fline count | Count within a fixed scope, with behavioral checks retained |\n\n## Safety Rules\n\n- Source edits stay within scope; reports and telemetry use only owned run paths.\n- Preserve user files, index and active work; verify preservation again on exit.\n- Use actual isolated checkouts, a fixed evaluator and predeclared required checks.\n- Failed or unknown checks never authorize KEEP, integration or terminal success.\n- If a candidate metric fails, record DISCARD; never infer a value from failed output.\n\n## Contextual Gates\n\n**Disclosure:** \"Running isolated experiment on [target] from [commit], with metric [command] and checks [plan]. Budget: [N]. Verified candidates remain local until integration gates pass.\"\n**Reversibility:** amber — experiment-owned local commits\u002Fcheckouts are retained with evidence; the source checkout stays intact.\n**Trust gates:**\n- Proceed within existing authorization for local work; do not request it again.\n  Trust level never waives isolation, frozen evaluation, review or required checks.\n\n## Quality Gates\n\n- Original incumbent, evaluator identities and acceptance plan were fixed before iterations.\n- Every KEEP has an improved metric, full required passed checks and independent review on the exact candidate.\n- Every DISCARD\u002FHELD has a reason; missing, stale or malformed evidence is never a pass.\n- Any integration has current passed evidence for the resulting subject (Constitution P-008).\n- Report includes all iteration evidence, retained paths, stop reason and source preservation check.\n\n## Fringe Cases\n\n**Metric outputs nothing, non-numeric text, NaN\u002Finfinity, or exits nonzero**:\nInvalid measurement. Resolve the baseline command before starting; discard a\ncandidate measurement failure. Pipelines must preserve the measured command's\nfailure status rather than hiding it behind a successful text filter.\n\n**No worktree support**: Use a separate clean local clone at the recorded commit.\nA branch in the same checkout is not isolation. If neither is possible, stop as\nheld and provide the plan; do not edit the source checkout.\n\n**If .planning\u002Fresearch\u002F does not exist**: Create it before writing the experiment report. If `.planning\u002F` itself doesn't exist, create the full path or output the report inline.\n\n**Budget exhausted with zero kept iterations**: Report outcome as \"no improvement found\". This is a valid result — do not continue past the budget.\n\n## Exit Protocol\n\n```\n---HANDOFF---\n- Experiment: {description}\n- Result: {original baseline} → {best verified local value}; retained {N}\u002F{total}\n- Gates \u002F integration: {passed, held or failed; target commit if integrated}\n- Stop reason \u002F report: {reason}; {isolated report path}\n- Preservation \u002F recovery: {source hashes unchanged or observed discrepancy}; {retained local commits and paths}\n---\n```\n","# \u002Fexperiment — Metric-Driven Optimization Loop\n\n## Identity\n\nCoordinate bounded metric-driven experiments in isolated checkouts, retaining\ncandidates locally until the declared verification and independent review pass.\n\n## Orientation\n\n### When to Use\n\n- When you want to optimize a measurable metric (bundle size, error count, test coverage, FPS)\n- When you have a clear hypothesis but aren't sure which of several approaches wins\n- When manual A\u002FB testing would be too slow or error-prone\n- NOT when the goal is subjective (\"make it feel better\") — the metric must be a number\n\n### Inputs\n\nThe user provides three things:\n1. **scope**: Files to modify (glob pattern, e.g., \"src\u002Fapi\u002F**\u002F*.ts\")\n2. **metric**: Project command that outputs a single number (e.g., `node tools\u002Fbundle-bytes.cjs`)\n3. **budget**: Iteration cap (default: 5) or time cap (e.g., \"10 minutes\")\n\nAsk only for missing inputs that cannot be resolved from the request or project.\nThe metric MUST exit successfully and output a single finite number to stdout.\n\n## Protocol\n\n### Step 1: BASELINE\n\n1. Read project instructions and inspect the checkout, index, untracked files,\n   and active worktrees. Record the source commit and dirty-file hashes\u002Fstatus.\n   Leave user work in place: never stash, reset, clean, switch branches, or commit\n   unrelated changes to make an experiment possible.\n2. Create a dedicated worktree at an explicit commit, or a separate local clone\n   at that commit. Verify its path, HEAD, and clean status before running commands.\n   If the requested baseline includes authorized working changes, copy only those\n   changes into the isolated checkout, preserving deletions and file contents;\n   verify their hashes and commit the snapshot there. Leave the original index and\n   files untouched. If the intended snapshot is unclear, clarify before copying.\n3. Before iterations, write the evaluation plan in the experiment report: source\n   and snapshot commits, allowed source scope, metric command and direction,\n   timeout, repeat\u002Fnoise policy, and required typecheck, regression and behavioral\n   checks. Record any inapplicable check and its reason now, not after a failure.\n   Ask about direction only if ambiguous. A scalar is a proxy, not acceptance.\n4. Freeze the evaluator: record hashes for the metric implementation, test\n   assertions, fixtures\u002Fexpected outputs, and relevant command\u002Fconfig files.\n   These are outside candidate edit scope, even if a broad glob includes them.\n   Keep the original incumbent commit, evaluator and plan fixed for the run.\n5. Pin one file-byte representation before measuring, including checkout filters\n   and line endings. Compare baseline and evaluator hashes with their committed\n   blobs; for commit-based evaluation, materialize matching bytes in the isolated\n   checkout. Use the same representation for every candidate and independent\n   check; a clean Git status alone does not establish byte identity.\n6. Measure the baseline and run the declared checks in isolation. Record commands,\n   exit codes, values and evidence paths. An invalid baseline or required-check\n   failure holds optimization until resolved; do not silently waive the check.\n\nRun commands from the intended isolated checkout. Bind `CLAUDE_PROJECT_DIR` for\neach child process to that checkout so timeout\u002Ftelemetry helpers cannot write into\nthe user's source checkout. Use the installed timeout helper (in Citadel itself,\n`node scripts\u002Frun-with-timeout.js 300 \u003Ccommand> [args...]`).\n\n### Step 2: ITERATE\n\nFor each iteration (up to budget):\n\n1. **Create isolation**: Use a fresh worktree\u002Fclone from the original incumbent or\n   the last verified retained candidate; record that parent commit. Give the worker\n   the fixed plan, scope, evaluator exclusions and previous attempts. Verify actual\n   isolation rather than relying on a branch name or a spawn option alone.\n2. **Propose change**: Modify only allowed source files. Never change the metric,\n   tests, expected outputs, exclusions or thresholds to earn a pass. If the\n   evaluator needs repair, stop this run and establish a new baseline and plan.\n3. **Inspect and measure**: Check the full diff and evaluator hashes first. Reject\n   scope violations or evaluator changes, even if they improve the number. Run the\n   unchanged metric and declared checks with bounded timeouts and the same setup\n   as the incumbent. Keep raw results, candidate commit and evaluator identity.\n4. **Review**: For an improving candidate, obtain independent review of the exact\n   diff, scope, behavior\u002Fregressions and evidence. The proposer cannot approve its\n   own result. A summary-only HANDOFF check is insufficient. Review unavailability,\n   stale evidence, timeout or an incomplete required check means HELD, not passed.\n5. **Decide**:\n   - **KEEP**: Improved under the declared repeat\u002Fnoise policy, with every required\n     check and independent review passed for this exact candidate. Retain its local\n     commit; it may seed the next iteration. Do not merge into the user's checkout.\n   - **DISCARD**: Same\u002Fworse, failed required check, scope violation or evaluator\n     tampering. Log why; preserve evidence before removing only experiment-owned\n     disposable worktrees. Never clean another agent's or the user's worktree.\n   - **HELD**: Missing\u002Funknown evidence or review. Preserve the local candidate and\n     reason; it cannot seed a subsequent iteration or authorize promotion.\n6. **Log**: Record value, delta against both the original baseline and the previous\n   retained best, verdict, change, commit, required-check results and review evidence.\n\nPromotion is separate from KEEP. Only after all gates pass may an already\nauthorized local integration proceed into a safe, clean destination. Recheck the\nresulting integration subject with the declared checks and independent review if\nits content differs. Otherwise leave the candidate local and report the held gate.\nNever push, publish, or overwrite dirty work as part of the optimization loop.\n\n### Step 3: CONVERGENCE CHECK\n\nAfter each iteration, check:\n- **Local optimum**: Last 3 iterations all discarded → stop (\"no more improvements found\")\n- **Diminishing returns**: Last kept improvement was \u003C 0.5% → stop (\"diminishing returns\")\n- **Budget exhausted**: Iteration count or time exceeded → stop\n- **Held gate**: Required evidence or isolation unavailable → stop and report it;\n  do not count a held candidate as an accepted improvement\n\nCalculate diminishing returns against the previous retained best. Keep reporting\noverall improvement against the original baseline; never replace that baseline.\nFor a zero baseline, report absolute delta instead of dividing by zero.\n\n### Step 4: REPORT\n\nCreate and update `.planning\u002Fresearch\u002Fexperiment-{unique-slug}.md` in the isolated\nrun checkout; do not overwrite another run's report. Include the frozen plan and\nidentities from Step 1, followed by:\n\n```\n# Experiment: {Description}\n\n> Metric: `{command}`\n> Direction: {lower|higher} is better\n> Scope: {glob pattern}\n> Budget: {N iterations}\n> Date: {ISO date}\n> Original incumbent: {commit and evaluator hashes}\n> Checks: {commands, acceptance conditions, repeat\u002Fnoise policy}\n\n## Results\n\n| Iteration \u002F Commit | Value | Delta from original \u002F best | Verdict | Checks \u002F Review \u002F Evidence |\n|--------------------|-------|----------------------------|---------|----------------------------|\n| baseline \u002F {sha}   | {N}   | —                          | —       | {paths}                    |\n| 1 \u002F {sha}          | {N}   | {+\u002F-} \u002F {+\u002F-}              | KEEP    | {paths}                    |\n| 2 \u002F {sha}          | {N}   | {+\u002F-} \u002F {+\u002F-}              | HELD    | {reason and paths}         |\n\n## Outcome\n- **Start**: {baseline}\n- **Best verified local candidate**: {value and commit, or none}\n- **Improvement**: {percentage}\n- **Iterations**: {kept}\u002F{total}; held: {N}\n- **Stop reason**: {convergence|diminishing|budget|held gate}\n- **Integration**: {not attempted|held with reason|verified target commit}\n- **Source checkout preservation**: {before\u002Fafter dirty-file hashes and index\u002Fstatus comparison}\n\n## Retained Local Changes\n{Changes, commit hashes, checkout paths, and any unresolved gates}\n```\n\nLog the run through the existing integrity-aware telemetry writer, with the\nisolated run checkout as `CLAUDE_PROJECT_DIR`:\n```text\nnode .citadel\u002Fscripts\u002Ftelemetry-log.cjs --event agent-complete --agent experiment --session {slug} --status {success|partial|failed}\n```\nIn Citadel itself use `scripts\u002Ftelemetry-log.cjs`. Put detailed results in the\nreport; use `partial` for held gates. The writer supplies `_hash` and `_hash_v: 1`.\nIf unavailable, report that limitation; never append raw JSONL or fabricate hashes.\n\n## Common Metrics\n\n| Goal | Numeric output from the project metric command |\n|------|-----------------------------------------------|\n| Reduce bundle size | Built bundle bytes; a failed build is a failed measurement |\n| Increase throughput | Operations per second under the fixed workload |\n| Reduce latency | A predeclared percentile in milliseconds |\n| Reduce file\u002Fline count | Count within a fixed scope, with behavioral checks retained |\n\n## Safety Rules\n\n- Source edits stay within scope; reports and telemetry use only owned run paths.\n- Preserve user files, index and active work; verify preservation again on exit.\n- Use actual isolated checkouts, a fixed evaluator and predeclared required checks.\n- Failed or unknown checks never authorize KEEP, integration or terminal success.\n- If a candidate metric fails, record DISCARD; never infer a value from failed output.\n\n## Contextual Gates\n\n**Disclosure:** \"Running isolated experiment on [target] from [commit], with metric [command] and checks [plan]. Budget: [N]. Verified candidates remain local until integration gates pass.\"\n**Reversibility:** amber — experiment-owned local commits\u002Fcheckouts are retained with evidence; the source checkout stays intact.\n**Trust gates:**\n- Proceed within existing authorization for local work; do not request it again.\n  Trust level never waives isolation, frozen evaluation, review or required checks.\n\n## Quality Gates\n\n- Original incumbent, evaluator identities and acceptance plan were fixed before iterations.\n- Every KEEP has an improved metric, full required passed checks and independent review on the exact candidate.\n- Every DISCARD\u002FHELD has a reason; missing, stale or malformed evidence is never a pass.\n- Any integration has current passed evidence for the resulting subject (Constitution P-008).\n- Report includes all iteration evidence, retained paths, stop reason and source preservation check.\n\n## Fringe Cases\n\n**Metric outputs nothing, non-numeric text, NaN\u002Finfinity, or exits nonzero**:\nInvalid measurement. Resolve the baseline command before starting; discard a\ncandidate measurement failure. Pipelines must preserve the measured command's\nfailure status rather than hiding it behind a successful text filter.\n\n**No worktree support**: Use a separate clean local clone at the recorded commit.\nA branch in the same checkout is not isolation. If neither is possible, stop as\nheld and provide the plan; do not edit the source checkout.\n\n**If .planning\u002Fresearch\u002F does not exist**: Create it before writing the experiment report. If `.planning\u002F` itself doesn't exist, create the full path or output the report inline.\n\n**Budget exhausted with zero kept iterations**: Report outcome as \"no improvement found\". This is a valid result — do not continue past the budget.\n\n## Exit Protocol\n\n```\n---HANDOFF---\n- Experiment: {description}\n- Result: {original baseline} → {best verified local value}; retained {N}\u002F{total}\n- Gates \u002F integration: {passed, held or failed; target commit if integrated}\n- Stop reason \u002F report: {reason}; {isolated report path}\n- Preservation \u002F recovery: {source hashes unchanged or observed discrepancy}; {retained local commits and paths}\n---\n```\n",{"name":5,"license":15,"description":7,"auto-trigger":32,"last-updated":36,"user-invocable":37,"trigger_keywords":38},1792022400000,true,[5,25,39,40,41],"try","A\u002FB","measure","main","e1a3d45697a0f323aaedcbea0ab6a0387b5fe722","skills\u002Fexperiment",84,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel","https:\u002F\u002Fsethgammon.github.io\u002FCitadel\u002F","https:\u002F\u002Fgithub.com\u002FSethGammon","Building Citadel, the repo-local operating layer for Claude Code and Codex. Persistent work, routing, verification, and coordinated agent fleets.","2026-11-13 02:05:13",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":37},[53,56,59],{"tool":54,"command":55},"npx","npx skills add SethGammon\u002FCitadel --skill experiment",{"tool":57,"command":58},"bunx","bunx skills add SethGammon\u002FCitadel --skill experiment",{"tool":60,"command":61},"pnpm","pnpm dlx skills add SethGammon\u002FCitadel --skill experiment","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fexperiment\u002FSKILL.md",[64,70,74,78],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"__benchmarks__\u002Fdirty-workspace.md","REFERENCE","参考文档",2642,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fexperiment\u002F__benchmarks__\u002Fdirty-workspace.md",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"__benchmarks__\u002Fevaluator-tampering.md",1770,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fexperiment\u002F__benchmarks__\u002Fevaluator-tampering.md",{"path":75,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":76,"sourceHtmlUrl":77},"__benchmarks__\u002Fno-metric.md",893,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fexperiment\u002F__benchmarks__\u002Fno-metric.md",{"path":79,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":80,"sourceHtmlUrl":81},"__benchmarks__\u002Fwith-metric.md",1354,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fexperiment\u002F__benchmarks__\u002Fwith-metric.md",[83,108,137,161,187,206],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":31},"01M6GXSBKE9A2HQWF8QRAZ4WJ5","workspace","Multi-repo campaign coordinator. Same lifecycle as fleet -- scope claims, discovery relay, wave-based execution -- but the unit of work is a repo, not a file. Coordinates campaigns across repositories with shared context.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fworkspace\u002FSKILL.md",[],[85,90,91,92,93,94,95,96,97,98,99,100,101,26,102,103,104,105,106,107],"repos","snowflake","multi-repo","work","context","campaign","coordinate","but","across","campaigns","shared","as","scope","add","unit","coordinator","fleet","claims",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":119,"publishedAt":31},"01M6GXS873AD1Y6RTM6GV47F3E","wiki","Markdown-first knowledge base where the LLM acts as librarian. Ingests raw sources, compiles and interlinks topic files, self-maintains an index. No vector DB or embeddings required -- uses LLM-native navigation over structured markdown up to ~400K words.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fwiki\u002FSKILL.md",[114],{"categoryNo":115,"categoryName":116,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[110,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,101,26,135,136],"vector","embeddings","librarian","markdown","knowledge","karpathy","knowledge management","karpathy wiki","up","files","maintain","self","knowledge base","project","db","sources","native",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":31},"01M6GXS2840SJ61285SZ43EJC3","watch","File sentinel that monitors the working directory for changes and marker comments, then auto-triggers appropriate skills. Poll-based via git diff against the last scan commit. Writes intake items for batch processing and routes marker actions through \u002Fdo. Use for automatic reactions to file changes; do NOT use for one-off inspection or tasks needing human judgment per file.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fwatch\u002FSKILL.md",[],[139,144,145,146,147,148,149,150,151,152,153,154,129,155,156,157,158,159,26,160],"directory","commit","tasks","git","batch","actions","start","sentinel","diff","auto","stop","do","scan","human","judgment","reactions","processing",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":170,"publishedAt":31},"01M6GXRXHYJ5RD9RZP81S2VFSW","verify","Self-test the Citadel hook pipeline from within a live session. Exercises real tool calls (Write, Edit, Bash, Read) and checks that hooks fired, telemetry accumulated, and no errors occurred. Reports HOOK HEALTH: PASS or HOOK HEALTH: FAIL with a per-hook breakdown.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fverify\u002FSKILL.md",[167],{"categoryNo":168,"categoryName":169,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000008","测试与质量",[163,171,172,173,174,175,176,177,178,179,180,181,182,131,183,26,184,185,186,28],"citadel","telemetry","harness","pipeline","Bash","tool","read","write","edit","session","hooks","reports","live","hook","errors","calls",{"skillNo":188,"name":189,"nameZh":6,"description":190,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":191,"categories":192,"keywords":193,"publishedAt":31},"01M6GXRS9MCJFMQZ917H2XH3AC","unharness","Safely leave Citadel using the active adoption receipt. Produces a no-write, reviewable plan, preserves a portable archive, removes only exact owned material, and reports modified or externally registered surfaces as retained or unknown. Legacy installs must be imported before exact leave is claimed.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Funharness\u002FSKILL.md",[],[189,194,171,173,195,196,197,198,199,128,182,200,201,202,203,204,101,26,205,28],"uninstall","adoption","plan","archive","remove","only","Legacy","surfaces","clean","imported","active","material",{"skillNo":207,"name":208,"nameZh":6,"description":209,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":210,"categories":211,"keywords":220,"publishedAt":31},"01M6GXRMEJ2VHD43R9FNPD4910","triage","GitHub issue and PR investigator. Pulls open issues\u002FPRs, classifies them, searches the codebase for root cause or reviews contributed code, proposes fixes with file:line references, and optionally implements fixes. Use for investigating GitHub issues and reviewing PRs; do NOT use for general code review unrelated to GitHub issues.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Ftriage\u002FSKILL.md",[212,215],{"categoryNo":213,"categoryName":214,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":216,"categoryName":217,"taxonomyType":218,"taxonomyTypeDesc":219},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[208,221,222,223,224,225,226,227,228,229,230,231,232,233,155,26,234,235,236,28],"code review","review","review pr","pr","code","github issues","issues","open","use","unrelated","issue","general","references","line","investigator","reviews"]