DocsyDocumentation agent
The user manual you can audit.
Docsy writes the user manual from your codebase and your running app, and it can show you why it believes every sentence.

Client manuals were written from memory — days of clicking through the product and taking screenshots — and went out of date with the next release. AI writers only guessed faster: fields that don't exist, timings nobody measured.
An agent pipeline that reads the codebase, explores the live app read-only, records evidence for everything it sees and checks each claim against both. Only then does it write the manual, every statement linked to its evidence.
How it works
It reads the code first
Routes, content types, forms and integrations, each with the file and line it came from.

Then it checks the running app
Agents explore the live app read-only and capture evidence of everything they see.

Every claim gets a state
Each claim is checked against both the code and the app: verified, observed, code-only or in conflict.

Only then does it write the manual
Every statement links to the evidence behind it. Select a marker and Docsy shows the checks it ran against the code and the app.

Where the code and the app disagree
The schema says a therapy cannot be saved without a summary. In the running CMS the field has no required marker, and Reflexology was saved with it empty. Docsy found both, and filed it under Discrepancies for a person to settle instead of stating it in the manual.
The code says
src/content-types/therapy/schema.json
"attributes": { "name": { "type": "string", "required": true, "maxLength": 80 }, "slug": { "type": "uid", "targetField": "name", "required": true }, "summary": { "type": "text", "required": true, "maxLength": 200, "description": "One-sentence summary used on listing cards." }, "description": { "type": "richtext" }, "category": { "type": "relation", "relation": "manyToOne", "target": "api::category.category", "required": true }, "practitioners": { "type": "relation", "relation": "manyToMany", "target": "api::practitioner.practitioner" }, "durationMinutes": { "type": "integer", "required": true, "min": 15 }, "price": { "type": "decimal", "description": "Synchronised from Bookwell." }, "bookwellServiceId": { "type": "string" }, "metaDescription": { "type": "string", "maxLength": 160, "description": "SEO description for search engines." }, "published": { "type": "boolean", "default": false } }
ev-0052 · code reference · Therapy.summary
The app shows
localhost:4400/admin/therapies/6/edit

ev-0133 · screenshot · ev-0177 · Therapy "Reflexology" has an empty Summary
All four in this run
- D-01highTherapy "Summary" is required in code but optional in the CMScoderequired: true (schema.json:13)appRecord "Reflexology" has an empty Summary
- D-02lowTherapy "metaDescription" cannot be edited in the CMScodemetaDescription: string (schema.json:20)appNot present on any of the 7 therapy forms
- D-03highPractitioner "Status" options differ from the schemacodeenum: active, on_leaveappoptions: Active, On leave, Retired
- D-04mediumThe README mentions "Archive practitioner"codeREADME.md:22appNot observed on 32 screens

In numbers
- 136claims checked
- 0claims without evidence
- 4/4planted discrepancies found
On Docsy's demo app: 136 claims in the ledger, 124 of them verified in both the code and the live app, and all 4 planted discrepancies found.
Built with
TypeScript
Next.js
React
- SQLite
Vitest
Connects to
GitHub
The film
Docsy
Writes the user manual from your codebase and your live app, with every sentence linked to the evidence for it.