justsisyphus
1f5e8be1ab
fix: explicit reset in mainSessionID test for parallel test safety
2026-01-28 14:40:15 +09:00
justsisyphus
b2e038eb40
fix: add afterEach cleanup in session-state tests for parallel test isolation
2026-01-28 14:36:58 +09:00
justsisyphus
066a3762dc
fix: reset sessionAgentMap in _resetForTesting for test isolation
...
- Add sessionAgentMap.clear() to _resetForTesting()
- Prevents test pollution when tests run in parallel in CI
2026-01-28 14:33:14 +09:00
justsisyphus
ec57d06204
fix: resolve CI test timeouts with configurable timing
...
- Add timing.ts module for test-only timing configuration
- Replace hardcoded wait times with getTimingConfig()
- Enable all previously skipped tests (ralph-loop, session-state, delegate-task)
- Tests now complete in ~2s instead of timing out
2026-01-28 14:17:56 +09:00
justsisyphus
3c57f92477
fix(background-agent): pass variant as top-level field in prompt body
2026-01-27 16:49:03 +09:00
justsisyphus
fb79bcb09e
feat(sisyphus): add foundation schemas for tasks and swarm (Wave 1)
...
- Add SisyphusTasksConfig and SisyphusSwarmConfig to schema.ts
- Create Task JSON schema with Zod validation
- Create Mailbox IPC protocol message schemas
- Add storage utilities with Claude Code path compatibility
- 25 tests passing
2026-01-27 13:07:09 +09:00
justsisyphus
4e83651394
feat(subagent): block question tool at both SDK and hook level
...
- Add permission: [{ permission: 'question', action: 'deny' }] to session.create()
in background-agent and delegate-task for SDK-level blocking
- Add subagent-question-blocker hook as backup layer to intercept question tool
calls in tool.execute.before event
- Ensures subagents cannot ask questions to users and must work autonomously
2026-01-27 13:07:09 +09:00
justsisyphus
e508f7b236
fix(background-agent): disable question tool for background tasks
2026-01-26 18:25:06 +09:00
justsisyphus
4beae19c24
feat(tmux-subagent): add replace action to prevent mass eviction
...
- Add column-based splittable calculation (getColumnCount, getColumnWidth)
- New decision tree: splittable → split, k=1 eviction → close+spawn, else → replace
- Add 'replace' action type using tmux respawn-pane (preserves layout)
- Replace oldest pane in-place instead of closing all panes when unsplittable
- Prevents scenario where all agent panes get closed leaving only 1
2026-01-26 15:25:11 +09:00
justsisyphus
4eca083387
fix(tmux-subagent): enable 2D grid layout with divider-aware calculations
...
- Account for tmux pane dividers (1 char) in all size calculations
- Reduce MIN_PANE_WIDTH from 53 to 52 to fit 2 columns in standard terminals
- Fix enforceMainPaneWidth to use (windowWidth - divider) / 2
- Add virtual mainPane handling for close-spawn eviction loop
- Add comprehensive decision-engine tests (23 test cases)
2026-01-26 15:11:16 +09:00
justsisyphus
5f1dbe8ffd
docs: regenerate AGENTS.md knowledge base via /init-deep
2026-01-26 14:56:55 +09:00
justsisyphus
a25233708a
chore(test): sync agent name casing in tests ( #1128 )
...
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
2026-01-26 12:10:30 +09:00
justsisyphus
ac8b3c6143
refactor(tmux-subagent): state-first architecture with decision engine ( #1125 )
...
* refactor(tmux-subagent): add state-first architecture with decision engine
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* feat(tmux): add pane spawn callbacks for background and sync sessions
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
---------
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-26 12:02:37 +09:00
justsisyphus
dc96df495d
chore(docs): regenerate AGENTS.md knowledge base ( #1118 )
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-26 11:48:30 +09:00
justsisyphus
78d74c7ad0
fix(test): update builtin skills count from 3 to 4 ( #1126 )
...
* fix(test): update builtin skills count from 3 to 4 (dev-browser added)
* chore(ci): add block-master-pr workflow
---------
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
2026-01-26 02:29:28 +00:00
YeonGyu-Kim
14e0d0d506
Add tmux pane management for background agent sessions ( #1094 )
...
* feat(config): add TmuxConfigSchema for tmux subagent pane management
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* feat(shared): add tmux module structure
* feat(shared/tmux): implement tmux pane utilities
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* test(tmux-subagent): add TmuxSessionManager tests (TDD RED)
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* feat(tmux-subagent): implement TmuxSessionManager
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* feat(integration): wire TmuxSessionManager with 500ms delay
- Task 5: Add 500ms delay in BackgroundManager after session creation
- Task 6: Wire TmuxSessionManager event handlers (session.created/deleted)
- Both changes integrate tmux pane management into plugin lifecycle
Co-authored-by: Sisyphus <ultrawork@oh-my-opencode>
---------
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
Co-authored-by: Sisyphus <ultrawork@oh-my-opencode>
2026-01-25 15:34:10 +09:00
YeonGyu-Kim
6cfe6e8ae6
feat(skills): add dev-browser skill with Windows support ( #1093 )
...
* feat(skills): add dev-browser skill with Windows support
* chore: trigger CI
2026-01-25 15:34:07 +09:00
justsisyphus
e6e84b7b0a
docs(agent-browser): add detailed installation guide with Playwright troubleshooting
2026-01-25 15:12:32 +09:00
YeonGyu-Kim
893bd8b153
feat(skills): add agent-browser option for browser automation ( #1090 )
...
Add configurable browser automation allowing users to choose between
Playwright MCP (default) and Vercel's agent-browser CLI.
Changes:
- Add browser_automation_engine.provider config option
- Dynamic skill loading based on provider selection
- Comprehensive agent-browser CLI reference (inline in skills.ts)
- Propagate browserProvider to delegate_task and buildAgent
- Update documentation with provider comparison
Co-authored-by: Suyeol Jeon <devxoul@gmail.com >
Co-authored-by: YeonGyu Kim <code.yeongyu@gmail.com >
2026-01-25 15:02:41 +09:00
Sisyphus
10d2619e28
fix: update documentation to use load_skills instead of skills parameter ( #1088 )
...
All documentation, agent prompts, and skill descriptions were still
referencing the old 'skills' parameter name for delegate_task, but the
tool implementation requires 'load_skills' (renamed in commit aa2b052 ).
This caused confusion and errors for users following the docs.
Fixes #1008
Co-authored-by: sisyphus-dev-ai <sisyphus-dev-ai@users.noreply.github.com >
2026-01-25 13:45:00 +09:00
justsisyphus
6898d05ff6
docs: update AGENTS.md knowledge base ( 043b1a33)
...
- Add 7 missing hooks, remove deleted background-compaction
- Update line counts (atlas 572, sisyphus 450, config-manager 664)
- Add 18 undocumented shared utilities, remove stale references
- Add task-toast-manager, remove-deadcode command
- Update test count 90→95, add 4 complexity hotspots
2026-01-25 13:12:40 +09:00
justsisyphus
da10b31c0a
fix: add missing name property in loadBuiltinCommands causing TypeError on slashcommand
2026-01-25 12:46:03 +09:00
Sisyphus
9c6d6c289a
fix(ralph-loop): skip user messages in transcript completion detection ( #622 ) ( #1086 )
...
* fix(ralph-loop): skip user messages in transcript completion detection (#622 )
The transcript-based completion detection was searching the entire JSONL
file for <promise>DONE</promise>, including user message entries. The
RALPH_LOOP_TEMPLATE instructional text contains this literal pattern,
which gets recorded as a user message, causing false positive completion
detection on every iteration. This made the loop always terminate at
iteration 1.
Fix: Parse JSONL entries line-by-line and skip entries with type 'user'
so only tool_result/assistant entries are checked for the completion
promise. Also remove the hardcoded <promise>DONE</promise> from the
template exit conditions as defense-in-depth.
* chore: changes by sisyphus-dev-ai
---------
Co-authored-by: sisyphus-dev-ai <sisyphus-dev-ai@users.noreply.github.com >
2026-01-25 12:34:42 +09:00
Stephen Wang
eef98e27f2
Fix MCP disabled flag not removing previously loaded servers ( #985 )
...
When a later-loaded MCP config (e.g., .claude/.mcp.json) marks a server
as disabled, it now properly removes that server from both the servers
object and loadedServers array.
Previously, disabled servers were only skipped during loading, which
meant they wouldn't override servers loaded from earlier configs. This
made it impossible to disable project-level MCPs using local overrides.
Now the disabled flag works as expected: local configs can disable
servers defined in project or user configs.
2026-01-24 15:55:59 +09:00
YeonGyu-Kim
8af6774ae8
fix(models): update model names to match OpenCode Zen catalog ( #1048 )
...
* fix(models): update model names to match OpenCode Zen catalog
OpenCode Zen recently updated their official model catalog, deprecating
several preview and free model variants:
DEPRECATED → NEW (Official Zen Names):
- gemini-3-pro-preview → gemini-3-pro
- gemini-3-flash-preview → gemini-3-flash
- grok-code → gpt-5-nano (FREE tier maintained)
- glm-4.7-free → big-pickle (FREE tier maintained)
- glm-4.6v → glm-4.6
Changes:
- Updated 6 source files (model-requirements, delegate-task, think-mode, etc.)
- Updated 9 documentation files (installation, configurations, features, etc.)
- Updated 14 test files with new model references
- Regenerated snapshots to reflect catalog changes
- Removed duplicate think-mode entries for preview variants
Impact:
- FREE tier access preserved via gpt-5-nano and big-pickle
- All 55 model-related tests passing
- Zero breaking changes - pure string replacement
- Aligns codebase with official OpenCode Zen model catalog
Verified:
- Zero deprecated model names in codebase
- All model-related tests pass (55/55)
- Snapshots regenerated and validated
Affects: 30 files (6 source, 9 docs, 14 tests, 1 snapshot)
* fix(multimodal-looker): update fallback chain with glm-4.6v and gpt-5-nano
- Change glm-4.6 to glm-4.6v for zai-coding-plan provider
- Add opencode/gpt-5-nano as 4th fallback (FREE tier)
- Push gpt-5.2 to 5th position
Fallback chain now:
1. gemini-3-flash (google, github-copilot, opencode)
2. claude-haiku-4-5 (anthropic, github-copilot, opencode)
3. glm-4.6v (zai-coding-plan)
4. gpt-5-nano (opencode) - FREE
5. gpt-5.2 (openai, github-copilot, opencode)
* chore: update bun.lock
---------
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
2026-01-24 15:30:35 +09:00
justsisyphus
29d2f94979
fix(delegate-task): use lowercase sisyphus-junior agent name in API calls
...
Previous fix (7ed7bf5c ) only updated Atlas → atlas, but missed Sisyphus-Junior.
OpenCode does case-sensitive agent lookup, causing crash when delegate_task
tried to spawn 'Sisyphus-Junior' (registered as 'sisyphus-junior').
- SISYPHUS_JUNIOR_AGENT constant: 'Sisyphus-Junior' → 'sisyphus-junior'
- agent-tool-restrictions key: 'Sisyphus-Junior' → 'sisyphus-junior'
- Updated related test mocks
2026-01-24 03:00:58 +09:00
justsisyphus
101c1a8965
fix(agents): use lowercase agent names in API calls
...
- atlas/index.ts: agent: 'Atlas' -> 'atlas'
- start-work/index.ts: updateSessionAgent(..., 'Atlas') -> 'atlas'
- builtin-commands/commands.ts: agent: 'Atlas' -> 'atlas'
- Updated tests to match lowercase convention
2026-01-24 02:39:12 +09:00
justsisyphus
9aa2084072
fix(session): preserve custom agent after switching ( #1017 )
...
Use setSessionAgent (first-write wins) instead of updateSessionAgent in chat.message handler. This prevents the default agent from overwriting a custom agent that was set via UI switch.
Fixes #893
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com >
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-23 16:25:26 +09:00
justsisyphus
f067f8e6fc
docs: regenerate all AGENTS.md files with updated structure
2026-01-23 02:14:08 +09:00
justsisyphus
090970dd32
docs: update AGENTS.md files and configuration docs
...
Refresh documentation across all AGENTS.md files and update configuration documentation with latest features.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-22 22:48:50 +09:00
justsisyphus
ffae4ba929
refactor: update plugin handlers and shared utils
...
Minor updates to config handler, plugin detector, index entry, and builtin command templates.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-22 22:48:36 +09:00
justsisyphus
316ee1dd5d
refactor(task-toast): improve task toast manager types and logic
...
Add new toast types and improve state management for background task notifications. Update tests to cover new scenarios.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-22 22:46:36 +09:00
Nguyen Khac Trung Kien
22a5c8e64d
fix: respect OPENCODE_CONFIG_DIR environment variable across all config paths
...
Multiple files were hardcoding ~/.config/opencode paths instead of using
getOpenCodeConfigDir() which respects the OPENCODE_CONFIG_DIR env var.
This broke profile isolation features like OCX ghost mode, where users
set OPENCODE_CONFIG_DIR to a custom path but oh-my-opencode.json and
other configs weren't being read from that location.
Changes:
- plugin-config.ts: Use getOpenCodeConfigDir() directly
- cli/doctor/checks: Use getOpenCodeConfigDir() for auth and config checks
- tools/lsp/config.ts: Use getOpenCodeConfigDir() for LSP config paths
- command loaders: Use getOpenCodeConfigDir() for global command dirs
- hooks: Use getOpenCodeConfigDir() for hook config paths
- config-path.ts: Mark getUserConfigDir() as deprecated
- tests: Ensure OPENCODE_CONFIG_DIR is properly isolated in tests
2026-01-22 12:15:09 +07:00
Jonas Herrmansdsoerfer
d2d609e8b2
fix: use correct 'skills' directory path and respect OPENCODE_CONFIG_DIR
...
- Change skill directory from 'skill' (singular) to 'skills' (plural) to match OpenCode standard
- Use getOpenCodeConfigDir() to respect OPENCODE_CONFIG_DIR environment variable
- Update documentation and tests to reflect correct paths
Fixes #810
2026-01-21 13:12:27 +01:00
justsisyphus
3b394b3fe3
refactor: rename atlas agent to Atlas for naming consistency
...
- Rename agent name from 'atlas' to 'Atlas' (PascalCase like Sisyphus, Metis, Momus)
- Add migration for lowercase 'atlas' -> 'Atlas' for backward compatibility
- Keep hook name as 'atlas' (lowercase) to match other hook naming conventions
- Update all references in types, schema, hooks, commands, and tests
2026-01-21 11:19:00 +09:00
justsisyphus
a2187628ce
refactor(agents): remove document-writer agent in favor of writing category
...
- Delete document-writer.ts agent file
- Remove from types, schema, utils, index exports
- Remove tool restrictions entry
- Remove migration mappings
- Update atlas.ts to use category="writing" instead of agent="document-writer"
- Update init-deep command template
- Update all documentation (AGENTS.md, README.*, docs/)
- Regenerate schema.json
document-writer functionality is now handled via delegate_task with
category="writing" which uses the writing category's model config.
2026-01-20 16:52:31 +09:00
justsisyphus
a2c3a48cfe
refactor(plugin): update atlas references
...
Update plugin handlers, commands, and integration points to use 'atlas' agent name. Start-work command and config handler now reference 'atlas'.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-20 15:55:09 +09:00
justsisyphus
692603776a
fix(background-agent): prevent premature task completion when agent still running
...
- Add session.status re-check in stability detection before completing
- Reset stablePolls if session is not idle (agent still working)
- Fix statusText to show CANCELLED instead of COMPLETED for non-completed tasks
2026-01-19 14:58:13 +09:00
justsisyphus
512792f00e
fix(types): add null checks for optional sessionID and startedAt fields
2026-01-19 10:35:47 +09:00
justsisyphus
66e1a15ebd
test(background-agent): add non-blocking queue tests
2026-01-19 10:27:50 +09:00
justsisyphus
a4488a765e
feat(ui): show pending/queued status in toast and background_output
2026-01-19 10:22:34 +09:00
justsisyphus
7fefbe5f3a
fix(background-agent): use queuedAt for pending task TTL
2026-01-19 10:19:48 +09:00
justsisyphus
b70b94b39f
feat(background-agent): support cancelling pending tasks
2026-01-19 10:18:10 +09:00
justsisyphus
ca55f4b0a9
fix(background-agent): track pending tasks in pendingByParent
2026-01-19 10:16:02 +09:00
justsisyphus
4093838806
feat(background-agent): implement per-key queue processor
2026-01-19 10:16:02 +09:00
justsisyphus
a9d160fa39
feat(background-agent): make launch() non-blocking
2026-01-19 10:16:02 +09:00
justsisyphus
500d896344
feat(background-agent): add per-key queue structure
2026-01-19 10:16:02 +09:00
justsisyphus
e4f92ce425
feat(background-agent): add pending status and queuedAt field
2026-01-19 10:16:02 +09:00
justsisyphus
f1393d3e85
docs: regenerate hierarchical AGENTS.md with deep investigation
...
- Root: 181 lines with agent models, complexity hotspots, CI pipeline
- Hooks: 31 lifecycle hooks, execution order, patterns
- Tools: 20+ tools, LSP/AST-Grep specifics, registration
- Features: Background agents, Claude Code compat, skill MCP
- Agents: 10 agents with models, tool restrictions
- Shared: 43 utilities with usage patterns
- CLI: Commander.js entry, doctor checks, TUI framework
Generated via /init-deep with 12 parallel explore agents
2026-01-17 22:01:56 +09:00
YeonGyu-Kim
3afc8e777f
Add /ulw-loop command for ultrawork mode loop ( #867 )
...
* feat(ralph-loop): add ultrawork field to RalphLoopState
* feat(ralph-loop): persist ultrawork field in storage
* feat(ralph-loop): accept ultrawork option in startLoop
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* feat(ralph-loop): prepend ultrawork keyword when mode active
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
* feat(ralph-loop): custom toast for ultrawork mode
* feat(ralph-loop): add /ulw-loop command for ultrawork mode
* fix(ralph-loop): add non-null assertion for type safety
* fix(ralph-loop): mirror argument parsing in ulw-loop handler
- Parse quoted prompts and strip flags from task text
- Support --max-iterations and --completion-promise options
- Add default prompt for empty input
- Fixes behavior inconsistency with /ralph-loop
---------
Co-authored-by: justsisyphus <sisyphus-dev-ai@users.noreply.github.com >
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-01-17 19:56:50 +09:00