configs/claude-code/skills/familiarize/SKILL.md
Orient in a new or unfamiliar repo using Serena LSP symbol analysis with bash fallback.
npx skillsauth add jimweller/dotfiles familiarizeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
STARTER_CHARACTER = 🗺️
No source code writes. No agents. List files and symbols read when done.
$ARGUMENTS
PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
If $ARGUMENTS is provided, treat it as a subdirectory: SCAN_ROOT=$PROJECT_ROOT/$ARGUMENTS. If the path does not exist, report it and stop.
If $ARGUMENTS is empty, SCAN_ROOT=$PROJECT_ROOT.
State the scan root before proceeding.
Call mcp__serena__check_onboarding_performed.
SERENA=false and skip to Step 3.SERENA=true.mcp__serena__onboarding and follow its returned instructions to explore the project and write memory files.SERENA=false and continue.After onboarding completes or is skipped, proceed immediately to Step 2b. Do not continue exploring or writing memories beyond what the onboarding instructions request.
If SERENA=true, call mcp__serena__list_memories. If memories exist, read each one with mcp__serena__read_memory. These provide prior context about the project.
State whether Serena is active and how many memories were loaded before proceeding.
Find all CLAUDE.md files under SCAN_ROOT (exclude .git/ paths). Read each one.
find "$SCAN_ROOT" -name "CLAUDE.md" -not -path "*/.git/*" -not -path "*/node_modules/*"
Find all .llmdocs/ directories under SCAN_ROOT. For each, read every .md file.
find "$SCAN_ROOT" -type d -name ".llmdocs" -not -path "*/.git/*"
Then for each directory found:
ls "$LLMDOCS_DIR"/*.md
Read each matching file.
Skip silently if not found.
git log --oneline -20
Check for and read each of these files if they exist at SCAN_ROOT. Skip any that do not exist without comment.
.envrc.env.example.gitignore.gitattributespackage.jsonpyproject.tomlCargo.tomlgo.modGemfilerequirements.txtpom.xmlbuild.gradleMakefileTaskfile.ymljustfileRakefileDockerfile (and variants like Dockerfile.*)docker-compose*.ymlterraform/*.tfserverless.ymlsam-template.yaml.github/workflows/*.yml.gitlab-ci.ymlJenkinsfile.circleci/config.ymlREADME.md at scan rootDepth 3, excluding noise directories:
find "$SCAN_ROOT" -maxdepth 3 \
-not -path "*/.git/*" \
-not -path "*/node_modules/*" \
-not -path "*/__pycache__/*" \
-not -path "*/vendor/*" \
-not -path "*/.terraform/*" \
-not -path "*/.venv/*" \
-not -path "*/venv/*" \
-not -path "*/dist/*" \
-not -path "*/build/*" \
-not -path "*/.next/*" \
-not -path "*/target/*" \
| sort
Identify entry point files under SCAN_ROOT by filename pattern:
main.*, index.*, app.*, cli.*__main__.pycmd/*/main.gosrc/lib.rs, src/main.rsserver.*, handler.*Collect up to 5 matches. Prefer files closer to the scan root.
If SERENA=true: run mcp__serena__get_symbols_overview with depth: 2 on each match. This returns top-level symbols and their children (methods, attributes, nested types). If a file returns symbols, record them and skip the bash fallback for that file. Then pick the 1-2 most important entry functions (e.g., main, run, createApp, setup) and call mcp__serena__find_symbol with include_body: true to read their implementation. This reveals initialization order, dependency wiring, and startup flow.
If SERENA=false or Serena returned empty/error for a file: read the first 80 lines of that file.
Skip this step if SERENA=false.
Use mcp__serena__find_symbol to locate common architectural symbols. Scope each search to SCAN_ROOT via the relative_path parameter. Use include_body: false and depth: 1.
Search for these name_path_pattern values (skip any that return no results):
mainappserverrouterhandlerconfigmiddlewareschemamodelCap at 10 total find_symbol calls. Stop early if the architectural shape is clear.
For the 2-3 most connected symbols found (symbols that appear in multiple files or have many children), optionally call mcp__serena__find_referencing_symbols to map who calls them. This tool requires both name_path (e.g., MyClass/my_method) and relative_path (the file where the symbol is defined) from the find_symbol results. Cap at 3 reference lookups.
Identify source directories from the directory tree in 5a (directories containing source files, not config/docs/tests).
If SERENA=true: run mcp__serena__get_symbols_overview with depth: 2 on up to 5 representative source files per directory. Record class names, function names, interface names, and method signatures. If a file returns no symbols (unsupported language, error), fall through to bash for that file.
If SERENA=false or Serena returned nothing for a file: read the first 80 lines.
Skip in both paths:
*_test.*, *.test.*, *.spec.*, test_*)*.min.js, *_pb.go, *.generated.*, *.g.dart)package-lock.json, yarn.lock, poetry.lock, Cargo.lock)Use mcp__serena__find_symbol to locate key type definitions. Search for these name_path_pattern values with include_body: false and depth: 1, scoped to SCAN_ROOT:
interfacetypeenumstructdataclassschemadtoCap at 7 total calls. For the 2-3 most central types found (those referenced in entry points or appearing across multiple files), call mcp__serena__find_symbol with include_body: true to read their full definition. This reveals the domain model and data shapes that drive the project.
If SERENA=false, skip this step.
Identify test directories and files from the tree in 5a:
test/, tests/, spec/, __tests__/*_test.*, *.test.*, *.spec.*, test_*List all test files found. Then pick 2-3 representative test files and:
If SERENA=true: run mcp__serena__get_symbols_overview with depth: 1 to see test function/class names.
If SERENA=false: read the first 60 lines.
Record: test framework used (inferred from imports/assertions), test naming conventions, whether tests are unit or integration style, and any test utilities or fixtures present.
Output two sections:
List all files read and symbols discovered, grouped by step. For Serena results, list the file path and a count summary (e.g., "3 classes, 12 functions, 2 interfaces"). For bash fallback files, list filenames only.
A summary of the project based on everything read. Cover all three sections below in order. 10-14 paragraphs of prose total. No bullets or headings within the overview.
How it works (mechanical description):
Why it matters (value and purpose):
How to use it (getting started):
After the report, await instructions.
testing
Search saved session transcripts for past decisions, actions, errors, and context that has left the current conversation window.
data-ai
Review a PRD for defects via Claude opus subagent.
development
Markdown authoring guidelines for formatting, code blocks, and structure. Use when writing or editing markdown files.
development
--- name: md-style description: README style guide for concise, direct documentation. Use when writing or editing README files. ß--- <!-- markdownlint-disable-file MD041 --> # README Style Guide Write concise, direct README files for experienced engineers. ## Principles - **No fluff** - Skip tables of contents, verbose explanations, development history - **No roadmaps** - Document current state only, not plans or decisions. Readme is an engineering specification. Not a project plan or chan