{"id":51039281,"url":"https://github.com/brandonkramer/open-cursor","last_synced_at":"2026-06-22T09:30:28.714Z","repository":{"id":363835439,"uuid":"1265137959","full_name":"brandonkramer/open-cursor","owner":"brandonkramer","description":"Cursor agent provider extension for pi and opencode","archived":false,"fork":false,"pushed_at":"2026-06-10T15:04:24.000Z","size":185,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-10T16:08:54.296Z","etag":null,"topics":["connectrpc","cursor","cursor-agent","opencode","pi-coding-agent"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brandonkramer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-10T13:53:58.000Z","updated_at":"2026-06-10T15:09:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/brandonkramer/open-cursor","commit_stats":null,"previous_names":["brandonkramer/open-cursor"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/brandonkramer/open-cursor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonkramer%2Fopen-cursor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonkramer%2Fopen-cursor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonkramer%2Fopen-cursor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonkramer%2Fopen-cursor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brandonkramer","download_url":"https://codeload.github.com/brandonkramer/open-cursor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonkramer%2Fopen-cursor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34643409,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["connectrpc","cursor","cursor-agent","opencode","pi-coding-agent"],"created_at":"2026-06-22T09:30:26.781Z","updated_at":"2026-06-22T09:30:28.710Z","avatar_url":"https://github.com/brandonkramer.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Opencursor\n\n[![cursor-agent](https://badgen.net/static/cursor-agent/2026.06.04-5fd875e/gray)](https://cursor.com/cli)\n[![@open-cursor/pi-agent](https://badgen.net/npm/v/@open-cursor/pi-agent?label=%40open-cursor%2Fpi-agent)](https://www.npmjs.com/package/@open-cursor/pi-agent)\n[![@open-cursor/opencode-agent](https://badgen.net/npm/v/@open-cursor/opencode-agent?label=%40open-cursor%2Fopencode-agent)](https://www.npmjs.com/package/@open-cursor/opencode-agent)\n\nCursor Agent provider extension for [pi](https://github.com/badlogic/pi-mono).\n\nUse Cursor's AI models directly from **pi** or **opencode** with your existing Cursor subscription. Supports Claude, GPT, Gemini, Grok, Composer, and Kimi models.\n\n## Install\n\n```bash\n# Install from npm\npi install npm:@open-cursor/pi-agent\n\n# Or load as a one-off extension\npi -e npm:@open-cursor/pi-agent\n```\n\n## Architecture\n\n```\npi/opencode ──► opencursor ──► Cursor API (ConnectRPC/HTTP2)\n                    │\n                    ├── tool calls (read, write, bash, edit) ← relayed via tool-bridge\n                    │\n                    └── protobuf conversation state ← persisted to disk\n```\n\n## Protocol\n\nReverse-engineered Cursor agent protobuf protocol over ConnectRPC. Proto definitions in `proto/`, generated TypeScript in `packages/protocol/src/__generated__/`.\n\n### Detect Drift\n\n```sh\npython3 scripts/diff-protocol.py          # exits 1 if gaps found\npython3 scripts/extract-models.py         # check version + model count\npython3 scripts/diff-protos.py            # field-level drift\n```\n\n## Credits \u0026 Sources\n\n- [Jordan-Jarvis/cursor-grpc](https://github.com/Jordan-Jarvis/cursor-grpc) — RE'd proto files from Cursor IDE\n- [eisbaw/cursor_api_demo](https://github.com/eisbaw/cursor_api_demo) — Python-based Cursor API RE toolkit\n- [sudosubin/pi-frontier](https://github.com/sudosubin/pi-frontier) — Original pi-cursor-agent implementation and upstream\n\n## Models \n\n| Canonical ID                   | Model                      | Thinking               |\n| ------------------------------ | -------------------------- | ---------------------- |\n| `claude-sonnet-4-0`            | Claude 4 Sonnet            | off / thinking         |\n| `claude-sonnet-4-5`            | Claude 4.5 Sonnet          | off / thinking         |\n| `claude-sonnet-4-1m`           | Claude 4 Sonnet 1M         | off / thinking         |\n| `claude-sonnet-4-6`            | Claude 4.6 Sonnet          | off / thinking         |\n| `claude-opus-4-5`              | Claude 4.5 Opus            | off / thinking         |\n| `claude-opus-4-6`              | Claude 4.6 Opus            | off / thinking         |\n| `claude-opus-4-6-fast`         | Claude 4.6 Opus (fast)     | off / thinking         |\n| `claude-opus-4-6-max`          | Claude 4.6 Opus Max        | off / thinking         |\n| `claude-opus-4-6-max-fast`     | Claude 4.6 Opus Max (fast) | off / thinking         |\n| `claude-opus-4-7`              | Claude Opus 4.7            | high / max             |\n| `claude-opus-4-7-fast`         | Claude Opus 4.7 (fast)     | high / max             |\n| `claude-opus-4-7-max`          | Claude Opus 4.7 Max        | high / max             |\n| `claude-opus-4-7-max-fast`     | Claude Opus 4.7 Max (fast) | high / max             |\n| `claude-opus-4-8`              | Claude Opus 4.8            | medium / high / max    |\n| `claude-opus-4-8-fast`         | Claude Opus 4.8 (fast)     | medium / high / xhigh  |\n| `claude-opus-4-8-max`          | Claude Opus 4.8 Max        | medium / high / max    |\n| `claude-opus-4-8-max-fast`     | Claude Opus 4.8 Max (fast) | medium / high / max    |\n| `claude-fable-5`               | Claude Fable 5             | off → max (6 levels)   |\n| `composer-1.5`                 | Composer 1.5               | —                      |\n| `composer-2`                   | Composer 2                 | —                      |\n| `composer-2-fast`              | Composer 2 Fast            | —                      |\n| `composer-2.5`                 | Composer 2.5               | —                      |\n| `composer-2.5-fast`            | Composer 2.5 Fast          | —                      |\n| `gpt-5-mini`                   | GPT-5 Mini                 | —                      |\n| `gpt-5.1`                      | GPT-5.1                    | low / high             |\n| `gpt-5.1-codex-mini`           | GPT-5.1 Codex Mini         | low / high             |\n| `gpt-5.1-codex-max`            | GPT-5.1 Codex Max          | low → xhigh (5 levels) |\n| `gpt-5.1-codex-max-fast`       | GPT-5.1 Codex Max Fast     | low → xhigh (5 levels) |\n| `gpt-5.2`                      | GPT-5.2                    | low → xhigh (4 levels) |\n| `gpt-5.2-fast`                 | GPT-5.2 Fast               | low → xhigh (4 levels) |\n| `gpt-5.2-codex`                | GPT-5.2 Codex              | low → xhigh (4 levels) |\n| `gpt-5.2-codex-fast`           | GPT-5.2 Codex Fast         | low → xhigh (4 levels) |\n| `gpt-5.3-codex`                | GPT-5.3 Codex              | low → xhigh (4 levels) |\n| `gpt-5.3-codex-fast`           | GPT-5.3 Codex Fast         | low → xhigh (4 levels) |\n| `gpt-5.3-codex-spark`          | GPT-5.3 Codex Spark        | low → xhigh (4 levels) |\n| `gpt-5.4`                      | GPT-5.4                    | low → xhigh (5 levels) |\n| `gpt-5.4-fast`                 | GPT-5.4 Fast               | low → xhigh (4 levels) |\n| `gpt-5.4-mini`                 | GPT-5.4 Mini               | off → xhigh (6 levels) |\n| `gpt-5.4-nano`                 | GPT-5.4 Nano               | off → xhigh (6 levels) |\n| `gpt-5.4-pro`                  | GPT-5.4 Pro                | low → xhigh (5 levels) |\n| `gpt-5.4-pro-fast`             | GPT-5.4 Pro Fast           | low → xhigh (4 levels) |\n| `gpt-5.5`                      | GPT-5.5                    | medium / high / xhigh  |\n| `gpt-5.5-pro`                  | GPT-5.5 Pro                | medium / high / xhigh  |\n| `gpt-5.5-fast`                 | GPT-5.5 Fast               | high / xhigh           |\n| `gemini-3-pro-preview`         | Gemini 3 Pro               | —                      |\n| `gemini-3-flash-preview`       | Gemini 3 Flash             | —                      |\n| `gemini-3.1-pro-preview`       | Gemini 3.1 Pro             | —                      |\n| `gemini-3.5-pro-preview`       | Gemini 3.5 Pro             | —                      |\n| `gemini-3.5-flash-preview`     | Gemini 3.5 Flash           | —                      |\n| `grok-4.20-0309-non-reasoning` | Grok 4.20                  | —                      |\n| `grok-4.20-0309-reasoning`     | Grok 4.20 (reasoning)      | —                      |\n| `grok-4.3`                     | Grok 4.3                   | —                      |\n| `grok-build-0.1`               | Grok Build 0.1             | —                      |\n| `kimi-k2.5`                    | Kimi K2.5                  | —                      |\n\n\u003e Cursor exposes 141+ model variants. Run `cursor agent models` for the authoritative list.\n\n## Packages\n\n| Package                                                    | Purpose                                         |\n| ---------------------------------------------------------- | ----------------------------------------------- |\n| [`@open-cursor/pi-agent`](integrations/pi-agent/README.md) | Pi provider extension                           |\n| `@open-cursor/opencode-agent`                              | Opencode provider extension                     |\n| [`@open-cursor/protocol`](shared/protocol/README.md)       | Proto definitions, generated types, RPC clients |\n| [`@open-cursor/client`](shared/client/README.md)           | Cursor protocol client, executors, auth         |\n\n## Development\n\n```sh\nnpm run lint              # oxlint .\nnpm run format            # oxfmt .\nnpm run typecheck         # tsc --noEmit\nnpm run test              # tsx --test\nnpm run proto:generate    # buf generate\n```\n\n## Requirements\n\n- `pi \u003e= 0.74.0`\n- Cursor subscription\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrandonkramer%2Fopen-cursor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrandonkramer%2Fopen-cursor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrandonkramer%2Fopen-cursor/lists"}