The web package still referenced the old "opencode" workspace name,
causing bun install to fail with "Workspace dependency not found".
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Users must be able to run both agent-core and OpenCode without
confusion. All new code, docs, and user-facing text should use
'agent-core' naming instead of 'opencode'.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- New WhatsApp gateway using whatsapp-web.js
- QR code authentication on first run
- Session persistence across restarts
- Intent-based persona routing (same as Telegram)
- Phone number allowlist support
- Integrated into daemon with --whatsapp flag
Usage:
opencode daemon --whatsapp --port 4567
Note: Requires whatsapp-web.js and qrcode-terminal packages.
Dynamic imports allow graceful failure if not installed.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
sync.data.todo is only populated when sessions are opened, so the
startup check was always finding zero todos. Now uses Todo.get()
to read directly from storage for each session.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 0.3 completion:
- Show toast on TUI startup if any sessions have incomplete todos
- Display count: "◐ N pending todos in M sessions"
- Update roadmap: mark Phase 0 as Complete
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Filter out cancelled todos (consistency with other implementations)
- Update display to use ◐ symbol: "◐ N pending · task..."
- Mark Phase 0.2 TUI Integration as complete in roadmap
The prompt hint was already implemented, this commit improves it
for consistency with the session list indicator.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The todo continuation reminder was already implemented in prompt.ts
at insertReminders() (lines 1180-1219). Updates roadmap to reflect this.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When switching between sessions in the TUI:
- Shows toast warning with count of incomplete todos
- Session list displays ◐{count} indicator for sessions with pending work
This helps users track unfinished tasks across sessions.
Updates roadmap Phase 0.2 TUI Integration status.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When using the placeholder agent (before real agents load), return
undefined instead of falling back to the first provider's model.
This prevents showing google-vertex-anthropic models before the
agent's configured model loads.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove disabled: true from agent_cycle and agent_cycle_reverse
- Remove disabled: true from mode_toggle
- Tab now switches between agents as expected
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Return a placeholder agent object when no agents have loaded yet,
preventing crashes when accessing .name or other properties on
undefined.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When agents haven't loaded yet or the stored agent name doesn't match
any loaded agent, fallback to the first available agent instead of
returning undefined which caused crashes.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Agent-configured models (like cerebras/zai-glm-4.7) may not be in the
provider list returned by the API. Instead of validating and falling
back, trust the agent's configured model directly.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Agent's model config now takes priority:
1. Agent's configured model (from .agent-core/agent/*.md)
2. User's cached selection (for agents without config)
3. Global fallback
This ensures personas always use their intended models on startup.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The {skill:zee} placeholder was never implemented - it was being sent
as literal text. Now each agent has its actual prompt inlined:
- Zee: Personal life assistant (memory, messaging, calendar)
- Stanley: Investing system (markets, portfolio, SEC filings)
- Johny: Learning system (knowledge graph, spaced repetition)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Delete unused prompt files (anthropic-20250930.txt, copilot-gpt-5.txt, explore.txt)
- Fix thread.ts to use AGENT_CORE_ORIGINAL_PWD for correct cwd detection
- Remove misleading tips about non-existent vim features (:w, :wq, :help)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The 'includes' field (for skill loading) was being passed to providers
like Cerebras, causing "body.includes is unsupported" errors.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Parse all Claude naming formats (old/new with/without minor version)
- Prioritize highest version number over -latest suffix
- Group by model family (opus, sonnet, haiku) and keep only best version
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Auto-hide dated model versions (e.g. claude-opus-4-5-20250202) when
latest or base version exists for Anthropic and Z.AI providers
- Remove variant cycle command from agent options
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change command prefix from / to : (vim-style, e.g. :connect, :models)
- Update tips with vim commands (:w, :q, :wq, :help)
- Update branding from OpenCode to agent-core in sidebar
- Update footer hints to use : prefix
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Simplify the UI by removing:
- Model favorites (toggleFavorite, favorite list, Ctrl+F keybind)
- Suggested commands category in command palette
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Cerebras provider with GLM-4.7 model
- Context: 131K tokens, Output: 40K tokens
- Supports reasoning and tool calls
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace AGENT-CORE logo with dynamic persona ASCII art
- Logo now shows Zee, Stanley, or Johny based on active persona
- Remove OpenRouter warning dialog (was promoting OpenCode Zen)
- Update CLI logo to show Zee banner (default persona)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Rename packages/opencode to packages/agent-core
- Update bin entry from opencode to agent-core
- Set default_agent to "zee" for persona-first UX
- Update terminal title to show current persona name
- Fix persona colors:
- Zee: #2563EB (blue)
- Stanley: #059669 (emerald green)
- Johny: #DC2626 (red)
- Update all documentation and build script references
- Update root package.json name and dev script
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 0.2 of Always-On Personas architecture:
- Add toast notification on session switch when incomplete todos exist
(routes/session/index.tsx)
- Inject system reminder into LLM context for incomplete tasks
(session/prompt.ts)
- Add visual hint in prompt area showing current todo progress
(component/prompt/index.tsx)
- Create architecture roadmap for Always-On Personas system
(docs/architecture/ALWAYS-ON-PERSONAS.md)
This enables automatic continuation of incomplete tasks when:
1. Switching to a session with pending todos (toast + hint)
2. Sending any prompt in a session with incomplete tasks (system reminder)
Part of the headless agent infrastructure for remote access via Zee.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Session restore now automatically triggers todo continuation
when incomplete tasks remain from previous session.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New features in tiara:
- Todo continuation hook system for automatic session persistence
- System reminder injection when incomplete tasks remain
- CLI command: npx claude-flow hook todo-continuation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change app name from "opencode" to "agent-core" so config loads from
~/.config/agent-core/ where personas (zee, johny, stanley) are defined
- Add defensive optional chaining to prevent crash if agents array is
empty during initialization
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Updates tiara to include the new Qdrant storage adapter for unified
memory storage. This enables migration from SQLite to Qdrant.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When providers like OpenAI return a stream successfully but error during
iteration (e.g., insufficient_quota mid-stream), the fallback system now
catches these errors and switches to a fallback provider.
Key changes:
- Add wrapFullStream() using Proxy to intercept async iteration
- Add tryMidStreamFallback() for mid-stream recovery
- Wrap all returned streams with the mid-stream error handler
- Emit FallbackUsed event with "mid-stream:" reason prefix
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Classify OpenAI insufficient_quota errors as rate_limit to trigger fallback
- Add quota pattern matching in JSON error body parsing
- Add quota string pattern matching for error messages
- Remove premature success recording - stream might still error during iteration
Note: Stream-time errors (errors during iteration) are not yet caught by
fallback retry logic. This is a known limitation when errors occur mid-stream
rather than at call time.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Reads EXA_API_KEY from environment for higher rate limits.
Falls back to public MCP endpoint if not set.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Includes:
- Required context section for agent-core/personas repos
- Snyk security upgrades (bcrypt, multer, node)
- CI and test fixes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove hardcoded build/plan/general/explore agents from source
- Add Zee, Stanley, Johny agent definitions in .opencode/agent/
- Remove upstream docs/duplicate-pr/triage agents
- Update CLAUDE.md with agent-core → tiara → personas architecture
- Configure Cerebras as default model for all agents (fast instruct)
- Set small_model for internal agents (title, compaction)
The Personas system now provides all agent functionality through
the triad, with shared orchestration via tiara.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update all "Clawdis" references to "Zee gateway" in comments/docs
- Clawdis was the old name for the Zee messaging bot (clawdbot fork)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Google Calendar client using OAuth2 tokens from ~/.zee/credentials/google/
- Update zee:calendar tool with real Google Calendar API integration
- Support today, week, month, and custom date range queries
- Auto-display calendar events in canvas sidecar
- Handle token refresh automatically
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add canvas TUI system using WezTerm CLI directly (no external deps).
Canvas panes render text, calendar, document, and table views via
ANSI escape codes and box-drawing characters.
New features:
- CanvasManager class with spawn/show/update/close lifecycle
- Built-in renderers: text, calendar, document, table
- IPC methods: canvas:spawn, canvas:show, canvas:update, canvas:close,
canvas:selection, canvas:list
- Canvas tools now use real IPC instead of placeholders
- WezTerm keybinding: LEADER+c for canvas actions menu
The sidecar daemon now manages:
- LSP server (TCP:7777)
- IPC server (Unix socket)
- Tiara orchestrator (workers, tasks)
- Canvas manager (panes, rendering)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add full development environment for the Personas system using stock
nixpkgs packages to ensure dogfooding parity with client installations.
New features:
- `nix develop .#personas` - Full devShell with wezterm, yazi, qdrant
- `nix build .#personas` - Bundle with opencode + stock tools
- `nix run .#qdrant` - Run Qdrant vector database server
- `nix run .#setup-python` - Install openbb + nautilus-trader
- NixOS module for declarative system integration
Stock dependencies: wezterm, yazi, qdrant, ripgrep, fd, fzf, jq, gh
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Updates tiara to include fixes for:
- terminal-manager.test.ts
- verification-pipeline.test.ts
- cross-agent-communication.test.ts
- false-reporting-scenarios.test.ts
- verification-overhead.test.ts
All 137 tests now pass.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>