document-existing
SkillDocs & knowledgeLets your agent read an existing codebase and write PRD.md, FEATURES.md and RULES.md describing it as built.
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the document-existing skill
About this skill
Document an existing codebase as PRD.md, FEATURES.md and RULES.md, so new work is planned against the code as it is. Use instead of create-prd when the code already exists.
What this skill tells your AI
The instructions your AI receives, as published by nurettincoban/ai-prd-workflow in skills/document-existing/SKILL.md and read by ahel’s review.
You are a senior engineer and product manager onboarding an existing codebase into an RFC-driven workflow. The code already exists. Your job is to document what it does today -- not what it should do -- so that new work is planned against reality instead of against memory.
Work in the current project directory. If PRD.md, FEATURES.md or RULES.md already exist, stop and ask whether to update them or to write .draft.md files beside them. Never overwrite them silently.
STEP 1: READ THE CODE
- Map the codebase: entry points, modules, data stores, external services, configuration, and the build and test commands. Read the README, the dependency manifests, and the tests -- tests are the most reliable statement of intended behavior a codebase has.
- Run the build and the test suite if you can, and record the actual result. If you cannot execute commands here, say so.
- Keep a list of what the code cannot tell you: who uses it, why it exists, what is planned next, and which behaviors are deliberate rather than accidental.
STEP 2: ASK WHAT THE CODE CANNOT TELL YOU
Ask me one batch of 3-5 questions from that list -- the users and their problem, what changes next, what is deliberately out of scope, which odd behaviors are bugs. Wait for the answers before writing anything.
CLASSIFY THE PRODUCT TYPE
Classify the product as one of: web app · mobile app · library/SDK · CLI · service/API · data pipeline · game. A product that combines types -- a web app with a public API -- takes the checks of each.
Then apply only the checks that fit. What each type needs probed, and what usually does not apply:
| Type | Probe | Usually skip |
|---|---|---|
| web app | auth and sessions, authorization per resource, data model and migrations, accessibility, responsive layout, browser support, page-load budget, SEO for public pages | binary size, offline sync |
| mobile app | offline behavior and sync conflicts, OS permissions, app-store review rules, OS-version and device support, battery and data use, push notifications, update strategy | SEO, browser support |
| library/SDK | public API surface and consistency, semver and deprecation policy, peer-dependency ranges, bundle size and tree-shaking, type quality, the public/internal boundary, mutation of caller-owned data | infrastructure, scalability, regulatory, business model, accessibility, responsive design, state management, auth |
| CLI | command and flag design, exit codes, stdout vs stderr, piping and scripting, config and environment precedence, cross-platform paths and shells, install and upgrade | UI design, accessibility, SEO, sessions |
| service/API | API contracts and versioning, authentication and authorization, rate limiting and abuse, idempotency and retries, observability, data retention and privacy, SLOs and scaling | UI, responsive design, accessibility |
| data pipeline | schemas and schema evolution, data-quality checks, idempotent re-runs and backfills, late or duplicate data, lineage, PII handling, cost and scheduling | UI, sessions, responsive design |
| game | core loop, frame budget and target hardware, input devices, save/load and save versioning, progression and difficulty, platform certification | SEO, CRUD business logic, responsive design |
Record the result in PRD.md as a Product Type section: the type, and each skipped check with a one-line reason. Later commands read that section instead of classifying again, so every step applies the same checks. Skipping must be visible and auditable, never silent -- a generated "no SQL injection vectors identified" in a library that has no SQL manufactures false confidence.
STEP 3: WRITE THE ARTIFACTS
- PRD.md -- the product as built, plus the direction from my answers: Overview, Product Type, Users, Scope (in and out), Functional Requirements (FR-1, ...) and Non-Functional Requirements (NFR-1, ...) as the code actually implements them, Decisions (choices visible in the code, with their rationale where known), and Open Questions.
- FEATURES.md -- the table layout
/extract-featuresuses,| ID | Feature | Priority | Source | Complexity | Acceptance Criteria |, plus a Status column. Every existing capability is a feature with StatusImplementedand a Source that names both the requirement and the code, such asFR-3; src/links/create.ts. Work from my answers gets StatusPlannedand a MoSCoW priority./generate-rfcsplans only the Planned features. - RULES.md -- the conventions the code actually follows: naming, structure, error handling, testing, and dependencies at the versions pinned in the manifests, each rule with a permanent ID such as
- **ARCH-1**: .... Where the code is inconsistent, state the dominant pattern and list the exceptions. Do not write a rule the code does not follow -- a rule that contradicts the code it governs gets ignored.
Cite a file path for every claim about existing behavior, and mark anything inferred rather than confirmed as (inferred). A requirement with neither a code reference nor an answer from me behind it is a guess; label it as one.
SELF-CHECK BEFORE FINISHING
- Recount every summary table from the actual content. Never carry a count forward from earlier in your own output.
- Verify every internal cross-reference -- feature IDs, rule IDs, RFC numbers, section references -- points at what the surrounding text claims it does. A reference to a VALID but WRONG ID is the dangerous case: nothing looks malformed, so readers are quietly misled.
- Confirm no two tables in the document disagree with each other.
- If
trace-check.pyis available -- in ascripts/folder beside these instructions, or in the project's ownscripts/folder -- run it on the project (python3 <path>/trace-check.py .) and fix every FAIL it reports. It checks IDs, coverage and dependencies mechanically, which reading cannot do reliably. - State that you ran this check and what it turned up.
NEXT STEP
Recommend /verify-prd to review the result with fresh eyes, then /generate-rfcs for the Planned features -- or /manage-changes when the next piece of work changes existing behavior.
Signals
- GitHub stars
- 296
- Forks
- 33
- Last commit
- Oct 2026
ahel review
K6info
bundled executables the agent is told to run
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
document-existing- Source
- github.com/nurettincoban/ai-prd-workflow
github.com/nurettincoban/ai-prd-workflow
Related picks
Skill · wshobson
The pick for Pythonpython-pro
Skill · jeffallan
The pick for Pythonsetup-ts-deep-modules
Skill · mattpocock
The pick for TypeScripttypescript-pro
Skill · jeffallan
The pick for TypeScriptseo
Skill · addyosmani
The pick for SEOseo-strategy
Skill · cbrock84
The pick for SEO