flow-init
Skill10 starsChanged 30 days agoApache-2.0View on GitHub
Set up harness-tier in this repo, or re-sync it after a plugin update. Idempotent — safe to re-run.
- Installs packages
2 other projects use a version of this.
Adopted by
Most recently taken up by
- baodhg/FLOWtheir own version, first seen Nov 8, 2026
- fancylight/skillstheir own version, first seen Jul 23, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- baodhg/FLOW★ 2same name
- fancylight/skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository21 other files it gives its agents.
- .claude/CLAUDE.mdCLAUDE.md
- commitSkill
- design-apiSkill
- design-architectureSkill
- design-erdSkill
- design-sdsSkill
- design-srsSkill
- design-tableSkill
- doc-syncSkill
- flowSkill
- flow-uninstallSkill
- harness-authoringSkill
- harness-deploymentsSkill
- harness-initSkill
- harness-insightSkill
- integrationSkill
- performanceSkill
- playwright-scaffoldSkill
- prose-reviewSkill
- release-commitSkill
- wiki-initSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
22 rules. About 0 are common, 9 are distinctive, and 13 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈9
Distinctive · estimate
This author's own choices. Worth a look.
13
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 9
Run after installing the harness-tier plugin in a host repository — or re-run any time to re-sync the host scripts and optionally …
- Very specific: line 67
Codex session (always, non-interactive): if this session itself runs in Codex CLI and the config's harnesses list lacks codex, add codex to …
- Very specific: line 73
Re-sync (always, non-interactive): run Step 2's flow_init_setup.py.
- Distinctive: line 79
Slot backfill (if any): if the report lists missing slots, do Step 2.5 (offer to insert them verbatim).
- Distinctive: line 81
Reconfigure (opt-in): Ask the user (multi-select) — "Select the items to reconfigure" (default: nothing).
- Distinctive: line 87
If the user selects nothing, stop after re-sync + backfill.
- Distinctive: line 136
If a required dep (python3 ≥ 3.8, PyYAML) is still missing after this,
- Distinctive: line 149
If the file is absent (first-time setup), build it:
- Very specific: line 151
Read ${PLUGIN}/flow-config.example.yaml as the template (slots + format comments).
- Distinctive: line 152
Ask the user (structured choice) for each slot, showing the example value as default:
- Very specific: line 154
merge_workflow: Ask the user (multi-select) "Which flows go through a pull request?" — options daily (feature/* · fix/* → integration) and …
- Distinctive: line 163
review_checklist: keep the generic categories.
- Very specific: line 217
Write the filled ${ROOT}/.claude/harness-tier/config/flow-config.yaml (create the .claude/harness-tier/config/ directory if absent).
- Distinctive: line 251
If it lists missing slots, ask the user (multi-select) ("The example has N new config slots (<list>).
- Very specific: line 266
Harness detection: consider the harness installed if either the ${CLAUDE_PROJECT_DIR}/docs/code-style/ directory or any …
- Very specific: line 272
Read the "toolchain & config" / "operational concerns" sections of docs/code-style/<stack>.md and services/*/CLAUDE.md (the per-module …
- Very specific: line 283
every-commit → runs on changed modules every commit (layer-2 flow gate).
- Very specific: line 304
Follow references/merge-ruleset-check.md — it holds the block to run and why each guard is written the way it is.
- Very specific: line 314
Ask the user (structured choice) whether to render srs-verify.yml.
- Very specific: line 335
Ask for the personal webhook URL (input-wait alerts).
- Distinctive: line 338
Ask for team branch channels (keys = branch names, e.g.
- Very specific: line 418
Never auto-install without asking, and never mutate machine-wide state (git config --global, ~-level files).
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Flow-Init — harness-tier Setup Wizard
Run after installing the harness-tier plugin in a host repository — or re-run any time
to re-sync the host scripts and optionally reconfigure. It writes the host-side
config and wiring that the plugin's runtime pieces (/flow, flow_gate_check.py,
precommit-runner.sh, teams_alert.py) depend on.
Split of labor: the deterministic, error-prone wiring (file copies, idempotent
settings.json / pre-commit / .gitignore merges) is done by
scripts/flow_init_setup.py so it is repeatable and unit-tested. This skill
(Claude) only does the interactive / judgment parts — gathering config,
collecting webhook URLs, writing the language-matched CLAUDE.md block — and
orchestrates by calling the scripts and relaying their reports.
Idempotent: safe to re-run. The setup script skips entries that already exist (never double-appends); the interactive steps confirm before overwriting.
Interaction. Wherever this skill asks the user something, use the host's blocking question tool already in your tool list, matched by capability rather than by a host-specific name; if it is listed but not loaded, load it first with the host's tool-discovery primitive; only when no such tool is listed, or a question call errors, offer numbered options in chat and end your turn to wait for the reply — never answer the question yourself or skip it.
Path conventions
- Read from the plugin (templates/scripts):
${CLAUDE_PLUGIN_ROOT}/... - Write to the host repo (config/wiring):
${CLAUDE_PROJECT_DIR}/... All host-side harness-tier artifacts live under
${CLAUDE_PROJECT_DIR}/.claude/harness-tier/, classified by purpose (no root scatter):scripts/— copied gate scripts (plugin-owned, git-tracked)config/—flow-config.yaml,flow-tiers.yaml(the tier→gates policy — plugin-owned, overwritten on every install, do not edit),teams-webhooks.json,.teams-webhooks.local.json(host-owned).flow/— gate evidence (gitignored)
The only host files that stay elsewhere are the ones external tools pin:
.gitignore(git),.pre-commit-config.yaml(pre-commit),.claude/settings.json(Claude Code).- The commit gate runs as a host
settings.jsonhook, where${CLAUDE_PLUGIN_ROOT}may not resolve — so the setup script copies the gate scripts into${CLAUDE_PROJECT_DIR}/.claude/harness-tier/scripts/and references them by host path.
ROOT="${CLAUDE_PROJECT_DIR:-$(git rev-parse --show-toplevel)}"
PLUGIN="${CLAUDE_PLUGIN_ROOT}"Each Bash call is a fresh shell: open every later block with these assignments again, or the variables it names are empty there.
Execution
Execution modes — first run vs re-run
/flow-init is the single idempotent entry point. Branch on whether the host
config already exists (${ROOT}/.claude/harness-tier/config/flow-config.yaml):
- First run (config absent) — run Step 0 → Step 4 in order, gathering everything (the full wizard below).
Re-run (config present) — the goal is update without clobbering:
- Codex session (always, non-interactive): if this session itself runs in Codex CLI
and the config's
harnesseslist lackscodex, addcodexto it with Edit — append it to the list, or write the example'sharnessesblock withharnesses: [claude, codex]when the key is absent — and tell the user the gate goes into Codex too. Remove nothing. Aharnessesvalue that is not a list stays as written: the re-sync reports it, and you tell the user to fix it before the gate reaches Codex. - Re-sync (always, non-interactive): run Step 2's
flow_init_setup.py. This re-copies the gate scripts/policy, repairs thesettings.jsongate path, registers every harnessharnessesnames, and prints the[config 슬롯 점검]block. This must happen before any prompt, so a user who only wants fresh scripts is never blocked by questions. - Slot backfill (if any): if the report lists missing slots, do Step 2.5 (offer to insert them verbatim).
- Reconfigure (opt-in): Ask the user (multi-select) — "Select the items to reconfigure"
(default: nothing). Options map to the existing steps,
and you run only the selected ones against current values:
flow-config.yamlvalues → Step 1's slot prompts (existing values shown as defaults)- Teams webhook URL → Step 3's webhook prompts
- CLAUDE.md teams block → Step 3's managed-block step If the user selects nothing, stop after re-sync + backfill.
- Re-render (only if Reconfigure above changed a render flag or
harnesses):doc_style.enable,unit_test.enable,contract_test.enableande2e.enabledecide whether a workflow is written,harnessesdecides which agent CLIs carry the gate, and the re-sync in item 2 ran before those questions were asked. Runflow_init_setup.pyonce more when one of them changed — otherwise the host carriesenable: truewith no workflow, which fordoc_stylemeans the rule is enforced in neither layer while the user believes it is on, and acodexentry with no.codex/hooks.jsongate.
Re-run never re-gathers everything and never overwrites host-owned config without the user selecting that section.
- Codex session (always, non-interactive): if this session itself runs in Codex CLI
and the config's
Step 0 — Dependencies: detect (script), then install-with-consent (you)
Detection is mechanical → a script. Choosing how to install for this environment, and doing it, is judgment → you (the host AI). Never install without consent; never mutate machine-wide state.
- Detect — run the checker (detection only; it does not install):
It reports each dep as present/absent: python3 ≥ 3.8 (required), PyYAML (required), pre-commit (recommended), superpowers plugin (required for Dev+). Its printed install commands are a baseline hint — you may find a better method for the actual environment.bash "${PLUGIN}/scripts/check-deps.sh" - Install what you can — only after consent. For each missing pip-installable
dep (PyYAML, pre-commit):
- Inspect the environment to choose the method: is
python3 -m pipavailable? is it externally-managed (PEP 668)? Look up the right approach if unsure. The package must land in the barepython3the commit hook calls — preferpython3 -m pip install <pkg>(or--userwhen externally-managed), notuv add/ a project venv the hook can't see. - Ask first — ask the user (structured choice): show the exact command you intend to run; let the user approve / pick an alternative / decline (install themselves).
- On approval, run it, then re-run
check-deps.shto confirm. If it fails, diagnose and propose a better method (venv, pipx, OS package) — don't silently give up.
- Inspect the environment to choose the method: is
- Guide what you cannot install (relay clearly; offer the command but let the
user run it):
- python3 / version upgrade — OS-level (Homebrew / apt / winget / choco), often needs admin. Offer the command for the detected OS.
- superpowers plugin — installed via the host tool's user-invoked plugin
command (
/plugin install superpowers@…); you cannot run it. Guide the marketplace-add + install steps.
- If a required dep (python3 ≥ 3.8, PyYAML) is still missing after this, stop and tell the user — the commit gate fails closed on every commit until it is present.
Step 1 — Generate flow-config.yaml (interactive — Claude)
- When this step runs: on a first run (config absent), build the file from scratch via item 2 below. On a re-run, this step runs only if the user selected "flow-config.yaml values" in the reconfigure menu (see Execution modes) — then edit only the specific values the user wants, showing current values as defaults; never a full re-entry, never a blind rewrite. (Missing-slot backfill is handled separately in Step 2.5.)
If the file is absent (first-time setup), build it:
- Read
${PLUGIN}/flow-config.example.yamlas the template (slots + format comments). - Ask the user (structured choice) for each slot, showing the example value as default:
- branches:
integration/staging/production - merge_workflow: Ask the user (multi-select) "Which flows go through a
pull request?" — options
daily (feature/* · fix/* → integration)andpromotion (integration → staging → production). Nothing selected →pull_request: [](all direct merges — the existing behaviour). The promotion option's description MUST state: a promotion PR merges only as "Create a merge commit" (a rebase leaves a[skip ci]rc commit as the head so the release never runs; a squash destroys the release history); a forced bump level needs theRelease-Level:trailer in the merge commit body; and a ruleset without a release-automation bypass actor halts releases. - review_checklist: keep the generic categories; let the team append.
- doc_sync:
index/dirs/service_docs(empty if no per-service docs). - contract_test (REST API contract testing — CI only): first ask the user
(structured choice) "Does this repo have a REST API?". No → write
enable: falseand skip the slots below. Yes → collectbranches(proposeflow-config.branches' integration/staging/production values as defaults, but independently editable),schema(OpenAPI spec URL/path),base_url, andserver.compose_file/health_url/health_timeout.- Tool pin (once, at setup): dispatch subagent
harness-researcherto web-check the current maintenance status of OpenAPI contract-testing tool candidates → present a recommendation (defaultschemathesis+schemathesis/action@v3) and pin the choice intotool/action_ref. CI then runs deterministically on this pinned value (no per-CI web check).
- Tool pin (once, at setup): dispatch subagent
- unit_test (unit-test CI safety net — CI only): first ask the user
(structured choice) "Run unit tests in CI too?". The local flow gate (layer 2)
only runs unit tests on agent-session commits — direct/terminal/CI/GitHub
commits bypass it, so this is the CI-side net. No → write
enable: falseand skip the slots below. Yes → collectbranches(proposeflow-config.branches' integration/staging/production values as defaults, independently editable),timeout_minutes(per-job wall-clock cap; default 10), and onejobs[]entry per language/module to test — eachname/language/version/setup/test. Alanguageof python/node/java/go/rust selects that official setup action; any other value means thesetupcommand prepares the runtime. Not derived frommodules[]— the local gate and CI run in different execution contexts, so the CI job set is declared independently (self-containedjobs[]). - doc_style (prose discipline —
rules/doc-style.md): ask the user (structured choice) "Enforce the prose discipline?". State the cost of "no" in the options themselves: the commit-time stage only ever warns, so.github/workflows/doc-style.ymlis the single place this rule is ever enforced — declining does not leave a lighter check, it leaves none. Yes →enable: true, thenpathsandexclude(offer the example's["**/*.md"]/[]as defaults, and mention**/*.py·**/*.shcover comments and docstrings). The checker carries its own carve-outs, so anything named here joins them and never replaces them. No →enable: false; Step 2 then renders no workflow. The flag also drives the commit-time stage, so it is one answer for both layers, and flipping it later silences an already-rendered workflow without deleting it. - design_docs (design deliverables): show the example's paths as defaults and
let the user change
templates,docs,output. Then ask the user (structured choice) "Keep the generated .docx out of git?" — Yes →gitignore_output: true, No →false. State in therendererquestion that diagram source is sent to that server; the defaulthttps://kroki.iois public. - modules (per-module monorepo pre-checks — host-owned, lives under config): do not collect values on the first run. In Step 2.6, draft them by consulting the harness SSOT or by taking user input.
- harnesses (which agent CLIs the commit gate installs into — Claude Code is
always one, and needs no entry for it): if this session itself runs in Codex CLI,
write
harnesses: [claude, codex]intoflow-config.yamlwithout asking, and tell the user the gate goes into Codex too. Otherwise, if the host has a.codex/directory, or the user has mentioned Codex, ask the user (structured choice) whether to install the gate into Codex too. Yes → writeharnesses: [claude, codex]. No, or no condition holds → keep the example'sharnesses: [claude]— Claude only, the same as an absent key. A re-run applies the Codex-session rule again (Execution modes, Re-run item 1).
- branches:
- Write the filled
${ROOT}/.claude/harness-tier/config/flow-config.yaml(create the.claude/harness-tier/config/directory if absent).
- Read
Step 2 — Run the mechanical setup (idempotent script)
The deterministic wiring is done by a script so it is repeatable and tested — do not hand-merge JSON/YAML:
python3 "${PLUGIN}/scripts/flow_init_setup.py"A non-zero exit means the gate is not installed — the script says so in its own verdict line, and it exits 1 rather than 0 so a caller that only reads the exit code cannot report a setup that did not happen. Relay the verdict and stop; do not continue to Step 3 as if the gate were live.
It performs the steps listed in
references/setup-script-actions.md — copies,
hook/marketplace registration, .gitignore, and the CI workflow renders — and prints a
report. Relay that report; it is the authority on what was written, not this skill's
description of it.
Then remind the user to run
pre-commit install --hook-type pre-commit --hook-type commit-msg --hook-type pre-push (activates
gitlint, the push notifier, and the file-hygiene hooks) and to swap the language-specific local
hooks for their stack.
Step 2.5 — Backfill missing config slots (interactive — Claude, skippable)
The Step 2 script prints a [config 슬롯 점검] block listing slots present in
${PLUGIN}/flow-config.example.yaml but absent from the host config (key-absence
only).
- If it lists missing slots, ask the user (multi-select) ("The example has N new config slots
(
<list>). Add them to the host config?", allow all or a subset, default all). - For each accepted slot, read its block from
${PLUGIN}/flow-config.example.yamland insert it verbatim (comments and example defaults intact) into the host config at the parent anchor (end of the parent section; top-level slots append a new section) using Edit — never a PyYAML round-trip (preserves comments/format). - Tell the user to adjust values for their environment;
enable-style flags stay as in the example. - Skip entirely when the report lists no missing slots.
Step 2.6 — Module pre-check draft (when a harness is installed, skippable)
Draft flow-config.modules[] (the per-module monorepo pre-check settings). First
determine whether a harness is installed; the handling differs based on that.
Harness detection: consider the harness installed if either the
${CLAUDE_PROJECT_DIR}/docs/code-style/ directory or any
${CLAUDE_PROJECT_DIR}/services/*/CLAUDE.md file exists.
If a harness is installed — read the SSOT and draft the modules:
- Read the "toolchain & config" / "operational concerns" sections of
docs/code-style/<stack>.mdandservices/*/CLAUDE.md(the per-module SSOT) to identify each module's language and tools. - For each module, fill in
pathandchecks. Draft the standard keys (lint/static/import_lint/test/security) that exist for that language, and add any project-specific custom checks (license, sbom, secret-scan, …) the SSOT implies. Infer the test path from scaffold subfolders (tests/, etc.).- A check value is either a command string or the extended form
{ run: <cmd>, when: every-commit | promotion }. Usewhen(NOTon— YAML parses a bareonkey as boolean). Validatewhen ∈ {every-commit, promotion}; an unknown value falls back to every-commit with a warning, so catch typos here. - every-commit → runs on changed modules every commit (layer-2 flow gate).
A string value defaults to every-commit (except
security). - promotion → runs on all modules at staging/release promotion.
A string
securitydefaults to promotion (back-compat).
- A check value is either a command string or the extended form
- If a tool can't be found in the SSOT or is ambiguous, confirm — ask the user (structured choice) (do not guess).
- Insert the draft into the
modules:section offlow-config.yaml(Edit — no PyYAML round-trip; preserve format/comments). The research result is a default that the human edits in config; config is the final authority.
If no harness is installed — either ask the user (structured choice) for the modules slot
input directly, or let the user choose to leave it empty and fill it in manually
later. If the user chooses to skip, write modules: as an empty array ([]) and proceed.
Step 2.7 — Merge ruleset check (PR mode only, skippable)
Applies only when flow-config.merge_workflow.pull_request is non-empty. Under PR mode the
local git merge (or a branch-naming, non-rebasing git pull) disappears, so
flow-tiers.yaml's merge_strategy gate never fires — a GitHub Ruleset has to carry that
enforcement instead.
Follow references/merge-ruleset-check.md — it holds
the block to run and why each guard is written the way it is. Run it unconditionally: the
block detects the not-applicable case itself (the shipped [] default prints a skip line
and exits 0), so reading the config here to decide would only duplicate that.
Step 2.8 — srs-verify workflow (when docs/srs/ exists, skippable)
Applies only when ${ROOT}/docs/srs/ exists in the checkout — without one there is
nothing to point a workflow at.
Ask the user (structured choice) whether to render srs-verify.yml. The option descriptions
themselves carry what declining costs, the same discipline as the doc_style ask above
and /wiki-init's wiki-verify ask: the commit gate never reads an SRS, so this workflow
is the only thing that will ever see a dead anchor or a number two branches both took.
Declining does not leave a lighter check — it leaves none.
On yes:
python3 "${PLUGIN}/scripts/flow_init_setup.py" --render-srs-verifyRelay its line. An existing srs-verify.yml is reported and never overwritten. The
command is spelled from ${PLUGIN}, not the host copy — flow_init_setup.py is not in
COPY_FILES, so the host holds no copy of it.
On no, say plainly that nothing now checks the SRS's anchors, and that re-running
/flow-init offers this again.
Step 3 — Teams webhook URLs + CLAUDE.md block (interactive — Claude, skippable)
- Ask for the personal webhook URL (input-wait alerts). If provided:
python3 "${ROOT}/.claude/harness-tier/scripts/teams_alert.py" --set personal <URL>→ writes${ROOT}/.claude/harness-tier/config/.teams-webhooks.local.json(gitignored). - Ask for team branch channels (keys = branch names, e.g. integration /
staging / production). For each provided:
--set <branch> <URL>→ the URL goes to the gitignored.teams-webhooks.local.json, and the branch name alone to the tracked${ROOT}/.claude/harness-tier/config/teams-webhooks.json, so every clone watches it and a clone holding the URL posts. Only when the user wants the URL itself committed for the team, add--shared: the URL'ssig=token is the credential that posts to the channel, and a public or widely cloned repo hands it to everyone who reads it. Empty URLs are skipped at send time, so partial setup is fine. - If any Teams channel was configured, offer — ask the user (structured choice), default
yes — to add a managed Teams-usage block to the host
CLAUDE.mdso this repo's Claude alerts right before presenting a question to the user — which the Notification hook does not cover (it only auto-fires on permission, idle and input-request waits). The alert directive must be emphasized (e.g.IMPORTANT) so the host model does it. Insert between the idempotent markers, written in the same language as the existing hostCLAUDE.md(the block below is the reference content — translate it to match the doc's language); if the markers already exist, replace the block in place (never duplicate). If${ROOT}/CLAUDE.mdis absent, create it containing only this block. The script path is the host-installed copy.claude/harness-tier/scripts/teams_alert.py(not the plugin SOURCE). Skip entirely if no channel was set or the user declines:<!-- harness-tier:teams BEGIN (managed by /flow-init — edits inside are overwritten) --> ## Teams notifications (harness-tier) **IMPORTANT — right before presenting a question to the user (or any wait for user input), you MUST first notify the personal channel:** ```bash python3 "${CLAUDE_PROJECT_DIR:-$(git rev-parse --show-toplevel)}/.claude/harness-tier/scripts/teams_alert.py" \ --channel personal --title "Waiting for input" --text "<one-line task summary>" ``` - **Why manual** — a question to the user does not trigger the Notification hook. This call is the only way to alert at the moment options are presented (permission, idle and input-request waits are handled automatically by the hook). The card automatically appends `project @ branch`. - **`CLAUDE_PROJECT_DIR` fallback recommended** — this variable is injected automatically **only during hook execution**. `teams_alert.py` self-heals by falling back to the git toplevel when it is unset, but for explicitness add the `:-$(git rev-parse --show-toplevel)` fallback shown above in manual calls (right before a question to the user) — a safety net for when cwd is outside the repo. - **Webhook setup** — webhook URLs live in `.claude/harness-tier/config/.teams-webhooks.local.json` (gitignored, per-user); `.claude/harness-tier/config/teams-webhooks.json` (git-tracked) names the watched branches (`dev`/`stage`/`main`, etc.) and holds a URL only when it was registered with `--shared`. - **Security** — a Power Automate URL's `sig=` token is the credential that posts to the channel. One committed with `--shared` lets anyone who can read the repo inject channel messages (no data exfiltration or privilege escalation); mark it as a secret-scanner exception only after deciding that is acceptable. <!-- harness-tier:teams END -->
Completion report
Print a summary: the Step 0 dependency status (python3 ≥3.8 / PyYAML required —
gate fails closed if missing; pre-commit / superpowers guidance), the Step 2
script report (copied / registered / pre-commit checked / contract-test, unit-test,
doc-style, e2e and srs-verify workflows rendered-or-skipped / skipped, + any missing
pre-commit hooks to add manually),
the Step 2.6 modules draft result (whether a harness was detected / number of modules
written / list of unconfirmed items / whether skipped), whether the
CLAUDE.md Teams block was added/updated/skipped, and the manual follow-ups
(pre-commit install, swapping language-specific hooks). If
the Teams block was inserted and the host CLAUDE.md already had a hand-written
Teams-alert rule (pre-harness-tier), advise removing it — the managed block supersedes it
(never delete the user's content automatically). Then tell the user they can run
/flow.
Two absences are worth naming rather than leaving to the report's silence, because in both
the layer is off and nothing says so later: a doc_style.enable: false means the prose rule
is written down and enforced nowhere, and wiki-verify.yml is not rendered here at all —
/wiki-init offers it once a wiki exists.
Critical rules
- Install only with consent; never silently — Step 0 detects via
check-deps.sh, then installs pip deps (PyYAML / pre-commit) only after the user approves when asked, adapting the method to the environment. python3 and the superpowers plugin are guided, not installed (OS-level / user-invoked). Never auto-install without asking, and never mutate machine-wide state (git config --global,~-level files). - Idempotent —
flow_init_setup.pyskips existing settings.json hooks and .gitignore lines (match-then-skip); pre-commit config is created-if-absent, else only reported (missing hooks listed, never auto-merged — preserves the team's comments/format); interactive steps confirm before overwrite. - Secrets discipline — webhook URLs stay in the gitignored
.claude/harness-tier/config/.teams-webhooks.local.json; the trackedteams-webhooks.jsoncarries the watched branch names. A branch URL is committed only when the user asks for--shared(worst case channel-message injection by anyone who reads the repo). - Host writes go through
${CLAUDE_PROJECT_DIR}, plugin reads through${CLAUDE_PLUGIN_ROOT}— never write into the plugin directory. - CLAUDE.md edits are a managed block only — touch only the marked
harness-tier:teamsregion; never rewrite or reflow the user's own content.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

