Project situational awareness.
devbrief is a developer CLI for rapid project situational awareness:
devbrief repo— takes a GitHub URL, pulls repository metadata, README, and file tree, then asks Claude to produce a structured brief directly in your terminal.devbrief logs— streams a log file (or stdin) into a local browser dashboard with live filtering, level highlighting, and rolling metrics.devbrief env— audits a project directory for environment hygiene:.gitignorecoverage,.env/.env.examplekey drift, and secret pattern detection in committed files.
pip install devbriefuvx devbrief repo <github-url>uv tool install devbriefAn Anthropic API key is required. Store it securely with:
devbrief authThis validates your key against the Anthropic API and writes it to ~/.config/devbrief/config.toml with 600 permissions. You will not be prompted again until the key is cleared or replaced.
CI / non-interactive environments:
devbrief auth --api-key "$ANTHROPIC_API_KEY"
# or just export the env var — devbrief picks it up automatically
export ANTHROPIC_API_KEY=sk-ant-... Usage: devbrief [OPTIONS] COMMAND [ARGS]...
Project situational awareness.
╭─ Options ────────────────────────────────────────────────────────────────────╮
│ -v, --version Show version and exit. │
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to copy │
│ it or customize the installation. │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────╮
│ repo Analyze a GitHub repository. │
│ auth Manage API credentials. │
│ logs Stream logs into a live dashboard. │
│ env Check project environment health. │
╰──────────────────────────────────────────────────────────────────────────────╯
devbrief repo <github-url> [--output FILE] [--no-cache]Briefs are cached locally in ~/.cache/devbrief/ and keyed by the repository's latest commit SHA. Subsequent calls on the same repo with no new commits return instantly with a (cached — last updated Xh ago) note.
Examples:
# Print the brief to the terminal (served from cache if unchanged)
devbrief repo https://github.com/anthropics/anthropic-sdk-python
# Save the brief as a markdown file
devbrief repo https://github.com/astral-sh/uv --output uv-brief.md
# Force a fresh Claude call, bypassing the cache
devbrief repo https://github.com/astral-sh/uv --no-cache| Option | Short | Description |
|---|---|---|
--output FILE |
-o |
Save the brief as a markdown file |
--no-cache, --refresh |
Skip cache and force a fresh API call | |
--help |
Show usage and exit |
devbrief auth # interactive prompt (hidden input)
devbrief auth --api-key sk-ant-... # non-interactive
devbrief auth --show # display masked stored key
devbrief auth --clear # remove stored keydevbrief logs [FILE] [--port PORT] [--no-browser]Opens a local browser dashboard at http://127.0.0.1:7890 (default port).
Examples:
# Visualise a log file
devbrief logs /var/log/app.log
# Pipe from a running process
your-app 2>&1 | devbrief logs
# Use a custom port
devbrief logs /var/log/app.log --port 8080| Option | Description |
|---|---|
FILE |
Path to a log file. Omit to read from stdin. |
--port PORT |
Dashboard port (default: 7890) |
--no-browser |
Do not open the browser automatically |
--help |
Show usage and exit |
The dashboard auto-detects common log formats (JSON structured logs, ISO timestamp prefix, [LEVEL], LEVEL:) and supports live client-side filtering by level, keyword, and time range. New lines appended to the file appear within ~3 seconds.
devbrief env [PATH] [--strict] [--quiet]Audits a project directory for common environment-hygiene issues. Three checks run in sequence:
- .gitignore audit — verifies the file exists and warns on each missing advisory entry (
.env,.env.local,.env.*.local,*.pem,*.key,id_rsa,id_rsa.*,.aws/credentials). - .env drift — compares keys between
.envand.env.example; warns on keys missing from.envor undocumented in.env.example. - Secret scan — walks the directory tree (respecting
.gitignore) and flags lines matching five patterns: Anthropic API keys, OpenAI API keys, AWS access key IDs, GitHub tokens, and PEM private key headers. Implemented as a compiled Rust extension for near-native performance on large trees.
Examples:
# Audit the current directory
devbrief env
# Audit a specific project root
devbrief env /path/to/project
# Exit code 1 on any warning (CI-friendly strict mode)
devbrief env --strict
# Plain text output (no Rich formatting, useful for scripts)
devbrief env --quiet| Option | Description |
|---|---|
PATH |
Project root to scan (default: current directory) |
--strict |
Treat warnings as errors — exit 1 if any warnings present |
--quiet |
Suppress Rich formatting; plain text output only |
--help |
Show usage and exit |
Exit code 0 when all checks pass (or warnings only without --strict). Exit code 1 on any error, or any warning under --strict.
--api-keyflagANTHROPIC_API_KEYenvironment variable~/.config/devbrief/config.toml- Error with instructions to run
devbrief auth
Each generated brief contains:
- One-line description — a crisp summary of the project
- Problem it solves — the core need being addressed
- Tech stack — detected languages, frameworks, and tools
- Getting started — steps extracted from the README
- Who would find it useful — the target audience
- Limitations / potential improvements — honest trade-offs
GitHub URL
│
├── /repos/:owner/:repo/commits?per_page=1 → latest commit SHA
│ │
│ └── Cache hit? (~/.cache/devbrief/<sha256(url+sha)>.json)
│ ├── Yes → return cached brief + "(cached Xh ago)"
│ └── No ↓
│
├── /repos/:owner/:repo → name, description, stars, language, topics
├── /repos/:owner/:repo/readme → decoded README content (first 3000 chars)
└── /repos/:owner/:repo/contents → top-level file tree
│
└── Structured prompt → Claude (model from config) → Rich terminal output
│
└── Write to cache
If the GitHub API is unreachable, the most recent cached brief for that URL is served regardless of age.
| v0.1.x | v0.2.x |
|---|---|
devbrief <url> |
devbrief repo <url> |
export ANTHROPIC_API_KEY=... |
devbrief auth (or keep the env var) |
Requires uv and Rust (stable toolchain).
git clone https://github.com/s3bc40/devbrief
cd devbrief
uv sync --all-groups
uv run maturin develop # compile the Rust extensionuv run devbrief repo https://github.com/s3bc40/devbrief
uv run devbrief env .# Python test suite (122 tests)
uv run pytest
# Rust unit tests (12 tests)
PYO3_BUILD_EXTENSION_MODULE=1 cargo test --manifest-path rust/Cargo.tomluv run ruff check src/ tests/
uv run ruff format src/ tests/src/devbrief/
├── cli.py # Typer app — registers all subcommands
├── _devbrief_core.pyi # Type stubs for the Rust extension
├── py.typed # PEP 561 marker
├── commands/
│ ├── repo.py # devbrief repo
│ ├── auth.py # devbrief auth
│ ├── logs.py # devbrief logs — FastAPI server, log parser, ring buffer
│ └── env.py # devbrief env — gitignore audit, .env drift, secret scan
├── templates/
│ ├── base.html # Base HTML layout (HTMX)
│ └── logs/
│ └── dashboard.html # Log dashboard template
├── core/
│ ├── credentials.py # API key + model resolution chain
│ ├── config.py # Config file read/write (~/.config/devbrief/config.toml)
│ └── cache.py # Local brief cache (~/.cache/devbrief/)
├── github.py # GitHub REST API fetchers
├── brief.py # Prompt construction and Claude API call
└── display.py # Rich terminal rendering
rust/
├── Cargo.toml # Rust crate (cdylib + rlib)
└── src/lib.rs # PyO3 extension: diff_env_files, scan_secrets
tests/
├── test_credentials.py # Credential resolution + auth command tests
├── test_logs.py # Log parser, ring buffer, polling endpoints
├── test_cache.py # Cache module + repo cache integration tests
├── test_github.py # GitHub fetcher tests
├── test_display.py # Rich display tests
├── test_env.py # env command tests (Python orchestration layer)
└── MANUAL_QA.md # Manual QA scenarios for devbrief env v0.4.0
- Fork the repository and create a branch from
main. - Make focused commits with explicit messages (one concern per commit).
- Add or update tests for any changed behaviour.
- Open a pull request — describe the problem and your solution.
Please do not open issues to ask for new AI providers or models; the project is intentionally scoped to the Anthropic API.
MIT — see LICENSE for details.

