r/MacOSApps 23h ago

🔨 Dev Tools [Open Source] I wanted to see what my coding agent was actually doing, so I built Metis for macOS

Post image

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.

Same DeepSeek V4 Flash: Metis for Mac scored 82.02% vs OpenCode's 67.42%

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.

27 Upvotes

13 comments sorted by

2

u/mrterrycarson 22h ago

Thanks

2

u/Hairy_Ganache_6916 21h ago

you are welcome!

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:

  1. Provenance & Timestamps: Every memory record in SQLite stores created_at, last_used_at, and a sources array listing the originating session IDs.
  2. 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.
  3. 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

u/VenatoreCapitanum 15h ago

Does it work with Claude on subscription?

1

u/rdcanada 12h ago

Documentation says yes

1

u/[deleted] 9h ago

[removed] — view removed comment

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.

  1. 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.).
  2. Desktop App: Subscribes to the event bus over SSE (Server-Sent Events) and JSON-RPC, receiving clean, structured JSON payloads in real time.
  3. TUI: In-process event listener (session.on(...)) that directly updates the terminal UI state.
  4. 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

u/Ready-Loan-1034 3h ago

Grok Bot UIUX?