From kryptonite
Use when the user wants to add, remove, update, or list repos that kryptonite should track — including phrases like 'add a repo', 'register repo', 'update repo', 'remove repo', 'list repos', 'show repos', 'which repos', 'kryptonite repos', or 'manage repos'. Use also when the user mentions a new codebase they want kryptonite to know about, or when a kryptonite phase needs a repo that isn't registered yet.
How this skill is triggered — by the user, by Claude, or both
Slash command
/kryptonite:reposThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Manage the project-level repo registry at `<skill-path-kryptonite>/data/{PROJECT}/repos.json`. This registry is shared across all epics — define repos once, reference them by name in any story.
Manage the project-level repo registry at <skill-path-kryptonite>/data/{PROJECT}/repos.json. This registry is shared across all epics — define repos once, reference them by name in any story.
In paths below:
<skill-path-kryptonite> = the kryptonite skill directory (sibling to this one — repos data lives there, not here, because the kryptonite skill is what consumes it).{PROJECT} = the active project's 12-char ID (see "Resolving the active project").The on-disk format is defined by <skill-path-kryptonite>/references/repos-schema.json — that schema is the source of truth, including the optional testing block (start_command, app_url, health_check, etc.) that wave-gate agents consume in Phase 12. Validate against it before writing.
Every action below needs a {PROJECT} ID. Resolve it in this order:
git remote get-url origin → SHA-256, first 12 chars. If no remote, hash the absolute repo root path instead.<skill-path-kryptonite>/data/registry.json. If present, use it.cd'd into (rare), list registry.json and ask which one.Don't guess {PROJECT} from directory names — the hash is the only authoritative key.
If the user asks to see repos, read <skill-path-kryptonite>/data/{PROJECT}/repos.json and present them:
Registered repos:
api ~/work/my-api Rails 7, PostgreSQL bin/rails server -p 3000
web ~/work/my-frontend Next.js 14, TypeScript npm run dev
admin ~/work/admin-panel Vue 3, Vite npm run dev -- --port 5173
If repos.json doesn't exist or is empty:
"No repos registered yet. Want to add one?"
When the user wants to add a repo, gather these fields:
name — short identifier (kebab-case, unique). Ask: "What should I call this repo? (short name like 'api', 'web', 'admin')"
path — absolute path to the repo. Ask: "Where is it on disk?"
description — what code it holds. Ask: "What does this repo do? (one sentence)"
stack — language/framework. Try to auto-detect first (see Auto-Detection below). If detected, confirm: "Looks like [detected stack] — correct?"
run — how to start the dev server. Auto-detect from package.json/Procfile/Makefile if possible.
test — how to run tests. Auto-detect if possible.
testing_notes — free-form testing context. Ask: "Any testing notes? (credentials, URLs, how to seed data, API keys, anything agents need to know when testing against this repo)"
conventions — verified repo facts (Phase 7.5 in the kryptonite workflow). Auto-detect by reading the repo:
WORKDIR from Dockerfile or service working_dir in docker-compose.yml. Fallback: ".".name, exact invocation, and config_path. Detect from Gemfile (rspec/minitest), package.json scripts.test (jest/vitest/playwright), pytest.ini/pyproject.toml, go.mod, etc.Show detected values, ask user to confirm or correct. Set verified_at to the current ISO timestamp on save.
After gathering all fields, write to <skill-path-kryptonite>/data/{PROJECT}/repos.json (create the project data directory if it doesn't exist).
When a path is provided, scan it to auto-fill fields:
| File Found | Infer |
|---|---|
package.json | Read scripts.dev or scripts.start for run. Read scripts.test for test. Check dependencies for framework (next, react, vue, svelte, express). For conventions.test_runner: dependency presence determines runner (jest/vitest/playwright/cypress). |
Gemfile | Ruby project. Check for rails → "Rails + Ruby". run: bin/rails server. test: bundle exec rspec or bin/rails test. For conventions.test_runner.backend: rspec if gem 'rspec-rails' present, else minitest. |
go.mod | Go project. run: go run . or check Makefile. test: go test ./... |
Cargo.toml | Rust. run: cargo run. test: cargo test |
requirements.txt / pyproject.toml | Python. Check for Django/Flask/FastAPI. For conventions.test_runner.backend: pytest if pytest listed; else unittest. |
Makefile | Check for dev, run, test targets. |
docker-compose.yml | Note: "Uses Docker Compose" in description. run: docker compose up. For conventions.app_root: read service working_dir. |
Dockerfile | For conventions.app_root: read WORKDIR. |
.env / .env.example | Note port if PORT= is defined. |
| Directory scan | For conventions.directory_layout: walk top-level dirs to verify keys like app/graphql/resolvers/, app/workers/, src/components/, src/locales/. Only record what exists. |
Present detected values and ask user to confirm or adjust.
When the user wants to change a repo's details:
<skill-path-kryptonite>/data/{PROJECT}/repos.jsonWhen the user wants to remove a repo:
repos.json<skill-path-kryptonite>/data/{PROJECT}/repos.json:
{
"repos": [
{
"name": "api",
"path": "~/work/my-api",
"description": "REST API service — handles auth, business logic, database",
"stack": "Rails 7, PostgreSQL, RSpec",
"run": "bin/rails server -p 3000",
"test": "bundle exec rspec",
"testing_notes": "Base URL: http://localhost:3000\nAdmin: [email protected] / password123\nTest user: [email protected] / password123\nSeed: bin/rails db:seed\nStripe test key in .env.test\nOAuth: use test app ID from 1Password vault 'Dev'"
}
]
}
The testing_notes field is free-form text — put whatever the wave gate agents and Coder need to know to test against this repo: credentials, URLs, how to seed data, API keys, external service configs, special env vars, etc. This gets passed to agents when they work on stories in this repo.
If "Resolving the active project" returned no entry for the current directory:
<skill-path-kryptonite>/data/{PROJECT}/.{"repos": []} to <skill-path-kryptonite>/data/{PROJECT}/repos.json.<skill-path-kryptonite>/data/registry.json (entry shape per <skill-path-kryptonite>/references/registry-schema.json — name, path, source, source_type, created_at).Kryptonite performs the same setup when starting a new epic — both skills converge on the same files. If kryptonite already initialized the project, the lookup in step 2 of "Resolving the active project" finds it and you don't create anything.
name via the repo fieldrepos.json during Phase 7 (Technical Guidance)npx claudepluginhub djpate/kryptonite --plugin kryptoniteProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.