by vtemian via GitHub · MIT licensed · 231 versions
Open source, kept here so you can read it and make your own copy. Not our work.
Interactive brainstorming UI for OpenCode agents - multi-question forms, decisions, and real-time feedback
About this project (the project's own write-up)
octto
An interactive browser UI for AI brainstorming. Stop typing in terminals. Start clicking in browsers.
https://github.com/user-attachments/assets/9ba8868d-16f3-4451-9b73-6b7e1fc54655
When you describe your idea, octto opens an interactive UI:
- Click options instead of typing
- See all questions at once
- Answer in any order
- Watch follow-ups appear instantly
- Review the final plan visually
10 minutes of terminal typing → 2 minutes of clicking.
Quick Start
Add to ~/.config/opencode/opencode.json:
{ "plugin": ["octto"] }
Select the octto agent:
I want to add a caching layer to the API
A browser window opens. Click your answers. Done.
The Interactive UI
Rich Question Types
No more typing everything. Pick from 14 visual input types:
| Type | What You See |
|---|---|
pick_one |
Radio buttons |
pick_many |
Checkboxes |
confirm |
Yes/No buttons |
slider |
Draggable range |
rank |
Drag to reorder |
rate |
Star rating |
thumbs |
Thumbs up/down |
show_options |
Cards with pros/cons |
show_diff |
Side-by-side code diff |
ask_code |
Syntax-highlighted editor |
ask_text |
Text input (when needed) |
ask_image |
Image upload |
ask_file |
File upload |
emoji_react |
Emoji picker |
Live Updates
- Questions appear as you answer previous ones
- Progress indicator shows remaining questions
- Completed answers visible for context
- Final plan rendered as reviewable sections
Parallel Branches
Your request is split into 2-4 exploration branches. All initial questions appear at once:
┌─ Branch 1: [question card]
Request ─┼─ Branch 2: [question card]
└─ Branch 3: [question card]
↓
Answer any, in any order
Each branch goes as deep as needed. Some finish in 2 questions, others take 4.
How It Works Behind the Scenes
3 Agents
| Agent | Job |
|---|---|
| bootstrapper | Splits your request into branches |
| probe | Decides if a branch needs more questions |
| octto | Orchestrates the session |
The Flow
- Bootstrapper creates 2-4 branches from your request
- Each branch gets an initial question → all shown in browser
- You answer (click, not type)
- Probe agent evaluates: more questions or done?
- Repeat until all branches complete
- Final plan shown for approval
- Design saved to
docs/plans/
Configuration
Optional ~/.config/opencode/octto.json:
{
"model": "anthropic/claude-sonnet-4",
"port": 3000,
"agents": {
"probe": { "model": "openai/gpt-4o" }
}
}
Options
| Option | Type | Default | Description |
|---|---|---|---|
model |
string | - | Override the model for all agents at once |
port |
number | 0 (random) |
Fixed port for the browser UI server |
agents |
object | - | Per-agent overrides (model, temperature, etc.) |
fragments |
object | - | Custom instructions injected into agent prompts |
Precedence: per-agent
agents.<name>.model> top-levelmodel> built-in default
Fragments
Inject custom instructions into agent prompts. Useful for customizing agent behavior per-project or globally.
Global config (~/.config/opencode/octto.json):
{
"fragments": {
"octto": ["Always suggest 3 implementation approaches"],
"probe": ["Include emoji in every question"],
"bootstrapper": ["Focus on technical feasibility"]
}
}
Project config (.octto/fragments.json in your project root):
{
"octto": ["This project uses React - focus on component patterns"],
"probe": ["Ask about testing strategy for each feature"]
}
Fragments are merged: global fragments load first, project fragments append. Each fragment becomes a bullet point in a <user-instructions> block prepended to the agent's system prompt.
Environment Variables
| Variable | Description |
|---|---|
OCTTO_PORT |
Override port (takes precedence over config file) |
For Docker workflows, set a fixed port:
OCTTO_PORT=3000 opencode
Development
bun install
bun run build
bun test
License
MIT
Versions (231 — latest: chore: bump version to 0.4.1)
- Version 231 — Sep 3, 5:13am — chore: bump version to 0.4.1 latest
- Version 230 — Sep 3, 3:49am — chore(deps-dev): bump eslint-plugin-unicorn from 72.0.0 to 73.0.0 (#57)
- Version 229 — Sep 3, 3:49am — chore(deps): bump @opencode-ai/plugin from 1.18.11 to 1.18.15 (#56)
- Version 228 — Aug 5, 12:58pm — chore(deps): bump @opencode-ai/plugin from 1.18.9 to 1.18.11 (#54)
- Version 227 — Aug 3, 7:23am — fix: session teardown hang, brainstorm livelock, and unauthenticated session server (#53)
- Version 226 — Jul 31, 5:41am — ci: run release on node 22
- Version 225 — Jul 31, 5:39am — chore: bump version to 0.4.0
- Version 224 — Jul 31, 5:24am — test(e2e): dockerised end-to-end harness for octto inside opencode (#52)
- Version 223 — Jul 31, 5:21am — fix(brainstorm): stop telling the agent to run its own answer loop (#49)
- Version 222 — Jul 31, 5:20am — fix: stop leaking octto's agent objects into resolved config (#51)
- Version 221 — Jul 31, 5:13am — fix(ui): render the freetext choice enabled by allowOther (#48)
- Version 220 — Jul 30, 8:41am — chore(deps): bump @opencode-ai/plugin from 1.18.1 to 1.18.9 (#47)
- Version 219 — Jul 30, 6:38am — ci: regenerate bun.lock on dependabot branches (#45)
- Version 218 — Jul 30, 6:38am — chore(deps): bump @opencode-ai/plugin to 1.18.1 (#46)
- Version 217 — Jul 30, 6:05am — chore(deps-dev): bump eslint-plugin-unicorn from 64.0.0 to 72.0.0 (#42)
- Version 216 — Jul 30, 6:02am — feat: add top-level model key to override all agents at once (#17)
- Version 215 — Jul 30, 6:01am — chore(deps): bump actions/setup-node from 6 to 7 (#41)
- Version 214 — Jul 30, 6:00am — fix(tools): add all config properties to questionsSchema and push_question (#28)
- Version 213 — Jul 30, 6:00am — chore: add nix dev shell with bun, node, biome, lefthook (#18)
- Version 212 — Jul 30, 6:00am — chore(deps): bump actions/checkout from 6 to 7 (#34)
- Version 211 — Apr 22, 9:01am — chore(deps-dev): bump typescript from 5.9.3 to 6.0.2 (#11)
- Version 210 — Apr 22, 8:59am — chore(deps): bump @opencode-ai/plugin from 1.0.223 to 1.4.6 (#21)
- Version 209 — Apr 22, 8:59am — chore(deps-dev): bump eslint-plugin-unicorn from 63.0.0 to 64.0.0 (#14)
- Version 208 — Mar 18, 1:19pm — test: add processAnswer coverage and persistence error path tests
- Version 207 — Mar 18, 1:18pm — fix: improve test lifecycle and error handling in factory and server tests
- Version 206 — Mar 18, 1:17pm — refactor: fix file ordering, remove dead exports, deduplicate factory calls
- Version 205 — Mar 18, 1:15pm — refactor: add readonly to immutable fields, fix barrel import
- Version 204 — Mar 18, 10:27am — refactor: fix remaining CLAUDE.md violations
- Version 203 — Mar 18, 10:05am — refactor: fix all CLAUDE.md rule violations
- Version 202 — Mar 18, 9:42am — docs: add CLAUDE.md with project rules
- Version 201 — Mar 18, 9:39am — chore: integrate quality gates from micode
- Version 200 — Mar 17, 7:50am — chore: remove .idea, docs/plans, thoughts/shared from tracking
- Version 199 — Mar 8, 2:52pm — chore: bump version to 0.3.1
- Version 198 — Mar 8, 2:29pm — Merge pull request #9 from zlumer/main
- Version 197 — Mar 8, 2:18pm — Merge pull request #5 from dankochetov/feat/add-variant-config
- Version 196 — Feb 20, 9:39pm — Add MIT License to the project
- Version 195 — Feb 8, 9:55am — feat: add variant field to AgentOverrideSchema
- Version 194 — Jan 28, 11:40am — chore: bump version to 0.3.0
- Version 193 — Jan 28, 11:39am — feat: add fragments support for custom agent instructions (#4)
- Version 192 — Jan 19, 9:57am — chore: bump version to 0.2.0
- Version 191 — Jan 19, 9:57am — feat: add fixed port and OCTTO_PORT env var support
- Version 190 — Jan 11, 1:08pm — chore: bump version to 0.1.4
- Version 189 — Jan 11, 1:07pm — fix: log config validation errors and salvage valid agent overrides
- Version 188 — Jan 10, 9:50am — test: update bootstrapper test for new default model
- Version 187 — Jan 10, 9:42am — chore: switch default model to openai/gpt-5.2-codex
- Version 186 — Jan 8, 4:19am — Revise README by removing problem and solution sections
- Version 185 — Jan 8, 4:01am — ui: add spacing between thinking and other components
- Version 184 — Jan 8, 3:55am — chore: bump version to 0.1.1
- Version 183 — Jan 8, 3:46am — docs: update quick start for npm release
- Version 182 — Jan 8, 3:39am — ci: add GitHub Actions for CI and npm publishing with provenance
- Version 181 — Jan 7, 2:27pm — docs: lead with interactive browser UI as the main innovation
- Version 180 — Jan 7, 2:26pm — docs: rewrite README highlighting interactive browser UI and parallel exploration
- Version 179 — Jan 7, 2:07pm — chore: remove debug logging from probe agent
- Version 178 — Jan 7, 2:02pm — debug: add detailed logging for probe result and follow-up flow
- Version 177 — Jan 7, 1:53pm — debug: log full probe response
- Version 176 — Jan 7, 1:52pm — feat: add logging for probe agent execution
- Version 175 — Jan 7, 1:48pm — refactor: use registered probe agent instead of manual config threading
- Version 174 — Jan 7, 1:45pm — refactor: simplify model/prompt fallback logic
- Version 173 — Jan 7, 1:44pm — fix: add fallback defaults for probe agent model and prompt
- Version 172 — Jan 7, 1:42pm — fix: use custom config for probe agent model
- Version 171 — Jan 7, 1:40pm — fix: pass model config to probe agent session.prompt
- Version 170 — Jan 7, 1:37pm — refactor: replace rule-based probe with LLM agent
- Version 169 — Jan 7, 1:07pm — docs: add probe agent design
- Version 168 — Jan 7, 12:41pm — fix: prevent race condition in concurrent state writes
- Version 167 — Jan 7, 12:03pm — Merge pull request #1 from vtemian/refactor
- Version 166 — Jan 7, 9:01am — refactor: add BRANCH_STATUSES const for type-safe branch status
- Version 165 — Jan 7, 8:58am — refactor: simplify config property access with type assertion
- Version 164 — Jan 7, 8:56am — refactor: use for...of instead of forEach in error cleanup
- Version 163 — Jan 7, 8:53am — refactor: replace generateId with typed generateSessionId/generateQuestionId
- Version 162 — Jan 7, 8:44am — refactor: use Answer type for all response fields
- Version 161 — Jan 7, 8:32am — refactor: add WS_MESSAGES const for websocket message types
- Version 160 — Jan 7, 8:24am — refactor: simplify brainstorm and processor with typed answers
- Version 159 — Jan 7, 8:24am — refactor: update question tools to use BaseConfig and STATUSES
- Version 158 — Jan 7, 8:23am — refactor: use extractAnswerSummary in formatters
- Version 157 — Jan 7, 8:23am — refactor: rewrite probe-logic with typed answer extraction
- Version 156 — Jan 7, 8:23am — refactor: use Answer type in BranchQuestion and store
- Version 155 — Jan 7, 8:22am — refactor: use STATUSES const and BaseConfig in sessions
- Version 154 — Jan 7, 8:22am — feat: add typed Answer types with STATUSES and BaseConfig
- Version 153 — Jan 7, 8:22am — refactor: extract generateId to tools/utils.ts
- Version 152 — Jan 7, 6:31am — refactor: use QUESTION_TYPES const for type safety
- Version 151 — Jan 7, 6:25am — refactor: remove unused client param and relocate stateStore
- Version 150 — Jan 6, 1:50pm — refactor(tools): extract brainstorm.ts from branch.ts with decoupled functions
- Version 149 — Jan 6, 1:03pm — refactor(tools): migrate all question tools to factory pattern and add type guards
- Version 148 — Jan 6, 12:55pm — fix: add type guard for unsafe q.answer assertion
- Version 147 — Jan 6, 12:50pm — fix: replace deprecated object({}).passthrough() with looseObject({})
- Version 146 — Jan 6, 12:29pm — refactor(tools): extract processor and merge factory files
- Version 145 — Jan 6, 12:23pm — refactor(tools): extract helpers and reduce boilerplate
- Version 144 — Jan 6, 12:13pm — fix: address PR review comments
- Version 143 — Jan 6, 12:09pm — refactor: remove nested try/catch with early return pattern
- Version 142 — Jan 6, 12:06pm — style: fix import grouping
- Version 141 — Jan 6, 12:06pm — fix: resolve type declaration errors with opaque OcttoTools type
- Version 140 — Jan 6, 11:59am — refactor: use @/* path alias pattern
- Version 139 — Jan 6, 11:54am — refactor: simplify plugin initialization and session tracking
- Version 138 — Jan 6, 11:51am — refactor: replace state classes with factory functions
- Version 137 — Jan 6, 11:43am — refactor: replace classes with factory functions
- Version 136 — Jan 6, 10:46am — chore: configure biome import groups with blank line separators
- Version 135 — Jan 6, 10:41am — chore: configure biome with organize imports and pre-commit hooks
- Version 134 — Jan 6, 10:34am — refactor: add path aliases and valibot config schema
- Version 133 — Jan 6, 8:55am — fix(probe-logic): handle ranking and ratings answer formats
- Version 132 — Jan 6, 8:48am — refactor: rename package from brainstormer to octto
- Version 131 — Jan 6, 8:27am — fix: address critical and high priority release issues
- Version 130 — Jan 6, 8:13am — docs: use opus as example in config documentation
- Version 129 — Jan 6, 8:09am — feat(config): add user-configurable agent settings
- Version 128 — Jan 6, 7:26am — chore: remove dead probe agent
- Version 127 — Jan 6, 7:24am — docs: rewrite README with architecture deep-dive
- Version 126 — Jan 6, 7:18am — fix(ui): move subtitle below title
- Version 125 — Jan 6, 7:15am — style(ui): change branch badge to subtitle
- Version 124 — Jan 6, 7:14am — feat(ui): show branch badge on questions
- Version 123 — Jan 6, 7:08am — refactor: remove logging and add branch context to questions
- Version 122 — Jan 6, 7:03am — feat(review): use show_plan instead of review_section
- Version 121 — Jan 6, 7:00am — chore(tools): remove unused branch tools
- Version 120 — Jan 6, 6:56am — refactor(brainstormer): event-driven architecture with inline probe logic
- Version 119 — Jan 5, 3:09pm — fix(agents): make brainstormer prompt explicitly require create_brainstorm
- Version 118 — Jan 5, 3:01pm — chore: remove dead brainstorm orchestrator module
- Version 117 — Jan 5, 2:58pm — chore: remove dead code in agents/context.ts
- Version 116 — Jan 5, 2:57pm — fix(tools): use correct question ID from pushQuestion in branch tools
- Version 115 — Jan 5, 2:57pm — fix(security): add path traversal validation for session IDs
- Version 114 — Jan 5, 2:24pm — chore: ignore .brainstorm state directory
- Version 113 — Jan 5, 2:23pm — test(integration): add branch-based brainstorm flow test
- Version 112 — Jan 5, 2:21pm — refactor(plugin): remove hook-based probe, use branch tools
- Version 111 — Jan 5, 12:32pm — feat(agents): update brainstormer for branch-based exploration
- Version 110 — Jan 5, 12:32pm — fix(tools): use tool() function pattern in branch.ts
- Version 109 — Jan 5, 12:29pm — feat(tools): add branch-aware brainstorming tools
- Version 108 — Jan 5, 12:27pm — feat(agents): update probe to work within branch scope
- Version 107 — Jan 5, 12:25pm — feat(agents): update bootstrapper to create exploration branches
- Version 106 — Jan 5, 12:22pm — feat(state): add StateManager for branch-based session management
- Version 105 — Jan 5, 12:20pm — feat(state): add state file persistence for brainstorm sessions
- Version 104 — Jan 5, 12:18pm — feat(types): add branch and state types for tree-based architecture
- Version 103 — Jan 5, 12:05pm — fix(brainstormer): use automatic hook-based probe instead of manual subagents
- Version 102 — Jan 5, 12:02pm — debug: more detailed session tracking
- Version 101 — Jan 5, 11:59am — debug: add context state tracking to probe output
- Version 100 — Jan 5, 11:56am — chore: remove console.log and debug statements
- Version 99 — Jan 5, 11:51am — fix(brainstormer): stricter probe to prevent duplicate questions
- Version 98 — Jan 5, 11:28am — refactor(brainstormer): rewrite Q&A tracking for reliable context
- Version 97 — Jan 5, 11:24am — fix(brainstormer): deduplicate questions and improve context tracking
- Version 96 — Jan 5, 10:55am — fix(brainstormer): proper session ID tracking for conversation context
- Version 95 — Jan 5, 10:48am — fix(brainstormer): show actual questions in approval summary
- Version 94 — Jan 5, 10:43am — fix(brainstormer): use review_section for plan approval
- Version 93 — Jan 5, 10:36am — fix(brainstormer): require approval before ending session
- Version 92 — Jan 5, 10:31am — feat(brainstormer): programmatic probe with conversation tracking
- Version 91 — Jan 5, 10:09am — feat(brainstormer): add hook-based probe reminder after get_next_answer
- Version 90 — Jan 5, 10:00am — fix(orchestrator): use standalone session instead of child session
- Version 89 — Jan 5, 9:58am — chore: add debug logging to brainstorm flow
- Version 88 — Jan 5, 9:57am — fix(orchestrator): fail fast if child session creation fails
- Version 87 — Jan 5, 9:50am — fix(probe): use claude-opus-4-5 for probe model
- Version 86 — Jan 5, 9:44am — refactor: remove chat.message hook
- Version 85 — Jan 5, 9:40am — fix(orchestrator): use child session for internal LLM calls
- Version 84 — Jan 5, 9:31am — fix(hook): add required fields to injected agent part
- Version 83 — Jan 5, 9:29am — feat(hook): add chat.message hook to auto-trigger brainstormer
- Version 82 — Jan 5, 9:22am — refactor(agent): use brainstorm tool instead of manual orchestration
- Version 81 — Jan 5, 9:19am — fix(agents): restore probe agent for subagent-based brainstorming
- Version 80 — Jan 5, 9:08am — feat(probe): support multiple questions per probe call
- Version 79 — Jan 5, 8:01am — docs(readme): update project structure and add testing section
- Version 78 — Jan 5, 6:27am — fix(validation): validate other field in isPickManyAnswer
- Version 77 — Jan 5, 6:23am — chore: add documentation and lockfile from tech debt cleanup
- Version 76 — Jan 5, 6:23am — test(integration): add orchestrator flow tests
- Version 75 — Jan 5, 6:20am — fix(index): add proper types to execute function replacing any
- Version 74 — Jan 5, 6:20am — test(manager): add WebSocket lifecycle and concurrent waiter tests
- Version 73 — Jan 5, 6:19am — test(probe): add formatAnswer tests and export function
- Version 72 — Jan 5, 6:19am — test(probe): add callProbe tests with mocked client
- Version 71 — Jan 5, 6:17am — refactor(manager): use immutable WaiterManager for race condition safety
- Version 70 — Jan 5, 6:14am — feat(validation): add answer type guards for all question types
- Version 69 — Jan 5, 6:14am — feat(waiter): add waitForResponse helper with timeout
- Version 68 — Jan 5, 6:12am — test(index): add plugin initialization tests
- Version 67 — Jan 5, 6:12am — feat(waiter): add immutable waiter manager helper
- Version 66 — Jan 5, 6:12am — feat(validation): add type guards for LLM response validation
- Version 65 — Jan 5, 6:09am — refactor(orchestrator): use centralized constants
- Version 64 — Jan 5, 6:09am — refactor(probe,summarize): use centralized constants
- Version 63 — Jan 5, 6:09am — refactor(manager): use centralized constants
- Version 62 — Jan 5, 6:08am — feat(constants): add centralized constants module
- Version 61 — Jan 5, 6:04am — docs(plan): add tech debt cleanup implementation plan
- Version 60 — Jan 5, 5:57am — docs: add tech debt cleanup design document
- Version 59 — Jan 5, 4:51am — test(brainstorm): add integration test for full brainstorming flow
- Version 58 — Jan 5, 4:50am — feat(brainstorm): integrate brainstorm tool into plugin exports
- Version 57 — Jan 5, 4:50am — feat(brainstorm): add main brainstorm tool with full orchestration
- Version 56 — Jan 5, 4:49am — feat(brainstorm): add orchestrator for managing brainstorming flow
- Version 55 — Jan 5, 4:48am — feat(brainstorm): add summary LLM helper for design document generation
- Version 54 — Jan 5, 4:48am — feat(brainstorm): add probe LLM helper with context building and response parsing
- Version 53 — Jan 5, 4:48am — feat(brainstorm): add types for new brainstorm tool
- Version 52 — Jan 4, 2:06pm — docs(plan): add implementation plan for brainstorm tool refactor
- Version 51 — Jan 4, 12:37pm — test(integration): add streaming answer processing tests
- Version 50 — Jan 4, 12:36pm — feat(probe): update to handle partial context with pending questions
- Version 49 — Jan 4, 12:35pm — feat(brainstormer): update workflow to process answers one at a time
- Version 48 — Jan 4, 12:34pm — feat(context): add pending questions indicator to probe context
- Version 47 — Jan 4, 12:23pm — docs(plan): add streaming answer processing implementation plan
- Version 46 — Jan 4, 12:01pm — chore: add CI/CD pipeline and deployer agent
- Version 45 — Jan 3, 5:16pm — fix: small improvements and polish
- Version 44 — Jan 3, 9:50am — docs: update README for multi-agent architecture
- Version 43 — Jan 3, 9:31am — test(integration): add multi-agent flow tests
- Version 42 — Jan 3, 9:30am — refactor(agents): convert brainstormer to orchestrator pattern
- Version 41 — Jan 3, 9:29am — test(agents): add context builder tests
- Version 40 — Jan 3, 9:28am — feat(agents): add context builder utility for probe agent
- Version 39 — Jan 3, 9:28am — feat(agents): add probe subagent for thoughtful follow-up questions
- Version 38 — Jan 3, 9:27am — feat(agents): add bootstrapper subagent for fast initial questions
- Version 37 — Jan 3, 9:21am — docs(plan): add multi-agent brainstormer implementation plan
- Version 36 — Jan 3, 9:07am — docs: add multi-agent brainstormer design
- Version 35 — Jan 3, 8:02am — feat(ui): add click-to-expand view for answered questions
- Version 34 — Jan 2, 12:53pm — fix(prompt): end_session immediately after final confirmation
- Version 33 — Jan 2, 12:47pm — feat(ui): implement all missing question types
- Version 32 — Jan 2, 12:41pm — feat(ui): implement show_plan question type
- Version 31 — Jan 2, 12:30pm — fix: wrapper was bypassing start_session enforcement
- Version 30 — Jan 2, 12:26pm — fix(prompt): enforce interleaved answer-react pattern
- Version 29 — Jan 2, 12:20pm — fix: enforce questions parameter in start_session programmatically
- Version 28 — Jan 2, 12:19pm — fix(prompt): make questions parameter in start_session unmissable
- Version 27 — Jan 2, 12:15pm — feat: start_session accepts initial questions for instant display
- Version 26 — Jan 2, 12:11pm — fix: get_next_answer marks answers as retrieved to avoid duplicates
- Version 25 — Jan 2, 12:03pm — feat: add get_next_answer for user-order responses
- Version 24 — Jan 2, 11:54am — feat(ui): render markdown in review_section using marked.js
- Version 23 — Jan 2, 11:53am — feat(ui): implement review_section question type
- Version 22 — Jan 2, 11:47am — feat(ui): show thinking loader when queue momentarily empty
- Version 21 — Jan 2, 11:43am — fix(agent): queue empty only when brainstorm finished
- Version 20 — Jan 2, 11:42am — fix(agent): push all 3 questions immediately (bang bang bang flow)
- Version 19 — Jan 2, 11:38am — fix(tests): add skipBrowser option to prevent browser tabs during tests
- Version 18 — Jan 2, 11:33am — fix(agent): restore prepare-3-questions-first behavior
- Version 17 — Jan 2, 11:29am — fix(agent): one question at a time, no batching
- Version 16 — Jan 2, 11:23am — style(ui): apply nof1 design system
- Version 15 — Jan 2, 11:20am — feat(agent): prepare 3 questions before starting session
- Version 14 — Jan 2, 11:10am — docs: fix usage - brainstormer is a primary agent, not a command
- Version 13 — Jan 2, 11:07am — docs: update README for agent-centric architecture
- Version 12 — Jan 2, 11:05am — feat(agents): add brainstormer agent with browser UI tools
- Version 11 — Jan 2, 10:58am — docs: add README with usage examples and architecture
- Version 10 — Jan 2, 10:55am — test(integration): add full question-answer flow tests
- Version 9 — Jan 2, 10:55am — test(tools): add session tools unit tests
- Version 8 — Jan 2, 10:55am — test(session): add SessionManager unit tests
- Version 7 — Jan 2, 10:55am — feat(plugin): add entry point with OpenCode session cleanup
- Version 6 — Jan 2, 10:55am — feat(ui): add browser UI bundle with question rendering
- Version 5 — Jan 2, 10:55am — feat(tools): add 21 tool definitions for brainstormer
- Version 4 — Jan 2, 10:55am — feat(session): add session manager with WebSocket server
- Version 3 — Jan 2, 10:10am — docs(plan): add Task 0 to review/fix existing implementation bugs
- Version 2 — Jan 2, 10:06am — docs(plan): add implementation plan for interactive brainstormer plugin
- Version 1 — Jan 2, 9:45am — Initial project setup with interactive brainstormer design
Files (99 · 422.7 KB)
- .github/5 files · 4.8 KB
- .opencode/2 files · 1.4 KB
- e2e/11 files · 30.2 KB
- src/37 files · 183.8 KB
- tests/26 files · 116.3 KB
- .dockerignore45 bytes
- .envrc10 bytes
- .gitignore283 bytes
- ARCHITECTURE.md7.8 KB
- CHANGELOG.md4.0 KB
- CLAUDE.md3.6 KB
- CODE_STYLE.md7.7 KB
- LICENSE1.1 KB
- README.md4.2 KB
- biome.json2.1 KB
- bun.lock43.6 KB
- eslint.config.js6.4 KB
- flake.lock1.1 KB
- flake.nix1.5 KB
- lefthook.yml267 bytes
- package.json1.7 KB
- tsconfig.eslint.json205 bytes
- tsconfig.json498 bytes
Open a version to see exactly what changed in it, or download the zip for everything.
Get it on your computer
With the Library Mode tool: librarymode get ken/octto
Or tell Claude Code / OpenCode: "get ken/octto from Library Mode"