| Age | Commit message (Collapse) | Author |
|
The Coder subagent was ignoring per-spawn guardrails from
subagentGuardrails and always using SubagentConfig defaults.
Now uses getGuardrail helper to check SpawnGuardrails first,
falling back to SubagentConfig defaults if not specified.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
|
Rename the service from biz-deployer to deployer for simplicity.
Updates Deployer.nix, Beryllium.nix, and Biz.nix.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
|
Add enableCaddy option (default true) to allow hosts like beryllium
that use Tailscale Funnel to disable Caddy reverse proxy.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
|
- Create Omni/Dev/Packages.nix with ava, deployer, deploy-manifest packages
- Add biz-deployer service to Beryllium.nix
- Remove static systemd service from Ava.nix (keep user/dirs setup)
Ava is now deployed via the mini-PaaS system rather than being a
static NixOS service. This enables fast Ava updates without full
NixOS rebuilds - just build, push closure, update manifest.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
|
- Add SpawnGuardrails type for per-spawn resource limits
- Extend SubagentConfig with toolsOverride, systemPrompt, guardrails
- Add General role with balanced tools (file ops, bash, python, search)
- Update spawn_subagent schema to expose general/custom roles and new params
- Add subagent delegation guidance to Ava's system prompt
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
|
- Add per-namespace log files at _/var/bild-logs/<namespace>.log
- Show log path on failure instead of dumping stderr
- Use efficient single-line updates instead of full redraws
- Use cursor save/restore for reliable positioning
- Simplify status symbols (no brackets): * + ~ . x _
- Remove OutputMode distinction (no longer needed)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
|
|
|
Improve error message extraction to preserve meaningful error
information instead of filtering everything out. Fixed fallback
logic and ANSI escape sequence handling to prevent "Unknown error"
messages in CI git notes.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Add explicit --time 0 argument to bild test command
- Add debug logging for BILD_ARGS environment variable
- Strip ANSI escape sequences and carriage returns from error messages
- Fixes ^M characters appearing in git notes
- Ensures timeout is properly disabled for CI runs
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Add extractErrorMessage function to filter meaningful errors
- Extract only lines containing fail/error keywords
- Filter out progress output and warnings
- Limit to first 5 error lines for concise reporting
- Fixes issue with unhelpful progress output in CI notes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Add -r, --rerun option to run CI even when already verified
- Allows re-running CI for testing or validation purposes
- Fixes "verification failed" error when wanting to rerun CI
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Use lint without arguments to leverage git diff instead of all files
- Avoids passing 289 individual files as arguments to lint
- Much faster for clean repos and smaller diffs
- Resolves CI hanging issues during lint phase
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Add isLikelySourceFile filter to exclude dotfiles and config files
- Apply filter before namespaceFromPathOrDie to prevent crashes
- Removes need to add every config file type to namespace system
- Fixes CI failures from .dir-locals.el and similar files
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Add Ctags extension type to Namespace.Ext
- Allow dots in namespace path components for .ctags.d directories
- Mark ctags files as non-buildable in bild
- Fixes CI failure when processing .ctags.d/base.ctags
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Capture stderr from lint/test failures in git notes
- Add progress logging showing file counts
- Fix date format to use UTC
- Include truncated error messages for easier debugging
|
|
Only record user's chat_id for private chats, not group chats.
Previously, interacting in a group would overwrite the user's
chat_id, causing personal reminders to be sent to that group.
|
|
- Add subagent completion callback to notify user when subagent finishes
- Show tool name in 'view trace' link (e.g. 'view web_search trace')
- Pretty-print JSON on trace web page using aeson-pretty
Amp-Thread-ID: https://ampcode.com/threads/T-019b3a13-bc75-7368-9ec9-362d462a022c
Co-authored-by: Amp <amp@ampcode.com>
|
|
Matches the patterns used in Omni/Jr/Web.
|
|
Also added HTML escaping for input/output JSON.
|
|
Tools.hs:
- run_bash now uses mkSuccess (applies truncation)
- read_file requires line ranges for files >500 lines
- read_file rejects ranges >400 lines
Engine.hs:
- Added engine-level truncateToolResult (10k char cap)
- Fixed test detection: bash -> run_bash
|
|
- Rewrote system prompt with TOKEN EFFICIENCY section
- Reduced defaults: timeout 600s, maxCost 50¢, maxTokens 100k
- Added output truncation (8000 char cap) to all tools
- Tightened search limits (30 results, 5 context lines)
|
|
Traces are inserted via Memory.withMemoryDb but web server was using
a different path (AVA_DATA_ROOT/ava.db). Now both use getMemoryDbPath.
|
|
|
|
|
|
|
|
The table creation was in Memory.initMemoryDb but Web.hs opened the
database directly without calling it. Now Trace.hs has its own
initTraceDb function that Web.startWebServer calls on startup.
|
|
|
|
- Add SQLite storage for tool traces (Omni/Ava/Trace.hs)
- Add web server to serve trace viewer (Omni/Ava/Web.hs)
- Add HTML/CSS/JS trace viewer UI (Omni/Ava/Web/trace.html)
- Integrate trace storage into Engine.hs tool execution callback
- Add trace links to Telegram responses when AVA_WEB_URL is set
- Configure Tailscale Funnel for public access
- Fix pre-push hook variable scope bug
- Add direnv, bash, nix to Ava service PATH
- Add mustache dep to Ava.hs for template rendering
Epic: t-272
|
|
- Telegram.hs: add loadTelegramSystemPrompt with fallback
- Subagent.hs: add loadSystemPromptForRole with fallback
- Coder.hs: add loadCoderSystemPrompt with fallback
- Ava.nix: add tmpfiles rules for /home/ava/prompts/
- Prompts.hs: fix test to expect .mustache extension
Templates loaded at runtime from $AVA_DATA_ROOT/prompts/.
Falls back to hardcoded prompts if templates not found.
Amp-Thread-ID: https://ampcode.com/threads/T-019b3878-73be-77ec-97cc-d092a28d211e
Co-authored-by: Amp <amp@ampcode.com>
|
|
- Add promptsDir to Paths.hs for $AVA_DATA_ROOT/prompts/
- Create Omni.Agent.Prompts module with:
- Mustache template loading and rendering
- Automatic partial resolution via automaticCompile
- Frontmatter/metadata parsing for list command
- Create omni-agent-prompt CLI for previewing prompts:
- list: show all available prompts
- render: render prompt with --var and --json context
- Prompts use .mustache extension for automaticCompile compatibility
- Partials referenced with full extension: {{> shared/memory.mustache}}
|
|
- Add AuditLog import to Telegram.hs
- Call writeAvaLog for user messages in both handleEngagement paths
- Call writeAvaLog for assistant responses
- Add logs directories to Ava.nix tmpfiles rules
|
|
- Add direnv to ava's PATH via wrapper
- Create .bashrc with direnv hook on activation
|
|
|
|
|
|
|
|
- Add chat_history table with embeddings in memory.db
- Add saveChatHistoryEntry for live message ingestion
- Add searchChatHistorySemantic for vector similarity search
- Update search_chat_history tool to use semantic search
- Add backfill command: run.sh Omni/Agent/Memory.hs backfill
- Add stats command: run.sh Omni/Agent/Memory.hs stats
- Change default memory.db path to ~/memory.db
- Wire Telegram message handling to save to chat_history async
|
|
Allows Ava to search her conversation logs for past discussions.
Searches UserMessage/AssistantMessage events with case-insensitive
matching, configurable days_back (default 7) and max_results (default 20).
|
|
|
|
Previously used 'enable --now' which only starts stopped services.
Now explicitly calls 'restart' to ensure running services pick up new versions.
|
|
|
|
The coder role no longer requires task_id, only namespace.
|
|
|
|
- Strengthen Telegram MarkdownV2 formatting guidance in Ava's system prompt
- Add DNS record beryl.bensima.com -> 100.127.197.132 (Tailscale IP)
- Modify push.sh to detect local deploys and skip SSH
- Add Tailscale hostname fallback when domain is unreachable
|
|
Remove task_id requirement and all jr task CLI calls. The Coder subagent
now only requires namespace and task description - no external task
tracking needed.
Changes:
- Remove coderTaskId from CoderConfig
- Remove jr task show/update/comment calls
- Commit message uses namespace prefix instead of task ID
- Recovery phase just reverts git, no task comment
- Subagent.hs only validates namespace for Coder role
|
|
Security improvement: subagents now require explicit user confirmation via
Telegram inline buttons, preventing the agent from bypassing approval.
Changes:
- Add InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery types
- Add parseCallbackQuery for handling button presses
- Add sendMessageWithKeyboard and answerCallbackQuery API functions
- Add PendingSpawn registry for tracking unconfirmed spawn requests
- Add spawnSubagentToolWithApproval that sends approval buttons
- Add handleCallbackQuery to process approve/reject button clicks
- Add approveAndSpawnSubagent and rejectPendingSpawn functions
Flow:
1. Agent calls spawn_subagent → creates pending request
2. User receives message with ✅ Approve / ❌ Reject buttons
3. Button click (outside agent loop) spawns or cancels
4. Pending requests expire after 10 minutes
|
|
- Add global subagent registry to track running handles by ID
- Modify executeSpawnSubagent to use spawnSubagentAsync and return immediately
- Add check_subagent tool for querying status or getting results
- Export subagentTools convenience function with both tools
- Update Telegram.hs to use subagentTools instead of just spawnSubagentTool
Ava can now spawn subagents in the background and continue
conversations while checking on progress via check_subagent.
|
|
Based on Anthropic's effective harnesses research.
New modules:
- Omni/Agent/AuditLog.hs: JSONL audit logging with SubagentId linking
- Omni/Agent/Tools/AvaLogs.hs: Tool for Ava to query her own logs
- Omni/Agent/Subagent/HARDENING.md: Design documentation
Key features:
- SubagentHandle with TVar status for async execution and polling
- spawnSubagentAsync, querySubagentStatus, waitSubagent, cancelSubagent
- User confirmation: spawn_subagent requires confirmed=true after approval
- Audit logs stored in $AVA_DATA_ROOT/logs/{ava,subagents}/
- CLI: ava logs [--last=N] [<subagent_id>]
- read_ava_logs tool for Ava self-diagnosis
Tasks: t-267, t-268, t-269, t-270, t-271
|
|
- Wrap ava binary with Python (requests, httpx, pandas, etc.)
- Add CLI tools: curl, pandoc, ffmpeg, imagemagick, csvkit
- Add local whisper-cli fallback when OPENAI_API_KEY unavailable
Amp-Thread-ID: https://ampcode.com/threads/T-019b2dc2-36e0-75e1-90c1-622901fc9847
Co-authored-by: Amp <amp@ampcode.com>
|
|
|
|
- Add LineBuffering to stdout/stderr in Ava.hs
- Add StandardOutput/StandardError=journal to systemd service
|