opencode-builder-profile — Project Roadmap
- 7 extractors covering session metrics, code changes, tool usage, agent workflow, conversation, project diversity, task completion
- Per-dimension LLM calls with isolated prompts
-
--dry-runand--extractorCLI flags - Pydantic-validated final profile output
- GitHub Models API integration
- Clone-and-run setup with virtualenv
Goal: Extract linguistic signals from user prompts — vocabulary patterns, problem framing, technical language density.
- Term frequency analysis — most common unigrams, bigrams, and trigrams across all user prompts
- Sentence boundary detection — average sentence length, complexity score, question-to-statement ratio
- Technical term extraction — count usage of domain-specific terms (API, schema, deploy, refactor, etc.)
- Intent classification — categorize prompts by intent (implement, debug, explain, refactor, test, design)
- Prompt evolution tracking — how prompt structure changes over time (early sessions vs. recent)
New extractors: prompt_intelligence, expanded conversation with NLP layer
Dependencies: nltk or spacy, scikit-learn
Goal: Isolate what the user independently contributes vs. what the AI generates — to assess autonomous engineering judgment.
- User prompt isolation — extract
part.textwheremessage.role = 'user'andpart.type = 'text' - User command patterns — extract bash commands the user explicitly requested
- User file selections — files the user explicitly chose to read/edit vs. AI-chosen
- Correction frequency — how often the user rejects or corrects AI output (heuristic: short follow-up after long assistant response)
- Autonomy score — ratio of user-initiated actions to AI-suggested actions
New extractors: user_signals
Dependencies: None (relies on existing message.role field)
Goal: Allow users to choose their preferred LLM provider for profile generation.
- Provider abstraction —
profile/client.pyrefactored into a provider registry pattern - OpenAI support —
POST https://api.openai.com/v1/chat/completions, env varOPENAI_API_KEY - Anthropic support —
POST https://api.anthropic.com/v1/messages, env varANTHROPIC_API_KEY - Provider selection flag —
--provider openai|anthropic|github+PROFILE_LLM_PROVIDERenv var - Custom endpoint —
--endpoint URLfor self-hosted or proxy-compatible models
Config change:
PROFILE_LLM_PROVIDER=github # default
# PROFILE_LLM_PROVIDER=openai
# PROFILE_LLM_PROVIDER=anthropic
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...Dependencies: None (client refactor only, requests already covers all providers)
Constraint: This project extracts data exclusively from OpenCode's SQLite database. No Cursor, no Copilot, no Windsurf, no other AI coding assistant.
- Schema version detection — detect OpenCode DB schema version at startup and warn on mismatch
- Migration support — handle column additions/deprecations across OpenCode releases (the session table grows columns over time)
- v2 event-sourced tables — adapt extractors to read from
session_message,session_input, andeventtables when present - DB path auto-detection — search standard locations (
~/.local/share/opencode/,$XDG_DATA_HOME/opencode/, macOS~/Library/Application Support/opencode/) - Channel-aware resolution — detect non-stable install channels (
opencode-nightly.db,opencode-dev.db)
- Frontend dashboard — visualize the builder profile with charts (session timeline, language breakdown, tool usage heatmap)
- Comparative profiles — generate profiles across time windows and compute diffs (e.g. Q1 vs Q2 growth)
- Plug-in extractor system — third-party extractors via pip-installable packages, discovered through a registry
- CI/CD integration — GitHub Action that generates a profile on a schedule and publishes to GitHub Pages
- Batch organization mode — generate profiles for a team from multiple opencode.db files
| Phase | New Dependencies | LLM Calls per Run |
|---|---|---|
| 1 (current) | pydantic, requests, python-dotenv | 8 (7 section + 1 narrative) |
| 2 (NLP) | nltk or spacy, scikit-learn | 9 |
| 3 (user signals) | None | 10 |
| 4 (multi-provider) | None | 10 |
| 5 (OpenCode focus) | None | 10 |
| 6 (frontend) | react, d3 or recharts | 0 |