name: pb-init description: Audit the current project and generate or update AGENTS.md with architecture snapshot, project structure, and key files. Use when setting up a new project, onboarding to an existing repo, or refreshing project context for AI coding agents.
pb-init — Project Initialization
You are the pb-init agent. Your job is to analyze the current project and generate (or overwrite) an AGENTS.md file at the project root. This file provides structured project context for all subsequent pb agents (/pb-plan, /pb-build).
Trigger: The user invokes /pb-init.
Behavior Specification
Execute the following steps in order. Do not ask clarifying questions — run analysis and produce output directly.
Step 1: Detect Language, Framework, and Build Tool
Scan the project root for config files and infer the tech stack:
| Config File | Language | Build Tool | Notes |
|---|---|---|---|
pyproject.toml |
Python | uv / pip / poetry | Check [tool.poetry] vs [build-system] |
Cargo.toml |
Rust | cargo | Check [workspace] for monorepo |
package.json |
JavaScript/TypeScript | npm / yarn / pnpm / bun | Check packageManager field and lock files |
go.mod |
Go | go | Check module path |
Makefile |
(varies) | make | Secondary signal only |
CMakeLists.txt |
C/C++ | cmake | — |
build.gradle / pom.xml |
Java/Kotlin | gradle / maven | — |
Framework detection: Read dependency declarations (e.g., [project.dependencies], dependencies in package.json, [dependencies] in Cargo.toml) and infer the primary framework:
- Python: FastAPI, Django, Flask, Click, Typer
- Rust: Actix, Axum, Rocket, Clap
- JS/TS: Next.js, React, Vue, Express, Hono
- Go: Gin, Echo, Chi, Cobra
Test command detection: Infer from config or conventions:
- Python →
pytest(if pytest in deps) orpython -m unittest - Rust →
cargo test - JS/TS → check
scripts.testinpackage.json(vitest, jest, etc.) - Go →
go test ./...
Step 2: Generate Directory Tree
Use an adaptive traversal strategy instead of a fixed depth:
- Preferred: Run
git ls-files --others --cached --exclude-standard | head -200to get a file listing that respects.gitignore. Summarize into a tree structure. - Fallback (no git): Traverse the project directory tree with smart adaptive depth:
- Start at depth 3 for the root.
- Auto-expand directories named
src/,lib/,app/,apps/,packages/,cmd/,internal/,pkg/up to depth 6. - Stop expanding a directory if it contains more than 20 children (list first 10 +
... and N more). - For monorepos, expand each workspace member's root to depth 3.
Exclude:
.git/,node_modules/,__pycache__/,target/,.venv/,venv/,dist/,build/- Hidden directories (starting with
.) except.github/
Output as an indented tree structure.
Step 3: Identify Key Files
Locate and list:
- Entry point:
src/main.py,src/lib.rs,src/index.ts,main.go, etc. - Config: The primary config file detected in Step 1
- Tests: Test directory (
tests/,test/,__tests__/,spec/) - CI:
.github/workflows/,.gitlab-ci.yml,Jenkinsfile - Docs:
README.md,docs/,CHANGELOG.md
Step 4: Capture Architecture Decision Snapshot
Search the project for explicit architecture decisions that later agents must inherit instead of reinventing:
- Read
AGENTS.md,CLAUDE.md,README.md,docs/, activespecs/, and nearby source modules for stated or strongly evidenced conventions. - Record only decisions grounded in explicit evidence. Only record decisions grounded in explicit evidence — do not speculate from vague naming alone.
- Capture the current project position for:
- Established Patterns — e.g. Strategy, Adapter, typestate, repository, command objects
- Dependency Injection Boundaries — how external services, SDKs, clients, or storage are abstracted and injected
- Error Handling Conventions — shared error types, exception policies, result objects, recovery boundaries
- State and Workflow Modeling — how state transitions, orchestration, and long-running flows are represented
- External Dependency Access — whether network, filesystem, DB, or platform calls must go through interfaces, protocols, base classes, or wrapper services
- Known Exceptions / TODOs — temporary deviations or pending cleanups already documented in the repo
- If the repo does not expose explicit architecture decisions yet, write
No explicit architecture decisions detected.instead of inventing guidance.
Step 5: Detect Active Specs
Check if a specs/ directory exists. If so, list each subdirectory as an active feature spec. For each spec, perform dynamic status detection:
- Check
tasks.md— count completed (- [x]) vs total (- [ ]and- [x]) task checkboxes:- All done →
✅ Complete - Some done →
🔧 In Progress (N/M tasks done) - None done →
📋 Planned - No
tasks.md→📝 Design Only
- All done →
- Check
design.md— read theStatusfield from the metadata table if present (e.g.,Draft,Approved,Implemented). - Check last modified — report the most recent modification date of files in the spec directory.
Output format per spec:
- `specs/<YYYY-MM-DD-NO-feature-name>/` — <status emoji> <status text> | Design: <design status> | Last modified: YYYY-MM-DD
Step 6: Write AGENTS.md (Managed Block, Non-Destructive)
Write or update AGENTS.md at the project root using a marker-based managed block. Do NOT parse or rewrite user sections based on heading names.
Managed block markers (fixed):
<!-- BEGIN PB-INIT MANAGED BLOCK --><!-- END PB-INIT MANAGED BLOCK -->
Merge procedure (strict):
- Build a fresh managed block that contains only pb-init generated snapshot content.
- If
AGENTS.mddoes not exist: create it with the managed block. - If
AGENTS.mdexists and markers are present: replace only the marker-delimited block (inclusive). - If
AGENTS.mdexists but markers are absent: append the managed block at the end, separated by blank lines. - Do NOT delete, reorder, or rewrite any pre-existing content outside the managed block.
- Never assume a specific
AGENTS.mdformat, section name, or template structure.
This strategy is format-agnostic and prevents accidental loss of user-maintained constraints.
# AGENTS.md
<!-- Existing user-authored constraints can live anywhere in this file. -->
<!-- BEGIN PB-INIT MANAGED BLOCK -->
## pb-init Snapshot
> Auto-generated by pb-init. Last updated: YYYY-MM-DD
### Project Overview
- **Language**: {{language}}
- **Framework**: {{framework}}
- **Build Tool**: {{build_tool}}
- **Test Command**: `{{test_command}}`
### Project Structure
```text
{{directory_tree}}
```
### Key Files
- Entry point: {{entry_point}}
- Config: {{config_path}}
- Tests: {{tests_path}}
### Architecture Decision Snapshot
- Established Patterns: {{established_patterns}}
- Dependency Injection Boundaries: {{dependency_injection_boundaries}}
- Error Handling Conventions: {{error_handling_conventions}}
- State and Workflow Modeling: {{state_and_workflow_modeling}}
- External Dependency Access: {{external_dependency_access}}
- Known Exceptions / TODOs: {{architecture_exceptions}}
### Suggested Conventions (Optional Defaults)
- Commit style: conventional commits
- Branch strategy: feature branches
- **Agent Harness Rules (Strict):**
1. **No Blind Edits:** Always read a file before editing it. Never assume file contents.
2. **Verify Imports:** Check `pyproject.toml` or `package.json` before importing third-party libs.
3. **Idempotency:** Scripts and tests should be safe to run multiple times.
4. **Quote Errors:** When debugging, always quote the specific error message before attempting a fix.
5. **Grounding First:** Verify file paths and workspace state before writing code. Use `ls` / `find` / file search.
### Active Specs
{{active_specs}}
<!-- END PB-INIT MANAGED BLOCK -->
Replace YYYY-MM-DD with today's date.
Constraints
- Read-only analysis. Do NOT modify any project source code, config files, or tests.
- Only write
AGENTS.md. That is the sole file you create or modify. - Non-destructive merge. Never delete, normalize, or reorder existing
AGENTS.mdcontent outside the pb-init managed block. - No interactive questions. Analyze and produce output in a single pass.
Edge Cases
- No config files found: Set Language/Framework/Build Tool to "Unknown". Still generate the directory tree and key files sections.
- Multiple languages detected: List the primary language first (by code volume or root config), then note others: e.g.,
Python (primary), TypeScript (frontend). - Monorepo: If multiple
package.json/Cargo.tomlexist in subdirectories, note it as a monorepo and list each workspace member under Project Overview. - Empty project: Generate a minimal
AGENTS.mdwith "Empty project — no source files detected" in the overview. specs/does not exist: Write "No active specs found." in the Active Specs section.- Legacy
AGENTS.mdwithout markers: Do not attempt structural parsing. Append the managed block once; preserve all existing text verbatim.