Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7bda0c7
feat: add no-clone marketplace manifests for claude and cursor
FrkAk Jun 9, 2026
58062e8
feat: rename codex marketplace to mymir for public install
FrkAk Jun 9, 2026
96b1918
feat: add antigravity plugin bundle generated from claude canonical
FrkAk Jun 9, 2026
639067a
test: guard plugin manifests and two-server mcp pattern
FrkAk Jun 9, 2026
e03ace0
docs: split readme into hosted-first and self-host install
FrkAk Jun 9, 2026
9de9fe0
feat: remove gemini plugin in favor of antigravity
FrkAk Jun 9, 2026
c2d3e60
test: assert antigravity bundles every shared skill
FrkAk Jun 9, 2026
5ae2e32
chore: bump plugin version to 1.8.0
FrkAk Jun 9, 2026
fe6f184
feat: add root codex marketplace for no-clone install
FrkAk Jun 9, 2026
59257b7
chore: manage plugin version via .version-bump.json
FrkAk Jun 9, 2026
9ef2ad5
docs: restore what gets installed section in readme
FrkAk Jun 9, 2026
1f6a9e1
chore: docs
FrkAk Jun 9, 2026
850e52e
fix: show target-specific onboarding commands
FrkAk Jun 9, 2026
bdc69ce
fix: harden version-bump script and add tests
FrkAk Jun 10, 2026
7807fcb
fix: refuse version write when nested field shadows top level
FrkAk Jun 10, 2026
b4ed0ad
refactor: drop redundant env read and fix modal prop docs
FrkAk Jun 10, 2026
3cf66b9
docs: align readme install copy with house tone
FrkAk Jun 10, 2026
12d1662
docs: correct gemini cli sunset date tense
FrkAk Jun 10, 2026
3ad90e7
feat: replace gemini with antigravity in agent brand cards
FrkAk Jun 10, 2026
e3d0b8f
fix: align antigravity config paths with official docs
FrkAk Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "mymir",
"interface": {
"displayName": "Mymir"
},
"plugins": [
{
"name": "mymir",
"source": {
"source": "git-subdir",
"url": "https://github.com/FrkAk/mymir.git",
"path": "plugins/codex"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Coding"
}
]
}
17 changes: 17 additions & 0 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "mymir",
"owner": {
"name": "Mymir"
},
"plugins": [
{
"name": "mymir",
"source": {
"source": "git-subdir",
"url": "https://github.com/FrkAk/mymir.git",
"path": "plugins/claude-code"
},
"description": "Persistent context network for coding projects. Tracks tasks, dependencies, and decisions across sessions."
}
]
}
17 changes: 17 additions & 0 deletions .cursor-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "mymir",
"owner": {
"name": "Mymir",
"email": "hello@mymir.dev"
},
"metadata": {
"description": "Persistent context network for coding agents."
},
"plugins": [
{
"name": "mymir",
"source": "plugins/cursor",
"description": "Persistent context network for coding projects. Tracks tasks, dependencies, and decisions across sessions."
}
]
}
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,5 @@ jobs:
run: bun run test
- name: Check plugin drift
run: bun run check:plugins
- name: Check version drift
run: bun run check:version
15 changes: 15 additions & 0 deletions .version-bump.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"files": [
{
"path": "plugins/claude-code/.claude-plugin/plugin.json",
"field": "version"
},
{ "path": "plugins/codex/.codex-plugin/plugin.json", "field": "version" },
{ "path": "plugins/cursor/.cursor-plugin/plugin.json", "field": "version" },
{ "path": "plugins/antigravity/plugin.json", "field": "version" },
{
"path": "lib/mcp/create-server.ts",
"pattern": "name: \"mymir\", version: \"{version}\""
}
]
}
96 changes: 51 additions & 45 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
  
