Help us improve
Share bugs, ideas, or general feedback.
From odin
Generates a newcomer orientation tour of any codebase: collects context, deep-reads key files, and guides the next step. Useful when onboarding to an unfamiliar repo.
npx claudepluginhub outlinedriven/odin-claude-plugin --plugin odinHow this skill is triggered — by the user, by Claude, or both
Slash command
/odin:onboardThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Run an `extend` op for a developer entering an unfamiliar repository. Extend their working context with a compact, evidence-backed map: what the project is, where execution starts, what areas are active, which commands are real, and which 2-3 files to read first.
Delivers codebase onboarding via project discovery, architecture walkthrough, key files list, naming conventions, dependency graph, code tour, and summary report. For new team members or orientation.
Analyzes unfamiliar codebases to generate structured onboarding guides with architecture maps, key entry points, conventions, and starter CLAUDE.md.
Generates a developer guide for unfamiliar codebases by scanning structure, mapping architecture, detecting conventions, analyzing key modules, and providing setup instructions.
Share bugs, ideas, or general feedback.
Run an extend op for a developer entering an unfamiliar repository. Extend their working context with a compact, evidence-backed map: what the project is, where execution starts, what areas are active, which commands are real, and which 2-3 files to read first.
The output is not a repo summary dump. It is an orientation artifact followed by an ask decision: explore an area, trace a feature, make a first change, or find where help is useful.
Apply:
NOT:
path: repository root; default current working directory.depth: quick | normal | deep; default normal.Normalize the root path first. Reject nonexistent paths. Preserve the requested depth in the output header.
Depth controls collection cost only; the synthesized orientation always uses the same seven sections.
Collect facts before explaining. Never fabricate a section from filenames alone. Use this native order:
Manifest parse. Inspect root manifests and workspace manifests:
package.json, pnpm-workspace.yaml, lerna.json, turbo.json, nx.json.Cargo.toml, [workspace], crates/*/Cargo.toml.go.mod, go.work, cmd/*, Makefile targets.pyproject.toml, setup.py, requirements*.txt, tox.ini, noxfile.py, libs/*/pyproject.toml, packages/*/pyproject.toml.pom.xml, .mvn/, build.gradle, build.gradle.kts, settings.gradle, settings.gradle.kts.Makefile, CMakeLists.txt, meson.build, configure.ac.Structure walk, max depth 3. Prefer ODIN find; headless equivalent:
fd -d 3 -t d . "$ROOT" -E node_modules -E .git -E dist -E target -E out -E .next -E .nuxt -E __pycache__ -E coverage -E .cache -E vendor.
If fd is absent: find "$ROOT" -maxdepth 3 -type d \( -name node_modules -o -name .git -o -name dist -o -name target -o -name out -o -name .next -o -name .nuxt -o -name __pycache__ -o -name coverage -o -name .cache -o -name vendor \) -prune -o -type d -print.
README and local rules. Read README*, CLAUDE.md, and AGENTS.md, capped at about 5KB each. Follow a one-line README redirect if it points to another Markdown file.
CI and runtime services. Inspect .github/workflows/*.{yml,yaml}, .gitlab-ci.yml, Dockerfile, docker-compose*.yml, Procfile, compose.yaml, and deploy manifests present at the root.
Git info. If git exists, collect branch, remote, commit count, last commit, shallow status, recent owners, and hotspots:
git rev-parse --show-toplevelgit branch --show-currentgit rev-list --count HEADgit log -1 --format='%ci %h %s'git remote get-url origingit shortlog -sn --all -- .git --no-pager log --since='180 days ago' --format='' --name-only -- .Native signals. Prefer codegraph MCP if the repo is indexed:
codegraph_explore("entry points main binaries commands framework configs tests").codegraph_search for main, App, server, cli, route handlers, exported package entry points.codegraph_callees or codegraph_explore naming the entry symbol and likely module names.codegraph_files for package/module boundaries.If no index exists, fallback to AST and text search:
ast-grep -p 'function main($$$) { $$$ }', ast-grep -p 'export default $$$', plus git grep -nE 'createServer|listen\(|commander|yargs|cac\(|vite|next|astro|svelte'.ast-grep -p 'fn main() { $$$ }', git grep -nE '^\[\[bin\]\]|^path\s*=|fn main\('.git grep -nE '^package main$|func main\('.git grep -nE 'if __name__ == .__main__.|console_scripts|click\.command|typer\.Typer|argparse'.git grep -nE 'public static void main|@SpringBootApplication|application.yml|plugins \{|mainClass'.fd '(test|spec|_test)\.(js|jsx|ts|tsx|rs|go|py|java|kt)$' "$ROOT".Whole-repo digest. Use repomix for compressed context:
pack_codebase(directory="$ROOT", compress=true).npx -y repomix "$ROOT" --compress -o /tmp/onboard-repomix.xml.
Use the digest to confirm stack, top-level modules, and naming conventions. Do not paste it into the final response.Use the template in references/orientation.md. Keep the first pass concise; the target is a 2-3 minute read. Sections are ordered and named exactly:
After the orientation, read actual source before claiming architecture.
Read, in priority order:
bin, Cargo [[bin]], Go cmd/*, Python console script, or framework config.If fewer exist, read what exists and state the degradation. Tie the files together with file paths and concrete calls/imports. Avoid "likely" architecture except where labeled [INFERENCE].
Close the first turn with the ask tool. Use one axis, single-select, one Recommended option:
explore_area — Explore an area (Recommended for first-time onboarding): pick a directory/package and read its central exports plus most-imported file.trace_feature — Trace a feature: ask for the feature name, locate its entry point, trace call/import flow, deep-read 2-3 key files.first_change — Make a first change: ask for desired change, map risk using hotspots/owners/tests, identify exact files to inspect before editing.where_help — Where can I help?: combine hotspots, test gaps, stale docs, low-owner areas, and small cleanup candidates into file-level recommendations.If the ask tool is unavailable in the current harness, present the same four options as a numbered prompt and stop after the question.
[INFERENCE] and prefer no command.| Gate | Pass criteria | Blocking |
|---|---|---|
| Root resolved | Existing directory selected; depth is quick/normal/deep | Yes |
| Core collection | Manifest/README/structure/git/CI attempted with degradation noted | Yes |
| Native signals | Codegraph or AST/text fallback used for entry points and conventions | Yes |
| Repomix digest | MCP or CLI repomix attempted; failure recorded without blocking orientation | No |
| Seven sections | All applicable sections emitted in order; empty sections omitted only with reason | Yes |
| Deep read | At least one real source file read; target is 2-3 files | Yes |
| Commands grounded | Getting-started commands trace to manifest/CI/README/Makefile | Yes |
| Interaction | Ends with ask next-step options or numbered fallback prompt | Yes |
Use explicit certainty labels. HIGH means observed by tool output. MEDIUM means multiple independent weak signals. LOW means local inference required. Missing data is reported once at the affected section, not repeated throughout the tour.