setup
Skill7 starsChanged 21 days agoMITView on GitHub
Install the full maruda harness into the current project through a short interview: CLAUDE.md, hooks, .claude/settings.json, rules, and skill wiring. Asks — never auto-detects — the languages (Go / Python / TypeScript / JavaScript) and commands, then writes files only after an approved summary. Use when the user asks to set up / install / bootstrap maruda, the harness, or the continuous improvement cycle. Triggers: セットアップして, ハーネスを入れて, harnessを入れて, marudaを導入して, プロジェクトを初期化して, '/maruda:setup', 'set up the harness', 'install maruda', 'bootstrap this project'.
- Reads credentials
- Deletes or force-pushes
- Installs packages
191 other projects use a version of this.
Adopted by
Most recently taken up by
- hydra-db/hydradb-claude-codetheir own version, first seen Nov 8, 2026
- WALKERKILLER/Look-Tongji-Notestheir own version, first seen Nov 8, 2026
- steerlabs/opensteertheir own version, first seen Nov 8, 2026
- ansvisor/ansvisortheir own version, first seen Nov 8, 2026
- dsifry/metaswarmtheir own version, first seen Nov 8, 2026
- anombyte93/prd-taskmastertheir own version, first seen Nov 8, 2026
Used with
Projects with it also use add-voice-transcription, add-discord and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
juancruzmunozalbeloSkilladd-voice-transcription
Add voice message transcription to NanoClaw using OpenAI's Whisper API. Automatically transcribes WhatsApp voice notes so the agent can read and respond to them.
Also in 5 projects that use this
MicrosoftSkilladd-discord
Add Discord bot channel integration via Chat SDK.
Also in 11 projects that use this
MicrosoftSkilladd-slack
Add Slack channel integration via Chat SDK.
Also in 11 projects that use this
juancruzmunozalbeloSkilladd-telegram-swarm
Add Agent Swarm (Teams) support to Telegram. Each subagent gets its own bot identity in the group. Requires Telegram channel to be set up first (use /add-telegram). Triggers on "agent swarm", "agent teams telegram", "telegram swarm", "bot pool".
Also in 7 projects that use this
- +8 more from microsoft
Other versions191 projects use a version of this.
Word for word · 1
- ymd38/dev-skills★ 7100% same
Edited · 0
None found.
Wrote their own version · 190
- anthropics/knowledge-work-plugins★ 35ksame name
- garrytan/gbrain★ 32ksame name
- gavrielc/nanoclaw★ 31ksame name
- nanocoai/nanoclaw★ 31ksame name
- qwibitai/nanoclaw★ 31ksame name
- Q00/ouroboros★ 6.3ksame name
- pytorch/executorch★ 5.2ksame name
- agenticnotetaking/arscontexta★ 3.5ksame name
- aws/agent-toolkit-for-aws★ 3.4ksame name
- spotify/portal-ai-plugins★ 2.8ksame name
180 more not listed
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 repository13 other files it gives its agents.
- data-validationSkill
- dependency-auditSkill
- gh-batch-runnerSkill
- gh-issue-drafterSkill
- gh-issue-plannerSkill
- gh-issue-resolverSkill
- progress-dashboardSkill
- report-to-issuesSkill
- rule-proposerSkill
- sakuda-triageSkill
- software-evaluationSkill
- spec-docSkill
- vulnerability-scanSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. 0 are common, 8 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 169 edited versions we read keep these.
8
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 22
Interview, no auto-detection: Do NOT infer languages from go.mod, package.json, etc., even when they exist.
- Distinctive: line 30
Write files only after the user approves the Phase 4 summary.
- Distinctive: line 34
Ask one phase at a time and wait for answers.
- Distinctive: line 40
When a structured question tool (e.g.
- Distinctive: line 54
If the tool is unavailable or returns an error, fall back to asking the same questions as plain chat text and wait for the answers — never …
- Very specific: line 61
Check existence (existence only — do not read to guess the stack) of: CLAUDE.md, .claude/settings.json, .claude/hooks/, …
- Distinctive: line 92
Ask for the primary language in full.
- Very specific: line 109
If uv, ask: "Enable a hook that blocks pip install in favor of uv add?" (Y/n).
- Very specific: line 165
When maruda runs as a plugin, CLAUDE_PLUGIN_ROOT is set in the shell, the whole repository is in the plugin cache, and the script keeps its …
- Very specific: line 240
NOT CONFIGURED, treat setup as incomplete and either re-run with --protect (needs gh auth + admin + a pushed default branch) or walk the …
- Very specific: line 249
PR Agent secret: If --pr-agent was applied, the PR Agent workflow fails on every PR until the OPENAI_KEY repository secret exists.
- Distinctive: line 267
No scheduled loops or cron (L4) — separate task only.
- Distinctive: line 269
No Semgrep / gh installation — mention prerequisites, don't install.
- Distinctive: line 270
No rewriting of existing architecture docs or unrelated refactors.
“Common” is measured: kept by at least 6 in 10 of the 169 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
maruda Full Harness Setup (Interview Mode)
Goal
Turn the current repository into a project that runs the Diagnose → Register/Draft → Plan → Resolve ⇄ Verify cycle with mechanical guardrails (hooks) and a lean CLAUDE.md.
Skills alone are L1. This setup adds L2–L3: a short project brain (CLAUDE.md), hard rails (hooks + settings), and cycle guidance (rules). It never creates scheduled or cron-driven automation (L4); event-driven GitHub Actions — strict CI and the opt-in PR Agent review — are L2–L3 and in scope.
Principles
- Interview, no auto-detection. Do NOT infer languages from
go.mod,package.json, etc., even when they exist. This setup targets pre-development projects where detection misleads. File existence is used only for overwrite/merge prompts. - Never overwrite existing CLAUDE.md / settings / hooks without explicit per-file approval. Prefer merge (append missing sections).
- Hooks enforce hard rules; CLAUDE.md holds soft guidance. Keep
CLAUDE.md short — detail lives in skills and
.claude/rules/. - Write files only after the user approves the Phase 4 summary.
Workflow
Ask one phase at a time and wait for answers. If the user says "use defaults", still require the primary language choice, then apply the defaults table below to everything else.
How to ask (question-tool contract)
When a structured question tool (e.g. AskUserQuestion) is available, use one call per phase, and keep every call within the tool's contract — violating it aborts the turn with "Invalid tool parameters":
- At most 4 questions per call; every question needs 2–4 predefined options — never an empty or single-option list. A free-text "Other" choice is provided by the tool automatically; rely on it for custom values instead of inventing an "enter manually" option list.
- Free-form items (project name, custom commands) must still offer 2+
options: make option 1 the recommended default (e.g. "Use directory name:
<dir> (Recommended)") and a sensible alternative; custom values arrive via the built-in Other. - Multi-choice items (additional languages, components) use the tool's multi-select mode.
- If the tool is unavailable or returns an error, fall back to asking the same questions as plain chat text and wait for the answers — never skip a phase because the tool failed.
Phase 0 — Preconditions
- Confirm the target is a git repository (offer
git initif not). - Check existence (existence only — do not read to guess the stack) of:
CLAUDE.md,.claude/settings.json,.claude/hooks/,.claude/rules/maruda-cycle.md,.claude/skills/. - Tell the user: existing files will each get an overwrite/merge/skip question in Phase 3.
Phase 1 — Project skeleton (required)
- Q1. Project name — options: "Use directory name:
<dir>(Recommended)" / "Use repository name" (custom names come via Other). - Q2. Primary language (choose exactly one): Go / Python / TypeScript / JavaScript.
- Q3. Additional languages (multi-select) — none, or any others from the same list.
- Q4. Default branch — options:
main(Recommended) /master(anything else via Other).
Phase 1b — Flow (second call; Phase 1 is already at the 4-question limit)
- Q5. Integration branch — the branch PRs target and CI gates. Options:
"Same as the default branch:
<branch>(Recommended)" /staging(anything else via Other). It is recorded in CLAUDE.md, not detected. - Q6. Default flow when several Issues run at once — options:
individual(Recommended — one PR per Issue) /batch(collect them onepic/<n>-<slug>, verify as a whole, one PR) /stack(each PR targets the branch of the Issue it depends on). This is only the default: whether Issues are batched is decided by asking "do these ship together?", never by the dependency graph.
Phase 2 — Per-language commands
Ask for the primary language in full; for additional languages a quick confirm of the defaults is enough. Propose these defaults:
| Language | Install | Test | Lint | Format (hook) |
| Go | go mod download | go test ./... | golangci-lint run (fallback go vet ./...) | goimports (fallback gofmt) |
| Python (uv) | uv sync | uv run pytest | uv run ruff check | uv run ruff format |
| Python (pip) | pip install -e . | pytest | ruff check | ruff format |
| Python (poetry) | poetry install | poetry run pytest | poetry run ruff check | poetry run ruff format |
| TypeScript | {pm} install | {pm} test | {pm} run lint | Prettier |
| JavaScript | {pm} install | {pm} test | {pm} run lint | Prettier |
- Node projects: ask the package manager first (pnpm / npm / yarn / bun;
propose pnpm), then substitute
{pm}. - TypeScript only: also ask about typecheck (
{pm} exec tsc --noEmit/ a script name / none). - Python only: ask the package manager (uv / pip / poetry; propose uv).
If uv, ask: "Enable a hook that blocks
pip installin favor ofuv add?" (Y/n).
Phase 3 — Harness scope
- Q-H1. Components (multi-select, every entry recommended ON by default):
CLAUDE.md /
format hook / bash-guard hook / SessionStart + Stop guidance hooks /
.claude/rules/(cycle contract + score-aligned coding principles + per-language rules for the chosen languages) / GitHub Actions CI (ci.ymlper language +security-scan.yml+.gitleaks.toml+.semgrepignore; gitleaks and semgrep are hard gates from day one — shift-left — while trivy starts as informationalcontinue-on-error) / .env guard (.gitignoreentries +.env.example). - Q-H1b. Optional paid add-on (default OFF; independent of the CI
answer — it composes with a project's existing CI): PR Agent
(
.github/workflows/pr-agent.yml+.pr_agent.toml; advisory qodo-ai/pr-agent review — describe / review / improve when a PR opens,/reviewon each push, slash commands for repository members). Needs anOPENAI_KEYrepository secret and API billing; it is advice, never a required status check. Q-H1c. How the skills get installed (single choice, propose plugin):
- plugin — the Claude Code plugin. Commands are namespaced
(
/maruda:spec-doc), and the skills always match thesetup.shthat installed the harness. Maps to--plugin(add--plugin-ref <tag>when the user wants a pinned release rather thanmain). Say plainly that Claude Code does not auto-install from settings:--pluginrecords the marketplace and marks the plugin enabled, and each person still runs/plugin install maruda@northraystudioonce. - npx —
npx skills add northraystudio/maruda --skill '*' --agent claude-code -y --copy. Works with agents other than Claude Code; commands have no namespace (/spec-doc), so they can collide with other skill collections. Maps to--with-skills. - neither — the user installs skills themselves. No flag.
--pluginand--with-skillsare two ways to install the same skills, so the installer rejects them together. If the project already has.claude/skills/yds-*from an older install, say that those directories are now stale and should be deleted — the plugin ships the same skills under their new names, and leaving both registers each skill twice.- plugin — the Claude Code plugin. Commands are namespaced
(
- Q-H2. Per existing file: merge (append only the missing sections) / back up then replace / skip.
- Q-H3. Bash guard strength: standard (rm -rf /, force-push to the
default branch, redirects into
.env) / standard + pip guard (uv projects) / none.
Phase 4 — Confirm, then apply
Show a summary of every answer and every file that will be created or modified. Wait for explicit approval. On approval, apply as follows.
Preferred path — run the installer, then refine:
Locate
harness/scripts/setup.sh, in this order — the first hit wins:- this skill's own plugin copy,
"${CLAUDE_PLUGIN_ROOT}/harness/scripts/setup.sh". When maruda runs as a plugin,CLAUDE_PLUGIN_ROOTis set in the shell, the whole repository is in the plugin cache, and the script keeps its executable bit. Prefer it: the installer is then guaranteed to be the same version as the skills running the interview. Check with[[ -n "${CLAUDE_PLUGIN_ROOT:-}" && -f "${CLAUDE_PLUGIN_ROOT}/harness/scripts/setup.sh" ]]. - the working repository, if it is maruda or contains a clone/submodule
(
harness/scripts/setup.sh,.claude/maruda/harness/scripts/setup.sh). the network, via the official one-liner. Pin a release tag rather than
mainso the installer matches a known version (network required):curl -fsSL https://raw.githubusercontent.com/northraystudio/maruda/main/harness/scripts/install.sh \ | bash -s -- --langs <langs> --pm <pm> --python-pm <py-pm> --branch <branch> --name <name> \ [--integration-branch <branch>] [--default-flow <individual|batch|stack>] \ [--guard-pip] [--with-skills] [--pr-agent]
Map EVERY Phase 1b / Phase 3 answer to a flag — the applied changes must equal the approved summary exactly: languages (primary first) →
--langs, Node PM →--pm, Python PM →--python-pm, pip guard →--guard-pip, integration branch →--integration-branch(omit when it equals the default branch), default flow →--default-flow, skill install method →--plugin(+--plugin-ref) or--with-skillsor neither, CI OFF →--no-ci, format hook OFF →--no-format-hook, bash guard OFF →--no-bash-guard, guidance hooks OFF →--no-guidance-hooks, rules OFF →--no-rules, .env guard OFF →--no-env-guard, PR Agent ON →--pr-agent(allowed with--no-ci, never with--minimal). If the user wants branch protection applied andghis authenticated with admin rights, add--protect. The installer never overwrites existing files, which is exactly the merge-safe behavior wanted here.- this skill's own plugin copy,
- Then reconcile whatever the installer reported as "kept existing" or
"proposed" against the user's Phase 3 answers:
- The installer never overwrites: files that differ from the incoming
version are written as
<file>.new. For each one, show the user the diff and offer to merge it (or discard the.new) — apply only what they approve, then delete the.newfile. - CLAUDE.md kept + user chose merge → append only the missing
sections (Stack & commands for the chosen languages, the cycle
section, Hard rules), following
harness/templates/CLAUDE.md.template. - settings kept unmerged (no jq) → merge the
hooksblock by hand, preserving every existing user hook. - Any file the user chose to skip → leave untouched even if the installer would have created it (delete nothing; just don't add).
- The installer never overwrites: files that differ from the incoming
version are written as
- Adjust generated CLAUDE.md commands to any non-default answers from Phase 2 (e.g. a custom test script name).
Fallback (no network, no local copy): report that the harness templates are unavailable and stop after writing only what can be written faithfully from this document — do not improvise hook scripts from memory.
Phase 5 — Verify and report
Print a final checklist:
[maruda harness]
skills: OK (N) / MISSING
CLAUDE.md: CREATED / MERGED / SKIPPED
hooks: OK (selected scripts, executable)
settings: OK / MERGED / needs manual merge
rules: OK / skipped
CI: OK / skipped
flow: integration branch: <branch> | default: <individual|batch|stack>
protection: configured / NOT CONFIGURED / applied
pr-agent: disabled / written (OPENAI_KEY secret required)
next: restart Claude Code to load hooks, then try /maruda:software-evaluation .Two follow-ups matter for the gates to actually gate:
- Branch protection. A CI check only blocks merges once it is a
required status check. The installer reports the state; if it says
NOT CONFIGURED, treat setup as incomplete and either re-run with
--protect(needsghauth + admin + a pushed default branch) or walk the user through GitHub settings. Do not report overall success while protection is unconfigured — report it as an explicit remaining step. - Strict CI. The generated jobs intentionally fail when lint / typecheck / test scripts (or any tests) are missing. Tell the user the first code PR must land with those in place — that is the shift-left contract, not a bug.
- PR Agent secret. If
--pr-agentwas applied, thePR Agentworkflow fails on every PR until theOPENAI_KEYrepository secret exists. Report it as an explicit remaining step; it is advisory and must never be added to required status checks.
Remind the user that hooks load at session start — a restart (or new session) is needed before the guard/format hooks take effect.
Stop conditions
- User declines the Phase 4 summary → stop after reporting what would have changed. Write nothing.
- User declines an overwrite → keep the file, note it in the checklist.
- Unknown/other language requested → set up the supported languages,
leave a
# TODOstack block for the rest, and say so.
Non-goals
- No scheduled loops or cron (L4) — separate task only. Event-driven GitHub Actions (CI, PR Agent) are in scope.
- No Semgrep / gh installation — mention prerequisites, don't install.
- No rewriting of existing architecture docs or unrelated refactors.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
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.