<a href="#cursor"><img alt="Cursor" src="https://img.shields.io/badge/Cursor-000000?style=flat-square&logo=cursor&logoColor=white" /></a>
&nbsp;&nbsp;
<a href="#gemini"><img alt="Gemini CLI" src="https://img.shields.io/badge/Gemini_CLI-4285F4?style=flat-square&logo=googlegemini&logoColor=white" /></a>
<a href="#antigravity"><img alt="Antigravity" src="https://img.shields.io/badge/Antigravity-4285F4?style=flat-square&logo=google&logoColor=white" /></a>
</p>

<p align="center">
Expand All @@ -21,78 +21,84 @@ Mymir replaces that cycle. It's not just a context layer your agents read from,

---

## How to set it up
## Use the hosted version (no clone)

You need [Bun](https://bun.sh) (v1.0+) and [Docker](https://docs.docker.com/get-docker/) for PostgreSQL. Linux or macOS or Windows with WSL2.
Mymir is hosted at [app.mymir.dev](https://app.mymir.dev). The plugin installs into your coding agent once, at the user level, and works in every project you open, no clone required. Run the one-time install for your agent and sign in when prompted (OAuth, once per machine).

Clone the repo and install dependencies:
### Claude Code

```bash
git clone git@github.com:FrkAk/mymir.git
cd mymir
bun install --production
cp .env.local.example .env.local
claude plugin marketplace add FrkAk/mymir
claude plugin install mymir@mymir
```

**Bring your own coding agent.** Mymir works directly inside the coding agent you already use: Claude Code, Codex, Cursor, or Gemini CLI. Brainstorm, decompose, and project activation happen there. The web app is for refining specs, planning, and tracking progress on `active` projects from the browser.
Then run `/mcp`, select **mymir**, and complete the browser sign-in.

Fill in `.env.local` by following the numbered steps at the top of `.env.local.example`. You generate three `openssl rand -hex 32` passwords for the Postgres roles (same value in each `*_PASSWORD` and its matching URL) and one `openssl rand -base64 32` for `BETTER_AUTH_SECRET`.

Spin up Postgres and push the schema:
### Codex

```bash
bun run db:setup
codex plugin marketplace add FrkAk/mymir
```

Build and start the server and open [localhost:3000](http://localhost:3000):
Open Codex, run `/plugin`, install **Mymir**, restart, and authenticate when prompted. Invoke the main skill with `$mymir`. (If your Codex build can't resolve the root marketplace, append `--sparse plugins`.)

```bash
bun run build
bun run start
```
### Cursor

Mymir ships as four standalone plugin/extension dirs, one per supported CLI under `plugins/<cli>/`. With the dev server running, install the one that matches your tool.
- **MCP only, any plan (quick start):** open the install deeplink, then sign in on the first tool call:

### Claude Code
```text
cursor://anysphere.cursor-deeplink/mcp/install?name=mymir&config=eyJ1cmwiOiJodHRwczovL2FwcC5teW1pci5kZXYvYXBpL21jcCJ9
```

```bash
claude plugin marketplace add ./plugins/claude-code
claude plugin install mymir@mymir-local
- **Team/Enterprise (skills + MCP):** *Dashboard → Settings → Plugins → Team Marketplaces → Add Marketplace → Import from Repo*, paste `https://github.com/FrkAk/mymir`. Team Marketplaces is a Teams/Enterprise feature.
- **Public Marketplace:** listing in the [Cursor Marketplace](https://cursor.com/marketplace) requires submission and manual review. Search-and-install lands once Mymir is published.

### Antigravity

Add the Mymir MCP server to your global config and authenticate (Antigravity handles OAuth automatically). The IDE and the CLI share one config at `~/.gemini/config/mcp_config.json` (in the IDE: MCP Store → Manage MCP Servers → View raw config):

```json
{
"mcpServers": {
"mymir": { "serverUrl": "https://app.mymir.dev/api/mcp" }
}
}
```

Authenticate with `/mcp`, select **mymir**, and complete the browser sign-in (once per machine).
Then run `/mcp` (CLI) or open the MCP manager (IDE) and Authenticate. The workflow skills ship as a bundled plugin: clone this repo and copy `plugins/antigravity/` into `~/.gemini/config/plugins/` (global) or `.agents/plugins/` at your workspace root. The bundled `mcp_config.json` also includes a `mymir-local` server for self-host.

Update with `claude plugin update mymir@mymir-local` and restart Claude Code. MCP server changes (`lib/mcp/`) apply immediately without an update.
> **Gemini CLI users:** Antigravity replaces Gemini CLI (consumer access ends 2026-06-18). Run `agy plugin import gemini` to migrate, then use the Antigravity setup above.

### Codex
---

```bash
codex plugin marketplace add ./plugins
```
## Self-host / contribute

Open Codex, run `/plugin`, search for **Mymir**, install, then restart. Invoke the main skill explicitly with `$mymir` when needed.
Self-hosting is free under AGPL-3.0. You run the Mymir server yourself and point the plugin's **`mymir-local`** server at it, no env vars required.

### Gemini
You need [Bun](https://bun.sh) (v1.0+) and [Docker](https://docs.docker.com/get-docker/) for PostgreSQL. Linux, macOS, or Windows with WSL2.

```bash
gemini extensions install ./plugins/gemini
git clone git@github.com:FrkAk/mymir.git
cd mymir
bun install --production
cp .env.local.example .env.local
```

Authenticate with `/mcp auth mymir` and complete the browser sign-in.

Update with `gemini extensions update mymir`; remove with `gemini extensions uninstall mymir`.

### Cursor
Fill in `.env.local` by following the numbered steps at the top of `.env.local.example`. Then bring up Postgres, build, start, and open [localhost:3000](http://localhost:3000):

```bash
ln -s "$(pwd)/plugins/cursor" ~/.cursor/plugins/local/mymir
bun run db:setup
bun run build
bun run start
```

Restart Cursor (or run **Developer: Reload Window**). The MCP server and five skills (`mymir`, `brainstorm`, `decompose`, `manage`, `onboarding`) load automatically. First MCP tool call triggers OAuth in your browser. Trigger a skill with `/mymir`, `/brainstorm`, etc., or let the agent auto-invoke based on your prompt.
Install the plugin for your agent as above, but select the **`mymir-local`** server (it points at `http://localhost:3000/api/mcp`). Advanced self-hosters on a custom domain can set `MYMIR_URL` to repoint the default `mymir` server in Claude Code; Codex and Cursor read a hardcoded hosted URL, so edit their `mcp.json` directly if you need a custom domain.

Self-hosted: edit `plugins/cursor/mcp.json` to point at your deployment URL before symlinking.
Contributors install from the local checkout: `claude plugin marketplace add ./plugins/claude-code` (Claude Code), `codex plugin marketplace add ./plugins` (Codex), or copy `plugins/cursor` into `~/.cursor/plugins/local/`. Shared skills live in `plugins/claude-code/` (canonical); after editing them run `bun run sync:plugins` to regenerate every brand's copy (`bun run check:plugins` is CI-enforced).

---

### What gets installed
## What gets installed

All four plugins bundle the shared components:

Expand All @@ -105,7 +111,7 @@ All four plugins bundle the shared components:
| **Decompose workflow** | Break a project brief into a dependency graph |
| **Manage workflow** | Strategic CTO-mode review: rebalance the graph, audit dependencies, prune orphans, consolidate categories |

In Codex, Cursor, and Gemini each workflow is a skill invoked by slash command. In Claude Code each is also available as a dispatchable agent (via the Task tool) so the main `/mymir` skill can hand off work in a clean per-agent context.
In Codex, Cursor, and Antigravity each workflow is a skill invoked by slash command. In Claude Code each is also available as a dispatchable agent (via the Task tool) so the main `/mymir` skill can hand off work in a clean per-agent context.

**Claude Code additionally bundles:**

Expand All @@ -116,13 +122,13 @@ In Codex, Cursor, and Gemini each workflow is a skill invoked by slash command.
| **`mymir:decompose-task` agent** | Splits an existing oversize task in an active project into 2 to N children, rewires every dependency edge touching the parent, cancels the parent with rationale citing the children. Composer's oversize handler routes here. |
| **`mymir:decompose-feature` agent** | Adds a new feature or capability cluster to an active project. Reuses existing categories and tag vocabulary; creates 5 to 20 tasks plus internal and integration edges. |

(Composer depends on a subagent dispatch primitive for clean per-phase contexts and tool-restriction enforcement. Codex, Cursor, and Gemini do not yet have an equivalent, so composer is Claude Code only for now.)
(Composer depends on a subagent dispatch primitive for clean per-phase contexts and tool-restriction enforcement. Codex, Cursor, and Antigravity do not yet have an equivalent, so composer is Claude Code only for now.)

---

## How it runs

Mymir ships as a Next.js web app plus vendor-native plugins for Claude Code, Codex, Cursor, and Gemini. Each plugin bundles 6 MCP tools, the four core workflows (brainstorm, onboarding, decompose, manage), and a `/mymir` skill that auto-invokes when you talk about projects, tasks, or planning. Claude Code adds end-to-end task orchestration via `/mymir:composer` plus `decompose-task` and `decompose-feature` for surgical decomposition within active projects. You don't call tools manually, you just talk.
Mymir ships as a Next.js web app plus vendor-native plugins for Claude Code, Codex, Cursor, and Antigravity. Each plugin bundles 6 MCP tools, the four core workflows (brainstorm, onboarding, decompose, manage), and a `/mymir` skill that auto-invokes when you talk about projects, tasks, or planning. Claude Code adds end-to-end task orchestration via `/mymir:composer` plus `decompose-task` and `decompose-feature` for surgical decomposition within active projects. You don't call tools manually, you just talk.

**Three entry paths, one graph.**

Expand Down Expand Up @@ -154,7 +160,7 @@ Mymir ships as a Next.js web app plus vendor-native plugins for Claude Code, Cod
**Add and refine mid-flow.** Spot something missing, describe it, and push back until it's right:

```text
❯ Add a task for an onboarding agent that records shipped work as done tasks. Relate it to the codex/gemini support task.
❯ Add a task for an onboarding agent that records shipped work as done tasks. Relate it to the codex/antigravity support task.
```

```text
Expand Down
6 changes: 3 additions & 3 deletions app/settings/_components/AgentsTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ interface AgentsTabProps {
}

/** Canonical brands rendered as fixed sections, in display order. */
const KNOWN_BRANDS = ["Claude Code", "Codex", "Gemini", "Cursor"] as const;
const KNOWN_BRANDS = ["Claude Code", "Codex", "Antigravity", "Cursor"] as const;
type KnownBrand = (typeof KNOWN_BRANDS)[number];
const KNOWN_BRAND_SET: ReadonlySet<string> = new Set(KNOWN_BRANDS);

Expand All @@ -34,7 +34,7 @@ function groupSessions(sessions: OAuthSessionView[]): {
const byBrand: Record<KnownBrand, OAuthSessionView[]> = {
"Claude Code": [],
Codex: [],
Gemini: [],
Antigravity: [],
Cursor: [],
};
const otherSessions: OAuthSessionView[] = [];
Expand All @@ -53,7 +53,7 @@ function groupSessions(sessions: OAuthSessionView[]): {

/**
* Agents & devices tab — H1 + subhead + four fixed brand cards (Claude Code,
* Codex, Cursor, Gemini) plus a catch-all card when non-canonical clients
* Codex, Antigravity, Cursor) plus a catch-all card when non-canonical clients
* have authorized sessions. Optimistically removes a row on revoke and
* surfaces an inline error if the server rejects.
*
Expand Down
Loading