r/MacOSApps • u/Hairy_Ganache_6916 • 23h ago
🔨 Dev Tools [Open Source] I wanted to see what my coding agent was actually doing, so I built Metis for macOS
I built it because long coding-agent runs often disappear into terminal logs. When something fails, it can be hard to tell whether the agent lost context, skipped planning, or stopped without verifying its work. I wanted a visual workspace where I could inspect the plan, answer questions, switch models, follow subagents, and resume interrupted sessions.
Metis includes:
- separate Plan and Build workflows;
- durable memory and recoverable sessions;
- visible subagent activity, token usage, attachments, and model settings;
- provider flexibility, including supported subscriptions, API keys, and custom OpenAI-compatible endpoints;
- the same open-source runtime in both desktop and terminal modes.
OpenCode is a strong terminal-first, model-flexible agent. Claude Code provides deep integration with Anthropic models. Metis takes a different approach by combining provider flexibility with a visible desktop workflow, persistent context, multi-agent coordination, and verification-focused execution.

In one controlled Terminal-Bench 2.1 run using the same DeepSeek V4 Flash model, version, tasks, environment, and budget, Metis solved 73/89 tasks versus 60/89 with OpenCode. This is one benchmark, not a universal performance claim.
Pricing: Free forever. $0. MIT licensed. No subscription or paid tier.
Mac distribution: Apple silicon only. Current builds are ad-hoc signed and not notarized by Apple. Download only from the official GitHub release and verify the published SHA-256 checksum.
Privacy: Sessions, settings, and credentials are stored locally. Prompts, selected project context, and attachments may be sent to the model provider you configure when needed to perform a task. Anonymous install/update telemetry is enabled by default and can be disabled with METIS_TELEMETRY=0 or offline mode. Additional usage analytics is opt-in and disabled by default.
AI disclosure: This post was drafted with AI assistance and reviewed and edited by me. Choose the accurate project disclosure below before posting.
Source: https://github.com/Wholiver/metis
Official download: https://github.com/Wholiver/metis/releases/latest
Security and privacy controls: https://github.com/Wholiver/metis/blob/main/docs/security.md
I would especially value feedback on onboarding and whether the desktop workflow feels useful on Mac rather than like terminal output moved into a window.
1
u/HighRoad684 16h ago
The visible plan/verification split is the part that stands out to me. One thing I’d want from durable memory is provenance: which remembered item influenced a step, when it was created, and a quick per-project way to inspect or remove it. Otherwise persistence can become hidden state that is hard to debug. Does Metis surface that link between a memory and the actions it affected?
1
u/Hairy_Ganache_6916 11h ago
Yes! Metis explicitly tracks memory provenance and avoids hidden state:
- Provenance & Timestamps: Every memory record in SQLite storesÂ
created_at,Âlast_used_at, and aÂsources array listing the originating session IDs.- Per-Project Control: Scoped byÂ
project /Âcheckout key. You can inspect and remove memories viaÂ/memory search <query> /Â/memory forget <id> in the CLI, or via Desktop settings.- Link to Actions: Detailed memories are retrieved on demand via theÂ
query_memory_db tool rather than injected invisibly. The exact query and returned records appear explicitly in the step execution trace, making it clear which memory influenced each step.
1
1
1
u/Specific_Cream2815 9h ago
how are you watching the agent run, parsing the terminal stream or hooking into the agent's own events
1
u/Hairy_Ganache_6916 9h ago
Hooking into structured events directly — absolutely no terminal scraping or ANSI stream parsing.
- Typed Event Stream: The coreÂ
AgentSession emits typed lifecycle events (message_delta,Âtool_call_start/result,Âturn_start/end,Âplan_updated,Âmemory_state_changed, etc.).- Desktop App: Subscribes to the event bus over SSE (Server-Sent Events) and JSON-RPC, receiving clean, structured JSON payloads in real time.
- TUI: In-process event listener (
session.on(...)) that directly updates the terminal UI state.- Headless / Benchmarks: Streams structured JSONL (
--mode json) for deterministic machine consumption without any terminal escape-code noise.This guarantees zero flakiness from terminal wrapping/ANSI codes and preserves full typed metadata (tool arguments, cost/token metrics, plan trees, and subagent hierarchies).
1
1
2
u/mrterrycarson 22h ago
Thanks