project-adopt
Skill2 starsChanged 10 days agoMITView on GitHub
Bring an existing repository (brownfield) under the Keelokit harness without touching its code — installs only .keelokit/, maps each house rule to the checks the repo already has, registers what it can't meet yet as dated exceptions, builds docs/context from what exists, and seeds a backlog from a diagnosis of the real code. Use when the user says "adoptá este repo", "sumá keelokit a este proyecto", "proyecto existente", "brownfield", "aplicá el harness acá", "adopt", or when /keelokit runs in a repo without .keelokit/.
4 other projects use a version of this.
Adopted by
Most recently taken up by
- DPatta/project-docs-kittheir own version, first seen Nov 1, 2026
- gabrielbchacon/ai-dev-bootstraptheir own version, first seen Oct 20, 2026
- jrittelmeyer/ai-dev-kittheir own version, first seen Oct 15, 2026
- ecodelearn/template-claude-code-opentheir own version, first seen May 7, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- ecodelearn/template-claude-code-open★ 25same name
- DPatta/project-docs-kit★ 1same name
- jrittelmeyer/ai-dev-kit★ 1same name
- gabrielbchacon/ai-dev-bootstrap★ 0same 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 repository18 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .claude/CLAUDE.mdCLAUDE.md
- template/CLAUDE.mdCLAUDE.md
- build-storySkill
- check-bugbashSkill
- check-healthSkill
- check-securitySkill
- coordinateSkill
- harness-upgradeSkill
- keelokitSkill
- plan-backlogSkill
- plan-intakeSkill
- project-dashboardSkill
- project-newSkill
- project-reportSkill
- run-localSkill
- ship-releaseSkill
- ship-setupSkill
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 3 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 31
Read, don't run: README, manifests (package.json, workspace files, lockfile type), CI workflows (job names), git hooks (.githooks, .husky, …
- Very specific: line 70
If the profile has the mobile trait, detect how the app launches locally: run /keelokit:run-local, which shows what …
- Very specific: line 79
Run /keelokit:plan-intake.
- Distinctive: line 81
Only then ask the delta.
- Very specific: line 85
Run the doctor. Rules whose needs the profile doesn't have are listed as not applicable — they are not exceptions and need nothing.
- Distinctive: line 99
add the check now (small, safe changes: a lint rule, a CI step running the doctor) — only with the user's yes, and in its own commit.
- Distinctive: line 103
Never register an exception the user hasn't approved.
- Very specific: line 124
Write docs/diagnosis.md: what the code verifiably does today (with file:line evidence), the debt behind each exception, drift between docs …
“Common” is measured: kept by at least 6 in 10 of the 4 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
Adopt — the harness on an existing repo, green on day one, debt in plain sight
The code is never modified by this skill without the user's yes. The goal is an honest
python3 .keelokit/bin/doctor.py: every house rule either enforced by a real
check, or excepted with a reason, an approver and a date.
| Gate | Output | Human |
| intake | docs/context/ built from what exists | approves the context |
| adopt | .keelokit/ installed, rules mapped, exceptions registered, doctor passing | approves each exception |
| backlog | diagnosis + stories to pay the debt and continue the product | approves the order |
Record each approval in .keelokit/state.toml under [gates] as <gate> = "<YYYY-MM-DD>".
Set [dashboard] lang to the user's language, and refresh the dashboard (/keelokit:project-dashboard)
when a gate's output is ready and after each approval. Never ask for an approval without showing
what it covers: the link to its section and, in the chat, the list itself (each exception with
reason and expiry; the waves and their stories). Explain terms of art in one plain sentence the
first time they come up.
Settle the run decisions once, as project-new's step 0 does, and record them in [run]. In
automatic mode the intake and backlog gates can be approved automatically ("<date> auto"), but
the adopt gate never is: every exception needs the user's own yes.
1. Survey (read-only)
Read, don't run: README, manifests (package.json, workspace files, lockfile type), CI
workflows (job names), git hooks (.githooks, .husky, core.hooksPath), lint/format/ts
configs, test setup, Dockerfile/deploy configs, ADRs and any existing requirements or context
docs. Summarise in ten lines: stack vs the house stack, commands, CI jobs, hooks, tests, docs.
Then diagnose what the project is — from the code, not from habit. A Claude Code plugin, a
library or a CLI has no hosting, no database and no screens; a SaaS has all three. Decide the
kind and the traits (vocabulary in the file's header: typescript, ui, web, mobile,
site, api, database, hosted, i18n, personal-data, payments, developer-facing),
each with its evidence, and show them to the user to confirm. After step 2 creates .keelokit/,
write them in .keelokit/profile.toml:
kind = "plugin"
traits = ["developer-facing"] # no ui, no database, no hosting: rules that need them don't apply
[detected]
stack = ["Python 3.11", "Markdown skills", "Copier template"]
tests = ["unittest"]
ci = ["GitHub Actions: tests, template generation"]
hosting = []
[evidence]
hosted = "no deploy config; distributed through the Claude plugin directory"The profile decides which house rules apply (their needs), which bug-bash lenses run, and what
the dashboard shows. Never create folders or apps the profile doesn't call for.
Environments found (URLs, who deploys, how) go in docs/context/environments.md; if the repo
already deploys, /keelokit:ship-setup can turn that into a verified checklist.
2. Install the harness layer
uvx copier==9.18.2 copy --defaults --vcs-ref v<version> --data mode=harness \
--data project_name="<name>" --data description="<one sentence>" "${KEELOKIT_TEMPLATE:-gh:leosimini/keelokit}" .(<version> from ${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json.) This writes only
.keelokit/. Confirm with git status that nothing outside .keelokit/ changed. From now on the
plugin's guard hook is active in this repo.
If the profile has the mobile trait, detect how the app launches locally: run
/keelokit:run-local, which shows what .keelokit/bin/run-local.sh detect found (where the Expo
app, the package manager, the API and the database are), asks only about what it isn't sure of,
and with the user's yes writes the [local] block in .keelokit/profile.toml. It also asks
before creating .local-dev/ and adding it to .gitignore: that is the one thing outside
.keelokit/ it touches, and only with a yes. No mobile trait: skip this.
3. Intake from what exists
Run /keelokit:plan-intake. Harvest first: existing briefs, requirement docs, context packs, ADRs and
the code itself are the sources; facts derived from code are inferred until the user confirms.
Only then ask the delta.
4. Map the house rules
Run the doctor. Rules whose needs the profile doesn't have are listed as not applicable — they
are not exceptions and need nothing. For each rule it reports:
- The repo already enforces it under another name (a CI job, a test, a lint rule, a hook) →
add a local entry with the house rule's id and only
enforced_byin.keelokit/rules.local.toml:
The mapped check must enforce the rule as written. If it only covers part of it (e.g. CI runs the gates but nothing runs them before a push), map what exists and also propose an exception for the missing part.[[rule]] id = "SEC-1" enforced_by = ["ci:gitleaks", "hook:guard.py"] - Nothing enforces it → propose, per rule, one of:
- add the check now (small, safe changes: a lint rule, a CI step running the doctor) — only with the user's yes, and in its own commit;
- an exception in
.keelokit/exceptions.tomlwith reason, approver (the user) and an expiry date, plus a backlog story that removes it. Never register an exception the user hasn't approved; never map a rule to a check that doesn't really enforce it just to go green.
- Rule doesn't apply (e.g. no API) → it is already skipped by its
when; nothing to do.
Critical areas start empty in an adopted repo (.keelokit/critical.toml). During the diagnosis,
propose the areas where the code moves money, sends things, enforces limits or holds other
people's data, and the invariants they keep (domain.md). MUT-1 maps to the repo's own mutation
tool if it has one (Stryker, mutmut, PIT); otherwise it is an exception with a date, and a story
to add scripts/mutation.sh (Keelokit's version runs any package test script under Stryker).
Stack differences from the house stack: one docs/decisions/0001-existing-stack.md
(Status, Context, Decision, Consequences) — the repo keeps its stack; the decision makes it
explicit. Don't propose migrations unless the user asks.
Also propose (don't impose): calling python3 .keelokit/bin/guard.py git-pre-commit from the
repo's pre-commit hook, and a doctor step in CI. Each is a code change → ask first. Until the
git hook exists, rules enforced by git-hook:pre-commit show as not enforced for humans — that
is accurate, not a bug: map them to what the repo has, or except them with a date.
5. Diagnose and seed the backlog
Write docs/diagnosis.md: what the code verifiably does today (with file:line evidence), the
debt behind each exception, drift between docs and code, and risks. Then run /keelokit:plan-backlog
with two kinds of stories: one per exception (to remove it before its expiry) and the product's
next slice. Stories already delivered (their ids in git history) are never renumbered.
Close
Report: rules enforced / mapped / excepted (with expiry dates), open gaps by owner, the decision about the stack, and the first ready stories.
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.

