Feed your AI real docs so it stops repeating the same mistakes.
Code quality and review workflows are powered by [`peteromallet/desloppify`](https://github.com/peteromallet/desloppify), integrated behind Devour commands.
## Code Health Scorecard
## Why Devour exists
I built Devour because AI tools kept drifting away from official docs, then repeating wrong patterns in later prompts.
Devour fixes that loop with a local-first workflow:
1. scrape official docs,
2. keep them in your project,
3. search and ask against that local corpus,
4. sync updates when sources change.
## What works today
- `devour init` creates a complete local workspace
- `devour scrape` supports URL, language-specific docs, local files, GitHub repos, OpenAPI specs, and `--sources`
- `devour get` supports language/framework shortcuts (now including Next.js, Svelte, Angular, Remix, SolidJS, Express)
- `devour query` is now functional (local lexical index)
- `devour ask` is hybrid local-first with live fallback when local relevance is weak
- `devour sync` updates configured sources and reindexes
- `devour status` reports real local health/statistics
- `devour push ` imports local docs into the workspace and reindexes
- `devour serve` local mode runs JSON-RPC over stdio (`devour_query`, `devour_status`, `devour_scrape`, `devour_ask`, `devour_sync`)
- `devour auto` routes natural-language intent to the right command
- `devour verify smoke` runs opt-in live checks and writes reports
## Experimental
- `devour serve --remote` is available as an experimental HTTP RPC mode
- remote push workflows are intentionally not enabled as stable behavior yet
## Quick start
### 1) Build
```bash
go mod download
go build -o devour ./cmd/devour
```
### 2) Initialize
```bash
./devour init
```
### 3) Get docs fast
```bash
./devour get go net/http --format markdown
./devour get nextjs routing
./devour get express middleware
```
### 4) Search locally
```bash
./devour query "json unmarshal"
```
### 5) Ask a docs-grounded question
```bash
./devour ask --lang go "how to parse json" --format text
```
### 6) Let Devour route intent automatically
```bash
./devour auto "how to use useEffect in react"
./devour auto "https://pkg.go.dev/net/http"
```
## Core commands
| Command | Purpose |
| --- | --- |
| `devour init [path]` | Create config + local storage directories |
| `devour get ` | Shortcut fetch from curated official docs |
| `devour scrape ` | Scrape one source directly |
| `devour scrape --sources sources.yaml` | Scrape multiple configured sources |
| `devour query ` | Search local indexed docs |
| `devour ask --lang ` | Structured answer using local-first + live fallback |
| `devour sync` | Sync configured sources and rebuild index |
| `devour status` | Show docs/index/source health |
| `devour push ` | Import local docs into workspace |
| `devour serve` | Start local stdio JSON-RPC server |
| `devour auto ""` | Auto-route intent to command |
| `devour verify smoke` | Live smoke verification report |
| `devour quality ...` | Thin passthrough to `desloppify` |
| `devour review ...` | Holistic subjective review workflow via `desloppify review` |
| `devour scorecard` | Generate `desloppify` badge output via scan |
## Quality Prerequisite
Install `desloppify` before running `devour quality` / `devour review` / `devour scorecard`:
```bash
pip install --upgrade "desloppify[full]"
```
### AI Setup Prompt (Copy/Paste)
```text
Install or update desloppify, then scan this codebase for code quality issues
(dead code, duplication, complexity, smells). It tracks findings persistently
across sessions and reports a health score.
Requires Python 3.11+. Install from PyPI:
pip install --upgrade desloppify
# Recommended for deepest coverage (tree-sitter + Python security adapter):
pip install --upgrade "desloppify[full]"
desloppify update-skill codex # pick yours: claude, cursor, codex, copilot, windsurf, gemini
Use Devour wrappers (delegates to desloppify):
devour quality scan --path .
devour quality status
devour quality next
Direct equivalent commands:
desloppify scan --path .
desloppify status
desloppify next
--path is the directory to scan (use "." for the whole project, or "src/" etc).
Language is auto-detected. To override: desloppify --lang python scan --path .
(note: --lang goes BEFORE the subcommand)
Fix what it finds, then:
desloppify resolve fixed --note "what changed" --attest "I have actually [DESCRIBE THE CONCRETE CHANGE YOU MADE] and I am not gaming the score by resolving without fixing."
For false positives:
desloppify resolve wontfix --note "reason" --attest "I have actually verified this is intentional/false-positive and I am not gaming the score by resolving without fixing."
If subjective scores feel stale or inflated:
desloppify scan --path . --reset-subjective
Because state persists, run regularly (for example before each push).
If anything seems wrong/confusing in desloppify itself, capture a repro and ask
whether to log an upstream issue.
If you need to debug desloppify internals:
git clone https://github.com/peteromallet/desloppify.git /tmp/desloppify
```
## Supported `get` / `ask` languages and frameworks
- Go (`go`, `golang`)
- Rust (`rust`)
- Python (`python`, `py`)
- Java (`java`)
- Spring (`spring`)
- TypeScript (`typescript`, `ts`)
- React (`react`)
- Vue (`vue`)
- Nuxt (`nuxt`)
- Docker (`docker`)
- Cloudflare (`cloudflare`, `cf`)
- Astro (`astro`)
- C# (`csharp`, `cs`)
- Kotlin (`kotlin`, `kt`)
- PHP (`php`)
- Ruby (`ruby`, `rb`)
- Elixir (`elixir`, `ex`)
- Next.js (`next`, `nextjs`)
- Svelte (`svelte`)
- Angular (`angular`, `ng`)
- Remix (`remix`)
- Solid (`solid`, `solidjs`) via `github.com/solidjs/solid-docs`
- Express (`express`, `expressjs`)
Run `devour languages` for examples, or `devour languages --format json` for automation.
## Config
Devour reads `devour.yaml` (or `--config`).
New additive sections:
- `indexing`: local lexical index defaults
- `verification`: live smoke timeout defaults
Starter config: `devour.example.yaml`.
## Real-world verification
Run live smoke checks (opt-in):
```bash
./devour verify smoke
```
Reports are saved to `devour_data/verify/smoke-.json`.
## JSON-RPC local server
`devour serve` (local mode) accepts JSON-RPC 2.0 methods:
- `devour_query`
- `devour_status`
- `devour_scrape`
- `devour_ask`
- `devour_sync`
## Development
### Test
```bash
go test ./...
```
### Typical integration loop
```bash
./devour init
./devour scrape https://pkg.go.dev/net/http --type godocs
./devour query "http client"
./devour ask --lang go "timeout example"
./devour sync
./devour status
```
## License
MIT (`LICENSE`).