@rynfar/meridian 1.71.0 → 1.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,197 +1,150 @@
1
1
  <p align="center">
2
- <img src="assets/banner.svg" alt="Meridian" width="800"/>
2
+ <img src="assets/banner.svg" alt="Meridian — Harness Claude, your way." width="800" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
6
- <a href="https://github.com/rynfar/meridian/releases"><img src="https://img.shields.io/github/v/release/rynfar/meridian?style=flat-square&color=58a6ff&label=release" alt="Release"></a>
7
- <a href="https://www.npmjs.com/package/@rynfar/meridian"><img src="https://img.shields.io/npm/v/@rynfar/meridian?style=flat-square&color=bc8cff&label=npm" alt="npm"></a>
8
- <a href="#"><img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-58a6ff?style=flat-square" alt="Platform"></a>
9
- <a href="#"><img src="https://img.shields.io/badge/license-MIT-bc8cff?style=flat-square" alt="License"></a>
10
- <a href="https://discord.gg/jP2a2Z92NZ"><img src="https://img.shields.io/badge/discord-join-5865F2?style=flat-square&logo=discord&logoColor=white" alt="Discord"></a>
6
+ <strong>Your tools. Your sessions. One place to see what’s happening.</strong>
11
7
  </p>
12
8
 
13
- ---
14
-
15
- Meridian bridges the Claude Agent SDK (formerly the Claude Code SDK) to the standard Anthropic API. No OAuth interception. No binary patches. No hacks. Just pure, documented SDK calls. Any tool that speaks the Anthropic or OpenAI protocol — OpenCode, ForgeCode, Crush, Cline, Aider, Pi, Prime Agent, Droid, Jcode, Open WebUI, Claude Code — connects to Meridian and gets Claude, with session management, streaming, and prompt caching handled natively by the SDK.
16
-
17
- > [!NOTE]
18
- > ### How Meridian works with Anthropic
19
- >
20
- > Meridian is built entirely on the [Claude Agent SDK](https://code.claude.com/docs/en/agent-sdk). Every request flows through `query()` — the same documented function Anthropic provides for programmatic access. No OAuth tokens are extracted, no binaries are patched, nothing is reverse-engineered.
21
- >
22
- > Because we use the SDK, Anthropic remains in full control of prompt caching, context window management, compaction, rate limiting, and authentication. Meridian doesn't bypass these mechanisms — it depends on them. Max subscription tokens flow through the correct channel, governed by the same guardrails Anthropic built into Claude Code.
23
- >
24
- > What Meridian adds is a **presentation and interoperability layer**. We translate Claude Code's output into the standard Anthropic API format so developers can connect the editors, terminals, and workflows they prefer. The SDK does the work; Meridian formats the result.
25
- >
26
- > **Our philosophy is simple: work within the SDK's constraints, not around them.** The generous limits on Claude Max exist because Anthropic can optimize and manage usage through Claude Code. Meridian respects that by building only on the tools Anthropic provides — no shortcuts, no workarounds that create friction. We believe this is how developers keep the freedom to choose their own frontends while keeping the platform sustainable for everyone.
27
-
28
- ## Quick Start
29
-
30
- ```bash
31
- # 1. Install
32
- npm install -g @rynfar/meridian
33
-
34
- # 2. Authenticate (one time)
35
- claude login
36
-
37
- # 3. Configure OpenCode plugin (one time — OpenCode users only)
38
- meridian setup # OpenCode V1
39
- # meridian setup --v2 --opencode-bin ~/.local/bin/opencode2 # pinned V2 beta
40
-
41
- # 4. Start
42
- meridian
43
- ```
44
-
45
- Meridian runs on `http://127.0.0.1:3456`. Point any Anthropic-compatible tool at it:
46
-
47
- ```bash
48
- ANTHROPIC_API_KEY=x ANTHROPIC_BASE_URL=http://127.0.0.1:3456 opencode
49
- ```
9
+ <p align="center">
10
+ <a href="https://github.com/rynfar/meridian/releases">Releases</a> ·
11
+ <a href="#get-started">Get started</a> ·
12
+ <a href="docs/agents.md">Connect your agent</a> ·
13
+ <a href="https://discord.gg/jP2a2Z92NZ">Discord</a>
14
+ </p>
50
15
 
51
- The API key value is a placeholder — Meridian authenticates through the Claude Code SDK, not API keys. Most Anthropic-compatible tools require this field to be set, but any value works.
16
+ <p align="center">
17
+ <a href="https://www.npmjs.com/package/@rynfar/meridian"><img src="https://img.shields.io/npm/v/@rynfar/meridian?style=flat-square&color=58a6ff" alt="npm version" /></a>
18
+ <img src="https://img.shields.io/badge/desktop-macOS_preview-bc8cff?style=flat-square" alt="Desktop: macOS preview" />
19
+ <img src="https://img.shields.io/badge/headless-macOS_·_Linux_·_Windows-58a6ff?style=flat-square" alt="Headless: macOS, Linux and Windows" />
20
+ <a href="https://opensource.org/license/mit"><img src="https://img.shields.io/badge/license-MIT-bc8cff?style=flat-square" alt="MIT license" /></a>
21
+ </p>
52
22
 
53
- Using a different agent, NixOS, or Docker? See the [documentation](#documentation) below.
23
+ Meridian connects Anthropic- and OpenAI-compatible clients to Claude through the
24
+ Claude Agent SDK. Keep the editor or terminal you like, with streaming, persistent
25
+ sessions, account routing and visibility into usage and prompt caching.
54
26
 
55
- ## Why Meridian?
27
+ **Now with an optional Mac app.** Manage Meridian versions, install plugins, find
28
+ failed requests and see your usage limits without keeping a terminal open.
29
+ Headless Meridian remains fully supported—npm, Docker, Nix and your existing
30
+ service manager all remain valid ways to run it.
56
31
 
57
- The Claude Agent SDK provides programmatic access to Claude. But your favorite coding tools expect an Anthropic API endpoint. Meridian bridges that gap — it runs locally, accepts standard API requests, and routes them through the SDK. Claude Code does the heavy lifting; Meridian translates the output.
32
+ ## Meet Meridian Desktop
58
33
 
59
34
  <p align="center">
60
- <img src="assets/how-it-works.svg" alt="How Meridian works" width="920"/>
35
+ <img src="assets/desktop-dashboard.jpg" alt="Meridian Desktop overview showing usage limits, cache activity and recent requests. Sample data." width="1000" />
61
36
  </p>
62
37
 
63
- ## Documentation
38
+ <p align="center"><sub>macOS dashboard preview · Sample data</sub></p>
64
39
 
65
- | Guide | What's in it |
66
- |-------|--------------|
67
- | [Agent Setup](docs/agents.md) | Per-agent config: OpenCode, Crush, Droid, Cline, Aider, Codex CLI, Open WebUI, Cherry Studio, ForgeCode, Pi, Claude Code, Claude Design MCP, adapter instances |
68
- | [Configuration](docs/configuration.md) | Environment variables, endpoints, API key auth, SDK feature toggles, passthrough mode, CLI commands |
69
- | [Multi-Profile Support](docs/profiles.md) | Multiple Claude accounts, headless login, sticky session routing |
70
- | [Deployment](docs/deployment.md) | NixOS / Nix flake, Home Manager service, Docker |
71
- | [Plugins](docs/plugins.md) | Plugin system and the official scrub plugins |
72
- | [Development](docs/development.md) | Architecture overview, testing, programmatic API |
73
- | [`MONITORING.md`](MONITORING.md) | Telemetry, token usage, and prompt cache health |
74
- | [`ARCHITECTURE.md`](ARCHITECTURE.md) | Module map and dependency rules |
75
-
76
- ## Features
77
-
78
- - **Standard Anthropic API** — drop-in compatible with any tool that supports a custom `base_url`
79
- - **OpenAI-compatible API** — `/v1/chat/completions` and `/v1/models` for tools that only speak the OpenAI protocol (Open WebUI, Continue, etc.) — no LiteLLM needed, including `image_url` support for data URLs
80
- - **Session management** — conversations persist across requests, survive compaction and undo, resume after proxy restarts
81
- - **Streaming** — full SSE streaming with MCP tool filtering
82
- - **Concurrent sessions** — run parent and subagent requests in parallel
83
- - **Subagent model selection** — primary agents get 1M context; subagents get 200k, preserving rate-limit budget
84
- - **Auto token refresh** — expired OAuth tokens are refreshed automatically; requests continue without interruption
85
- - **Passthrough mode** — forward tool calls to the client instead of executing internally
86
- - **Multimodal** — images, documents, file attachments, and multimodal tool results pass through to Claude
87
- - **Multi-profile** — switch between Claude accounts instantly, no restart needed; opt-in [sticky session routing](docs/profiles.md#sticky-session-routing) distributes sessions across accounts while keeping per-account prompt caches warm
88
- - **Adapter instances** — run several configurations of the same adapter side by side (per-instance thinking, system prompt, passthrough) selected by header or match rules — see [Adapter instances](docs/agents.md#adapter-instances)
89
- - **Telemetry dashboard** — real-time performance metrics at `/telemetry`, including token usage and prompt cache efficiency ([`MONITORING.md`](MONITORING.md))
90
- - **Cost estimation** — estimated API-equivalent value of your traffic, per model and per profile, using current list prices with configurable overrides (`~/.config/meridian/model-pricing.json`, editable at `/settings`)
91
- - **Envelope integrity auditing** — Meridian validates its own wire output on every response (no dangling blocks, no undelivered or empty tool calls) and surfaces violations on the dashboard
92
- - **Telemetry persistence** — opt-in SQLite storage for telemetry data that survives proxy restarts, with configurable retention
93
- - **Prometheus metrics** — `GET /metrics` endpoint for scraping request counters and duration histograms
94
- - **SDK feature toggles** *(experimental)* — unlock Claude Code features (memory, dreaming, CLAUDE.md) for any connected agent
95
-
96
- ## Tested Agents
97
-
98
- | Agent | Status | Notes |
99
- |-------|--------|-------|
100
- | [OpenCode](https://github.com/anomalyco/opencode) | ✅ Verified | V1 and pinned V2 beta support; requires the matching `meridian setup` mode ([setup](docs/agents.md#opencode)) — tools, durable resume, restart, undo, compaction, parallel subagents |
101
- | [ForgeCode](https://forgecode.dev) | ✅ Verified | Provider config (see [Agent Setup](docs/agents.md)) — passthrough tool execution, session resume, streaming |
102
- | [Droid (Factory AI)](https://factory.ai/product/ide) | ✅ Verified | BYOK config (see [Agent Setup](docs/agents.md)) — full tool support, session resume, streaming |
103
- | [Crush](https://github.com/charmbracelet/crush) | ✅ Verified | Provider config (see [Agent Setup](docs/agents.md)) — full tool support, session resume, headless `crush run` |
104
- | [Cline](https://github.com/cline/cline) | ✅ Verified | Config (see [Agent Setup](docs/agents.md)) — full tool support, file read/write/edit, bash, session resume |
105
- | [Aider](https://github.com/paul-gauthier/aider) | ✅ Verified | Env vars — file editing, streaming; `--no-stream` broken (litellm bug) |
106
- | [Open WebUI](https://github.com/open-webui/open-webui) | ✅ Verified | OpenAI-compatible endpoints — set base URL to `http://127.0.0.1:3456` |
107
- | [Pi](https://github.com/mariozechner/pi-coding-agent) | ✅ Verified | models.json config (see [Agent Setup](docs/agents.md)) — full tool support via passthrough; detected via `x-meridian-agent: pi` header |
108
- | [Prime Agent](https://www.npmjs.com/package/prime-agent) | ⚠️ Single-agent verified | Extension config (see [Agent Setup](docs/agents.md)) — reliable with one active agent. Concurrent RLM subagents receive distinct session keys, but are not yet production-safe; see [Prime Agent subagents](#prime-agent-subagents). The extension's `metadata.user_id` stamp is **required**, not optional. |
109
- | [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | ✅ Verified | `ANTHROPIC_BASE_URL` — remote clients share a Max subscription over the network; client CWD preserved in system prompt |
110
- | [Cherry Studio](https://github.com/CherryHQ/cherry-studio) | ✅ Verified | `cherry` adapter (see [Agent Setup](docs/agents.md)) — chat client with Claude's built-in web search via internal mode |
111
- | [Polytoken](https://polytoken.dev/) | ✅ Verified | Provider config (see [Agent Setup](docs/agents.md#Polytoken)) — `X-Polytoken-Session` identity, mandatory client-owned tools (passthrough cannot be disabled), signed-thinking passthrough |
112
- | Jcode | ✅ Verified | `/v1/chat/completions` + `x-jcode-session` header — dedicated `jcode` adapter keeps append-only history intact, so retained sessions resume on one SDK session (90.9% cache hit on turn 2 of a two-turn Opus session) |
113
- | [Codex CLI](https://github.com/openai/codex) | ✅ Verified | `/v1/responses` (see [Agent Setup](docs/agents.md)) — Responses-API provider, passthrough tool execution; verified on 0.144 (plain + tool-driving turns) |
114
- | [Continue](https://github.com/continuedev/continue) | 🔲 Untested | OpenAI-compatible endpoints should work — set `apiBase` to `http://127.0.0.1:3456` |
115
-
116
- ### Prime Agent subagents
117
-
118
- Prime Agent is reliable through Meridian with one active agent. RLM children have
119
- separate session identities and can execute successfully, but concurrent subagent
120
- orchestration is not yet production-safe. Observed failure modes include overload
121
- amplification, expensive cache churn after fresh-session replay, loss of child-task
122
- context during recovery, and undelivered tool envelopes. Use a single active Prime
123
- Agent for unattended or usage-sensitive work until coordinated fixes land in Prime
124
- Agent and Meridian.
125
-
126
- Parent-to-child cancellation is handled on the Meridian side: when the extension
127
- stamps `parent_session_id` alongside the child's session id, aborting a parent's
128
- in-flight request aborts every live request in the subtree below it and evicts
129
- each one's session mapping. See
130
- [Subagent cancellation](docs/agents.md#prime-agent).
131
-
132
- Prime Agent can keep Opus on the root session while selecting Sol for an individual
133
- child. A child inherits its parent's model unless the `rlm` call supplies an exact
134
- `provider/model` selector returned by `rlm.find_models()`:
135
-
136
- ```python
137
- sol_models = await rlm.find_models("sol")
138
- print(sol_models) # choose an available exact selector for your authenticated providers
139
-
140
- child = await rlm(
141
- "Review this change and report your findings to the parent.",
142
- name="sol-reviewer",
143
- model="openai-codex/gpt-5.6-sol",
144
- )
145
- ```
40
+ | See what matters | Keep it under control |
41
+ | --- | --- |
42
+ | **Usage & limits** account quota windows, reset times and token activity. | **Versions** install published Meridian releases, switch versions and roll back. |
43
+ | **Requests & cache** — timing, failures, cache history and request details. | **Service** — start, stop, restart and recover an app-managed installation. |
44
+ | **Logs & alerts** — searchable diagnostics and opt-in failure, cache and quota notifications. | **Plugins** install and update the Pi, OpenCode, Hermes and OpenClaw scrub plugins. |
146
45
 
147
- The selector above requires an authenticated OpenAI Codex provider in Prime Agent;
148
- Prime Inference may expose a different Sol selector. Explicit child model selection
149
- reduces Claude Max pressure, but does not by itself fix the orchestration and
150
- cancellation limitations above.
46
+ Native macOS chrome, menu bar controls and Liquid Glass on supported Macs through
47
+ [electron-liquid-glass](https://github.com/Meridius-Labs/electron-liquid-glass).
48
+ The desktop preview targets **macOS on Apple Silicon**. Linux and Windows desktop
49
+ apps are planned; their runtime support is not ready yet.
151
50
 
152
- Tested an agent or built a plugin? [Open an issue](https://github.com/rynfar/meridian/issues) and we'll add it.
51
+ ## Get started
153
52
 
154
- ## FAQ
53
+ ### With the Mac app
155
54
 
156
- **Is this allowed by Anthropic's terms?**
157
- Meridian uses the official Claude Agent SDK — the same SDK Anthropic publishes and documents for programmatic access. It does not intercept credentials, modify binaries, or bypass any authentication. All requests flow through the SDK's own authentication and rate-limiting mechanisms.
55
+ The first downloadable desktop release is being prepared. Until it is published,
56
+ use the [desktop preview instructions](apps/desktop/README.md#run-locally).
57
+ Signed, notarized `.dmg` and `.zip` downloads will appear under
58
+ [GitHub Releases](https://github.com/rynfar/meridian/releases).
158
59
 
159
- **How is this different from using an API key?**
160
- API keys provide direct API access billed per token. Claude Max includes programmatic access through the Claude Agent SDK. Meridian translates SDK responses into the standard Anthropic API format, allowing compatible tools to connect through Claude Code.
60
+ 1. Connect to an existing local Meridian service, or install Meridian from **Versions**.
61
+ 2. For a new installation, choose app management in **Service** and start it.
62
+ 3. Sign in to a Claude account, then follow your [agent’s setup guide](docs/agents.md).
161
63
 
162
- **What happens if my OAuth token expires?**
163
- Tokens expire roughly every 8 hours. Meridian detects the expiry, refreshes the token automatically, and retries the request — so requests continue transparently. If the refresh fails (e.g. the refresh token has expired after weeks of inactivity), Meridian returns a clear error telling you to run `claude login`.
64
+ The app can monitor Docker or Nix installations through a published local HTTP
65
+ port. Their package manager retains control of updates and lifecycle. Supported
66
+ macOS LaunchAgents can be handed to the app and returned to headless operation.
67
+ [How service ownership works →](apps/desktop/README.md#connect-to-an-existing-installation)
164
68
 
165
- **Can I trigger a token refresh manually?**
69
+ ### Headless, as always
166
70
 
167
- ```bash
168
- # CLI — works whether the proxy is running or not
169
- meridian refresh-token
71
+ Requires Node.js 22 or newer and a Claude account configured for the SDK.
170
72
 
171
- # HTTP — while the proxy is running
172
- curl -X POST http://127.0.0.1:3456/auth/refresh
73
+ ```sh
74
+ npm install -g @rynfar/meridian
75
+ claude login
76
+ meridian
173
77
  ```
174
78
 
175
- **I'm getting `400 You're out of extra usage` on tool-bearing requests. What do I do?**
176
- This error class ([#516](https://github.com/rynfar/meridian/issues/516), historical) came from Anthropic's server-side classifier gating certain requests behind Extra Usage. It had two distinct triggers, both now addressed:
79
+ Meridian listens at `http://127.0.0.1:3456`. For OpenCode V1, run
80
+ `meridian setup` once and restart OpenCode. Other clients—including OpenCode V2—have
81
+ [specific setup instructions](docs/agents.md).
177
82
 
178
- - **Harness fingerprints** — identity lines in a client's system prompt (e.g. pi's "coding agent harness" line) were metered as Extra Usage. The [official scrub plugins](docs/plugins.md#official-plugins) strip these and remain recommended for the affected harnesses.
179
- - **Tool-definition presence** reported in mid-2026 as triggering independently of prompt content; as of July 2026 this no longer reproduces on Max accounts (verified with Extra Usage disabled, tools present, and an unscrubbed fingerprint prompt). It appears to have been resolved upstream in Anthropic's billing policy.
83
+ ```sh
84
+ # Example for a POSIX shell, with Meridian API-key protection disabled:
85
+ ANTHROPIC_API_KEY=x ANTHROPIC_BASE_URL=http://127.0.0.1:3456 opencode
86
+ ```
180
87
 
181
- If you still hit the error on a current release, first check `GET /v1/usage/quota` to rule out genuinely exhausted quota, then try disabling the connecting client's system prompt for the affected adapter while keeping the Claude Code prompt enabled (in the `/settings` UI under **SDK Feature Toggles**, or `PATCH /settings/api/features/<adapter>` with `{"clientSystemPrompt":false,"codeSystemPrompt":true}`) — and please report it on [#516](https://github.com/rynfar/meridian/issues/516) with your plan type, since remaining occurrences are likely account-cohort specific (Team plans are treated differently by the API).
88
+ `x` is a client-required placeholder. If you configure Meridian’s API-key
89
+ protection, use that key instead. Claude authentication comes from the configured
90
+ Claude account. See [configuration](docs/configuration.md) for authentication,
91
+ ports and Windows setup, or [deployment](docs/deployment.md) for Docker and Nix.
92
+
93
+ **No desktop dependency.** Installing the headless package does not install
94
+ Electron. You can run Meridian entirely without the app, including its browser
95
+ [telemetry dashboard](MONITORING.md).
96
+
97
+ ## Built for ongoing work
98
+
99
+ - **Keep conversations going.** Sessions resume across requests and proxy restarts,
100
+ with handling for client compaction, undo and branching.
101
+ - **Use the protocol your client speaks.** Anthropic Messages, OpenAI Chat
102
+ Completions and Responses endpoints, including streaming and tool forwarding.
103
+ - **Keep accounts organized.** Multiple Claude profiles, explicit account selection
104
+ and opt-in sticky session routing.
105
+ - **Understand cache behavior.** Request history, prompt-cache metrics, diagnostic
106
+ events and optional persistent telemetry. API-equivalent cost estimates are
107
+ estimates, not your subscription bill.
108
+ - **Keep your deployment.** CLI, containers, declarative Nix services or the
109
+ optional desktop manager share the same Meridian server.
182
110
 
183
- **I'm hitting rate limits on 1M context. What do I do?**
184
- Meridian defaults Sonnet to 200k context because Sonnet 1M is always billed as Extra Usage on Max plans — even when regular usage isn't exhausted. This is [Anthropic's intended billing model](https://code.claude.com/docs/en/model-config#extended-context), not a bug. Set `MERIDIAN_SONNET_MODEL=sonnet[1m]` to opt in if you have Extra Usage enabled and understand the billing implications. Opus defaults to 1M context, which is included with Max/Team/Enterprise subscriptions at no extra cost. Fable defaults to 1M too — verified as included on Max and Team accounts at no Extra Usage cost — and Mythos, which rides the Fable tier, inherits the same default. Note: there is a [known upstream bug](https://github.com/anthropics/claude-code/issues/39841) where Claude Code incorrectly gates Opus 1M behind Extra Usage on Max — this is Anthropic's to fix.
111
+ <p align="center">
112
+ <img src="assets/how-it-works.svg" alt="Your client connects to Meridian, which sends requests through the Claude Agent SDK." width="920" />
113
+ </p>
185
114
 
186
- To turn off 1M context entirely for **every** model (so Meridian never requests the extended window), set `MERIDIAN_1M_CONTEXT_SUPPORT=0`. To back off a single tier instead — without giving up the other tier's included 1M context — set `MERIDIAN_FABLE_MODEL=fable` or `MERIDIAN_OPUS_MODEL=opus` (both also accept the `CLAUDE_PROXY_` prefix). Meridian also auto-detects the "out of extra usage" error, falls back to the 200k model, and skips 1M for an hour — so it self-heals after the first occurrence even without the env var.
115
+ Meridian uses the SDK’s authentication and request execution. Account access,
116
+ model availability and usage limits still depend on your provider account.
187
117
 
188
- **Why does the health endpoint show `"plugin": "not-configured"`?**
189
- You haven't run `meridian setup`. Without the plugin, OpenCode requests won't have session tracking or subagent model selection. Run `meridian setup` and restart OpenCode.
118
+ ## Bring your agent
190
119
 
191
- ## Contributing
120
+ Setup guides cover **OpenCode, Pi, Claude Code, Codex CLI, Cline, Aider, Crush,
121
+ ForgeCode, Droid, Open WebUI, Cherry Studio, Polytoken, Jcode and Prime Agent**.
122
+ Compatibility varies by client and version; see the
123
+ [tested-agent matrix](docs/agents.md#compatibility-at-a-glance) for evidence and
124
+ limitations. Prime Agent concurrent subagents remain unsuitable for unattended
125
+ or usage-sensitive work. Continue is unverified.
192
126
 
193
- Issues and PRs welcome. Join the [Discord](https://discord.gg/jP2a2Z92NZ) to discuss ideas before opening issues. See [`ARCHITECTURE.md`](ARCHITECTURE.md) for module structure and dependency rules, [`CLAUDE.md`](CLAUDE.md) for coding guidelines, [`E2E.md`](E2E.md) for end-to-end test procedures, and [`MONITORING.md`](MONITORING.md) for understanding token usage and prompt cache health.
127
+ The desktop **Plugins** page installs the four official scrub plugins. Client
128
+ connection setup is still separate; installing a scrub plugin does not configure
129
+ its corresponding client. [Plugin guide →](docs/plugins.md)
194
130
 
195
- ## License
131
+ ## Documentation
196
132
 
197
- MIT
133
+ | Start here | What you’ll find |
134
+ | --- | --- |
135
+ | [Desktop guide](apps/desktop/README.md) | Setup, service ownership, updates, plugins and platform status |
136
+ | [Agent setup](docs/agents.md) | Client configuration and compatibility notes |
137
+ | [Configuration](docs/configuration.md) | CLI, environment variables, endpoints and API-key protection |
138
+ | [Accounts & profiles](docs/profiles.md) | Sign-in, multiple accounts and session routing |
139
+ | [Deployment](docs/deployment.md) | Docker, Nix and headless services |
140
+ | [Plugins](docs/plugins.md) | Official packages and plugin configuration |
141
+ | [Monitoring](MONITORING.md) | Usage, request diagnostics and prompt caching |
142
+ | [Development](docs/development.md) | Build, test and programmatic API |
143
+ | [Desktop releases](docs/desktop-releases.md) | Signing, notarization and download publication |
144
+
145
+ ## Contribute
146
+
147
+ [Report a bug or suggest a feature](https://github.com/rynfar/meridian/issues),
148
+ open a PR, or join [Discord](https://discord.gg/jP2a2Z92NZ).
149
+ Read [AGENTS.md](AGENTS.md), [ARCHITECTURE.md](ARCHITECTURE.md) and
150
+ [E2E.md](E2E.md) before changing behavior. Meridian is [MIT licensed](https://opensource.org/license/mit).
Binary file
Binary file
Binary file
Binary file