setup
Skill0 starsChanged 4 months agoMITView on GitHub
Groundwork configuration for this repository - issue tracker, docs location, triage labels, and rules file. Optional - every other skill bootstraps defaults on first use; run this to customize or reconfigure them.
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 · 0
None found.
Edited · 0
None found.
Wrote their own version · 191
- 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
181 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 repository18 other files it gives its agents.
- brainstormSkill
- buildSkill
- code-reviewSkill
- howSkill
- improve-codebase-architectureSkill
- inceptionSkill
- interview-loopSkill
- quickSkill
- recallSkill
- surveySkill
- tddSkill
- to-issuesSkill
- to-prdSkill
- triageSkill
- validateSkill
- verifySkill
- whySkill
- worktreeSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 3 are distinctive, and 7 are very specific to this project.
0
Common
Most of the 171 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 13
When any groundwork skill finds no docs/groundwork/config.json, it bootstraps one instead of stopping:
- Very specific: line 18
Write config.json in the shape step 4 defines, and seed glossary.md per step 5.
- Very specific: line 23
Look for docs/groundwork/config.json (or the configured docs_dir if you already know it moved).
- Very specific: line 28
If they just want to confirm it's already set up and project_type/detected_stack are consistent, say so and stop.
- Distinctive: line 30
If it does not exist, continue.
- Distinctive: line 46
Ask about each of these in turn.
- Very specific: line 53
Docs location: Default docs/groundwork/. Accept an override, but keep it a single directory - the whole layout in this skill assumes one …
- Very specific: line 109
If it doesn't already exist, create docs/groundwork/glossary.md from the templates/glossary.md file bundled with this skill.
- Distinctive: line 111
Leave it mostly empty; other skills fill it in as work happens.
- Very specific: line 126
Never re-run this interview automatically.
“Common” is measured: kept by at least 6 in 10 of the 171 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
groundwork:setup
Configure groundwork for this repository. The output is docs/groundwork/config.json. Every other groundwork orchestrator reads that file instead of interviewing the user again. Running this skill is optional: any skill that finds no config bootstraps one with detected defaults (see "Lazy bootstrap" below) - this interview exists to customize or correct those defaults, not to gate the rest of groundwork.
Lazy bootstrap (used by every other skill)
When any groundwork skill finds no docs/groundwork/config.json, it bootstraps one instead of stopping:
- Detect the tracker:
githubif the repo has a GitHub remote andgh auth statussucceeds, otherwiselocal. Never assumelinear- it needs details only the user can give. - Detect implementation status using the same signal heuristics step 2 below describes (strong vs supporting signals), but non-interactively: a strong signal present ->
project_type: "existing"plus adetected_stackof what was actually found; otherwise"greenfield", no stack. Skip step 2's show-and-correct loop - the bootstrap records what it detects and moves on; corrections happen through an explicitsetuprun. - Take every other default:
docs_dirdocs/groundwork,triage_labels[],triage_role_labels{},rules_fileclaude. - Write
config.jsonin the shape step 4 defines, and seedglossary.mdper step 5. Skip the rules file - that's an explicit-setup nicety, not a bootstrap need. - Tell the user in one line what was assumed, and that
setupchanges any of it. Then continue with the original task - don't derail into this interview.
1. Check for an existing config
Look for docs/groundwork/config.json (or the configured docs_dir if you already know it moved). If it exists:
- Show the user the current settings.
- If
project_typeis missing, or it's"existing"withdetected_stackmissing or empty, that's an incomplete or backfill-needed state either way - don't just confirm and stop. Tell the user what's missing, then run step 2 below to detect it and step 4 to write it back into the existing config, leaving every other field untouched. This backfill doesn't need the full reconfigure interview. - Otherwise, ask whether they want to reconfigure, and if so, which fields (tracker, docs location, triage labels, rules file). Do not re-run the full interview blind.
- If they just want to confirm it's already set up and
project_type/detected_stackare consistent, say so and stop.
If it does not exist, continue.
2. Detect implementation status
Inspect the repository for signs of an existing implementation. Weigh signals by strength - a Dockerfile or CI config alone can exist in an otherwise-empty scaffold (this plugin's own repo has both), so don't let those count on their own:
- Strong signals (any one of these is enough by itself): a package manifest (
package.json,pyproject.toml,go.mod,Gemfile,pom.xml, etc.), a lockfile, or a real source directory with actual application code beyond scaffolding. - Supporting signals only (never sufficient alone, but corroborate a strong signal): a Dockerfile, CI config, framework-specific config files with no accompanying source.
- Existing implementation: at least one strong signal is present. Record what you actually found - language, framework/runtime, package manager, notable infra config - as plain observed facts. Do not infer or invent anything not visible in the repo, and do not fill gaps with a best guess.
- Greenfield: no strong signal (empty, docs-only, or just scaffolding - even if a Dockerfile or CI config exists, like this plugin's own repo). Record that plainly. No stack exists yet and none should be decided here - choosing one is
survey's job, once a feature is being interrogated, notsetup's.
Show the user what was detected (or that nothing was found) and let them correct it before writing config. Either way, setup only records what's true today - it never makes or implies an architectural decision.
3. Ask, one topic at a time
Ask about each of these in turn. Do not batch them into a single wall-of-text question; this is a one-time setup, not a full survey, but each choice deserves its own moment.
Issue tracker. Where should to-issues create work items?
github: usesgh issue create. Checkgh auth statusand that the current directory is inside a repo with a GitHub remote; tell the user plainly if either check fails, rather than silently falling back.linear: uses the Linear MCP tools if connected, otherwise the user provides team/workspace details as plain config (never store API keys or secrets inconfig.json- if a key is needed, tell the user to set it up via their own Linear MCP connection or environment, and only record the team/workspace identifier here).local: no external tracker. Work items are appended to each feature'stasks.md.
Docs location. Default docs/groundwork/. Accept an override, but keep it a single directory - the whole layout in this skill assumes one root.
Triage labels. Optional. Only meaningful for github/linear. A short list of labels to-issues applies to every issue it creates (e.g. groundwork) - pick something that doesn't collide with whatever label string triage ends up using for any of its five state roles (their canonical names by default, or this repo's own mapping if you set one via triage_role_labels below), or its issues will be indistinguishable from ones still awaiting triage. Skip for local.
Triage role labels. Optional, and a separate thing from the list above - only ask if the user says they'll use triage, and only meaningful for github/linear (skip for local, same as the config above). triage moves an issue through five canonical state roles (needs-triage, needs-info, ready-for-agent, ready-for-human, wontfix) and needs to know the actual label string for each one - triage_role_labels covers only these five; the bug/enhancement category roles are fixed and not configurable here. Default: each state role's label equals its name. Ask if any should map to a different existing label in this repo's tracker (e.g. role needs-triage -> label bug:triage); only record the ones that differ.
Rules file. Where repo-level rules live:
claude(default): groundwork writesCLAUDE.mdat the repo root. Right choice for a Claude-only repo.agents: for a multi-tool repo (Cursor, Codex, Copilot, etc. also read this repo). groundwork writesAGENTS.mdas the portable source of truth, plus a thinCLAUDE.mdwhose body is@AGENTS.mdand nothing else except any Claude-specific overrides. Never duplicate rule content across the two files - if a rule applies to every tool, it lives only inAGENTS.md.
4. Write the config
If docs/groundwork/config.json doesn't exist yet, create the docs directory and write it fresh with every field below. If it already exists (a reconfigure, or the backfill from step 1), update it in place: merge only the fields that changed - the ones the user just answered, or project_type/detected_stack on a backfill - and leave every other existing field exactly as it was. Never regenerate the whole file from this template over an existing config; that's how a backfill run would silently clobber someone's tracker, docs_dir, triage_labels, or rules_file.
Full shape of the file:
{
"version": 1,
"tracker": "github",
"docs_dir": "docs/groundwork",
"triage_labels": [],
"triage_role_labels": {},
"rules_file": "claude",
"project_type": "existing",
"detected_stack": {
"language": "...",
"framework": "...",
"package_manager": "...",
"notes": "..."
}
}Adjust fields to what was chosen. For tracker: "github", you may add a "github": {"repo": "owner/name"} block detected from the remote. For tracker: "linear", add "linear": {"team": "..."} if the user gave one. triage_role_labels only needs entries for roles whose label differs from its own name - leave it {} if none do. Never write secrets into this file.
One more optional block, verify, records where this repository's verification CLI and its evidence directory live, with both paths relative to docs_dir:
"verify": { "cli": "verify/control", "evidence_dir": "verify/evidence" }A second optional block, judges, names the tier the judging workers run on:
"judges": { "model": "opus" }The point is that a judge must not run on the same tier as the work it judges - a reviewer and its arbiter at the same tier is the arrangement the arbiter exists to break. Ask for it only if the user brings it up; where it is absent, the judge agents' own default applies.
Do not write the verify block here. The verify skill writes it when verify --init builds the CLI, because the paths are only true once that exists. Its absence is the signal that this repository has no verification yet: build and validate say so once and carry on rather than blocking.
Set project_type to "existing" or "greenfield" per step 2. Only include detected_stack for "existing" - populate it with what was actually found, nothing invented. For "greenfield", omit detected_stack entirely (or leave it null); the stack gets decided later, in survey, and recorded as ADRs, not here.
5. Seed the docs
If it doesn't already exist, create docs/groundwork/glossary.md from the templates/glossary.md file bundled with this skill.
Leave it mostly empty; other skills fill it in as work happens. Do not translate or rewrite the template headers - later skills add content in whatever language the conversation is in, not a language baked in here.
6. Write the rules file
rules_file: "claude": ifCLAUDE.mdalready exists at the repo root, leave its content alone and just confirm it's there. If it doesn't exist, create a minimal one that documents that this repo uses groundwork and points atdocs/groundwork/.rules_file: "agents": createAGENTS.mdat the repo root if it doesn't exist (minimal, same content as above). Create or updateCLAUDE.mdso its body is exactly@AGENTS.mdplus, only if needed, a short "Claude-specific" section below it. IfCLAUDE.mdalready has unrelated content, ask before overwriting it rather than clobbering the user's existing rules.
7. Confirm and hand off
Tell the user what was created. Suggest a next step based on where they are:
- Have an idea but no plan yet ->
brainstorm - Already talked through a plan in this conversation ->
to-prd - Have inbound issues already sitting in the tracker ->
triage - Just want setup done for now -> stop here.
Never re-run this interview automatically. When another groundwork skill can't find docs/groundwork/config.json, it follows the Lazy bootstrap above rather than running this interview or asking the same questions inline.
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.

