Install
openclaw skills install docs-organizationOrganize project documentation by size, audience, and freshness. Trigger when setting up docs for a new project, restructuring existing documentation, slimmi...
openclaw skills install docs-organizationA practical guide for organizing project documentation so that every fact has one home, AI agents load only what they need, and humans can find things without grep.
Poor doc organization creates three problems that compound over time:
The fix is simple: organize by who reads it and whether it stays current.
Before touching docs, clean non-documentation clutter from the project root. Root-level noise (screenshots, recordings, debug logs, AI chat exports) is often the biggest source of visual chaos — and it has nothing to do with documentation structure.
Run ls | wc -l and capture the count. Then identify and relocate:
| What to look for | Where it goes |
|---|---|
Screenshots, recordings (.png, .mov, .mp4) | archive/media/ or screenshots/ if curated |
Debug/build logs (*.log, firebase-debug.log) | archive/ or delete |
| AI chat exports, temp markdown dumps | archive/ or delete |
| One-off config experiments | archive/ or delete |
Do this first — it dramatically reduces root-level item count and makes the real structure visible before you start reorganizing docs.
Ask yourself (or the user) these questions:
| Question | Small | Medium | Large |
|---|---|---|---|
| Source files | < 5 | 5-50 | 50+ |
| Has deployment target? | No | Yes | Yes, multiple |
| Has API or database? | No | Yes | Yes |
| Ongoing operations (cron, monitoring)? | No | Maybe | Yes |
| Multiple services/containers? | No | No | Yes |
Pick the column that best matches. When in doubt, start smaller — you can always add structure later.
Single-service tools, scripts, simple packages.
project/
├── CLAUDE.md # 50-100 lines: what it does, how to run, gotchas
└── README.md # For humans / GitHub
No docs/ directory needed. Everything fits in two files.
Multi-component apps with deployment targets and external integrations.
project/
├── CLAUDE.md # 100-200 lines: constraints + doc index
└── docs/
├── plans/ # Implementation plans
├── design/ # Design specs
└── reference/ # API tables, config reference, schema
Add directories only when you have 2+ files that belong there. One API doc doesn't need
a reference/ folder — just put it in docs/api.md.
Systems with operational burden: multiple services, cron jobs, monitoring, multi-environment deployment.
project/
├── CLAUDE.md # 200-250 lines: constraints + doc index + key gotchas
└── docs/
├── README.md # Documentation map
├── reference/ # API endpoints, DB schema, CLI commands, config reference
├── runbooks/ # Deploy, operations, troubleshooting, known issues
├── guides/ # How-to guides for users and operators
├── product/ # Roadmap, product direction
├── design/ # Design specs (frozen after implementation)
├── plans/ # Implementation plans (frozen after execution)
├── research/ # Investigation notes, audits, system reviews
├── decisions/ # Architecture Decision Records (ADRs)
└── archive/ # Superseded docs, old logs, historical patches
An umbrella directory containing multiple independent repos (often not a git repo itself). The key rule: umbrella-level docs are for cross-repo concerns only.
workspace/ # NOT a git repo
├── CLAUDE.md # Repo map + cross-repo conventions + doc index
├── docker-compose.yml # Cross-repo orchestration (lives at root)
├── .env / .env.example # Shared secrets (lives at root)
│
├── repo-a/ # Independent git repo
├── repo-b/ # Independent git repo
│
├── deploy/ # Cross-repo: nginx, infra configs, deploy scripts
├── scripts/ # Cross-repo: shared tooling
├── tools/ # Cross-repo: shared CLI utilities
│
├── docs/ # Cross-repo documentation ONLY
│ ├── design/ # System-wide architecture specs
│ ├── research/ # Cross-cutting investigations
│ ├── runbooks/ # Deploy, ops, incident response
│ └── plans/ # Cross-repo implementation plans
│
├── screenshots/ # Curated product screenshots (if needed)
└── archive/ # Superseded docs + one-off media
├── media/ # Old screenshots, recordings
└── docs/ # Outdated documents
Key differences from single-repo Large template:
repo-a/docs/)docs/ only holds docs that span multiple reposdocker-compose.yml, .env) live at workspace rootdeploy/ holds all infra/nginx configs — don't scatter them in rootEvery fact lives in exactly one place. Other docs can link to it, never copy it.
Bad: API endpoint table in CLAUDE.md AND roadmap.md AND usage-guide.md
Good: API endpoint table in docs/reference/api-endpoints.md, others link to it
When you change something, update the one canonical location. Not two files, not three — one.
CLAUDE.md (or AGENTS.md) is loaded into every AI conversation. Keep it under 250 lines. The reason is simple: every token in CLAUDE.md is consumed on every single conversation, whether relevant or not. A bloated CLAUDE.md wastes context and money.
What belongs in CLAUDE.md:
What does NOT belong:
reference/product/roadmap.mdrunbooks/reference/design/If CLAUDE.md is over 250 lines, extract the largest non-essential sections first.
Two questions determine where any doc belongs:
| Question | Options |
|---|---|
| Who reads it? | agent (AI), operator (maintainer), user (end-user), contributor |
| Does it stay current? | canonical (kept updated), snapshot (frozen in time), archived (superseded) |
This maps directly to directories:
| Directory | Status | Audience | Contains |
|---|---|---|---|
reference/ | canonical | agent, operator | Look-up tables: API, DB, CLI, config |
runbooks/ | canonical | operator | Deployment, ops, incident response |
guides/ | canonical | user, contributor | How-to instructions |
product/ | canonical | operator | Roadmap, direction, milestones |
design/ | snapshot | agent, contributor | Feature design specs |
plans/ | snapshot | agent, contributor | Implementation plans |
research/ | snapshot | operator | One-off investigations, audits |
decisions/ | snapshot | contributor | Architecture Decision Records |
archive/ | archived | — | Old/superseded docs |
This rule prevents drift:
After code or config changes, update the affected canonical doc only. Do not mirror the same fact across multiple docs.
If you find yourself maintaining a rule like "always update roadmap, deploy, known-issues, AND CLAUDE.md" — that's a sign of mirroring. Pick one canonical location for each fact.
Add this frontmatter to any non-trivial doc:
---
status: canonical | snapshot | archived
audience: agent | operator | user | contributor
last_reviewed: YYYY-MM-DD
---
| Anti-Pattern | Why It's Bad | Fix |
|---|---|---|
| Same fact in 3+ files | Guaranteed drift | Pick one canonical location, link from others |
| 2000-line CLAUDE.md | Wastes AI context every conversation | Keep < 250 lines, extract reference docs |
Flat docs/ with 20+ files | Can't find anything | Group by audience/purpose |
Research notes in docs/ root | Pollutes navigation | Move to research/ or archive/ |
Chat logs in docs/ | Not documentation | Move to archive/ or delete |
| "Always update these 4 files" rule | Creates busywork and drift | "Update the one canonical source" |
| Empty directories "for later" | Confusing, no content to navigate | Create directories when you have content |
Flat archive/ dumping ground | Archive itself becomes a junk drawer | Use archive/media/ for images/video, archive/docs/ for old text |
When reorganizing existing docs:
ls | wc -l at root and docs/. Save the counts for a before/after comparison.docs/, identify duplicated facts.rg <filename> (or grep -r <filename>) across the project to find references in docker-compose.yml, CI/CD configs, Makefile, shell scripts, .gitignore, etc. Moving a file that is referenced by a config will cause silent runtime failures.After extracting content, add a table like this to CLAUDE.md:
## Documentation Index
| What you need | Where to find it |
|---------------|-----------------|
| API endpoints | `docs/reference/api-endpoints.md` |
| Database schema | `docs/reference/database-schema.md` |
| Deployment guide | `docs/runbooks/deploy.md` |
| Known issues | `docs/runbooks/known-issues.md` |
| Roadmap | `docs/product/roadmap.md` |
This keeps CLAUDE.md as a routing table rather than trying to contain everything.