Let's compose rich plans together
See the codeChopin is a GitHub Next research prototype exploring how people and repository-grounded agents can author durable documents together. A document might be an implementation plan, technical specification, RFC, proposal, or decision record. People shape the document and own its decisions; the hosted agent, currently named Planner, reads the selected repository, proposes changes, and asks the team when the code cannot settle a choice.
To learn more about our design priciples, and why we're building Chopin check out our recent blog post - https://githubnext.com/projects/chopin/
[!IMPORTANT] Chopin is experimental research software, not a supported GitHub product or a production-ready service. Expect incomplete workflows, operational limits, and breaking changes.
https://github.com/user-attachments/assets/9ebf0901-6255-47c3-adb3-e905e8f6cab4
[!TIP] We do not provide public Chopin instance for general use. If you want use Chopin on your projects you can run it locally or host it on your own.
A channel combines one repository-connected document with its collaboration context:
@chopin asks Chopin to act.https://github.com/user-attachments/assets/9f429bf0-762d-4d8b-871b-493dbb14c03c
Typing /research in a document starts one durable request from the exact brief
and leaves an inline progress card in place. Completed research publishes as an
ordinary child document beneath its parent, with its own document,
Chat, and Decisions. Pending, failed, and cancelled requests never
appear as documents in navigation.
https://github.com/user-attachments/assets/72a85be8-685f-4d60-9937-b3855b46cebe
The Planner can inspect the selected GitHub repository and its pull requests through bounded, read-only tools, then co-author the document. It cannot write to GitHub, edit a checkout, or implement code. A separate coding agent can connect to Chopin through MCP to create documents or consume an approved implementation graph.
The document model supports broader artifacts, while the current Planner prompt and tool vocabulary remain optimized for planning.
The development path requires:
Register these local URLs on the GitHub App:
Homepage: http://127.0.0.1:8787
Callback: http://127.0.0.1:8787/auth/github/callback
Setup URL: http://127.0.0.1:8787/auth/github/setup
Enable expiring user authorization tokens, disable OAuth during installation, disable webhooks, and grant read access to Contents, Pull requests, Checks, and Commit statuses. See Authentication for the exact App settings and the additional permission needed for organization admission.
Install, configure, and start Chopin:
bun install
cp .env.example .env
openssl rand -hex 32
# Fill in the GitHub App values and generated session key in .env.
bun run db:up
bun run migrate
bun run dev
The committed local Compose override publishes PostgreSQL on host port 5432 and is intended only for a trusted development machine. Do not use it on an exposed host. See Self-hosting for an internet-facing deployment.
Open http://127.0.0.1:8787, sign in, and install or update the GitHub App when the repository picker asks. Select a repository and create a channel, then start writing. The current interface calls these planning channels. Opening the channel in a second browser profile shows the multiplayer path.
Ctrl-C stops the development supervisor. bun run db:down tears down the local
Compose project. Set AGENT=off to prevent Planner turns and disable the
background-job runner; this does not disable the /mcp endpoint used by external
coding agents.
The web composer treats @chopin as an instruction for the Planner:
should we cover the export format? -> channel chat transcript
yes, Markdown for now -> channel chat transcript
@chopin -> act on the recent conversation
@chopin draft the export section -> act on that request
@chopin compare #Release plan -> read another document, then respond here
The recent channel chat transcript is supplied as bounded context for the next turn, even when those messages did not address the Planner. The first eligible model-backed action, either a Planner turn or research request, claims the channel's Copilot usage until that owner's session ends or the server restarts. The current web interface has no control for transferring that ownership manually.
Typing # in Chat opens a picker for other documents in the current
repository, including published children. Selected references retain stable
identities even when their titles change. The Planner reads referenced documents
at their latest revision, and references never change which document its editing
tools target. Research starts from /research in the document rather than from
a Chat reference.
Chopin exposes a bearer-authenticated Streamable HTTP MCP endpoint. See Connect a local coding agent for Claude Code, Codex CLI, and GitHub Copilot CLI configuration.
Planning is one way to use a Chopin document today. The optional creating-chopin-plans skill turns a settled coding-agent conversation into an initial plan document. Implementation handoff and the implementing-chopin-plans skill are experimental. The supported read-before-claim flow works only for documents created through MCP, and Chopin does not yet provide a user-facing way to approve a draft graph.
| Topic | Document |
|---|---|
| Deploy and operate an instance | Self-hosting |
| Configure identity and access | Authentication |
| Connect an external coding agent | Local agent MCP |
| Understand the system | Architecture |
| Understand channel identity and access | Repository channels |
| Understand persistence | Storage |
| Review the hosted agent boundary | Hosted agent |
| Register durable background jobs | Background jobs |
| Review experimental implementation handoff | Implementation lifecycle |
| Develop on exe.dev | exe.dev development |
| Test an authenticated PR preview | PR preview testing |
| Work on the repository | Maintainer guide |
bun test # unit and in-memory adapter tests
bun run test:postgres # PostgreSQL storage contract and lifecycle tests
bun run e2e # browser and system integration suite
bun run types # TypeScript checks across the workspace
bun run ci # formatting, lint, and token checks
Run bun run e2e:browsers once to install Chromium. The browser suite builds
the client and starts disposable PostgreSQL services and application servers.
See AGENTS.md for repository structure, test selection, and current
engineering invariants.
Security reports should follow SECURITY.md. Participation is covered by the Code of Conduct, and the source is available under the MIT License.
TypeScript
96.8%
CSS
3.1%
Let's compose rich plans together
See the codeChopin is a GitHub Next research prototype exploring how people and repository-grounded agents can author durable documents together. A document might be an implementation plan, technical specification, RFC, proposal, or decision record. People shape the document and own its decisions; the hosted agent, currently named Planner, reads the selected repository, proposes changes, and asks the team when the code cannot settle a choice.
To learn more about our design priciples, and why we're building Chopin check out our recent blog post - https://githubnext.com/projects/chopin/
[!IMPORTANT] Chopin is experimental research software, not a supported GitHub product or a production-ready service. Expect incomplete workflows, operational limits, and breaking changes.
https://github.com/user-attachments/assets/9ebf0901-6255-47c3-adb3-e905e8f6cab4
[!TIP] We do not provide public Chopin instance for general use. If you want use Chopin on your projects you can run it locally or host it on your own.
A channel combines one repository-connected document with its collaboration context:
@chopin asks Chopin to act.https://github.com/user-attachments/assets/9f429bf0-762d-4d8b-871b-493dbb14c03c
Typing /research in a document starts one durable request from the exact brief
and leaves an inline progress card in place. Completed research publishes as an
ordinary child document beneath its parent, with its own document,
Chat, and Decisions. Pending, failed, and cancelled requests never
appear as documents in navigation.
https://github.com/user-attachments/assets/72a85be8-685f-4d60-9937-b3855b46cebe
The Planner can inspect the selected GitHub repository and its pull requests through bounded, read-only tools, then co-author the document. It cannot write to GitHub, edit a checkout, or implement code. A separate coding agent can connect to Chopin through MCP to create documents or consume an approved implementation graph.
The document model supports broader artifacts, while the current Planner prompt and tool vocabulary remain optimized for planning.
The development path requires:
Register these local URLs on the GitHub App:
Homepage: http://127.0.0.1:8787
Callback: http://127.0.0.1:8787/auth/github/callback
Setup URL: http://127.0.0.1:8787/auth/github/setup
Enable expiring user authorization tokens, disable OAuth during installation, disable webhooks, and grant read access to Contents, Pull requests, Checks, and Commit statuses. See Authentication for the exact App settings and the additional permission needed for organization admission.
Install, configure, and start Chopin:
bun install
cp .env.example .env
openssl rand -hex 32
# Fill in the GitHub App values and generated session key in .env.
bun run db:up
bun run migrate
bun run dev
The committed local Compose override publishes PostgreSQL on host port 5432 and is intended only for a trusted development machine. Do not use it on an exposed host. See Self-hosting for an internet-facing deployment.
Open http://127.0.0.1:8787, sign in, and install or update the GitHub App when the repository picker asks. Select a repository and create a channel, then start writing. The current interface calls these planning channels. Opening the channel in a second browser profile shows the multiplayer path.
Ctrl-C stops the development supervisor. bun run db:down tears down the local
Compose project. Set AGENT=off to prevent Planner turns and disable the
background-job runner; this does not disable the /mcp endpoint used by external
coding agents.
The web composer treats @chopin as an instruction for the Planner:
should we cover the export format? -> channel chat transcript
yes, Markdown for now -> channel chat transcript
@chopin -> act on the recent conversation
@chopin draft the export section -> act on that request
@chopin compare #Release plan -> read another document, then respond here
The recent channel chat transcript is supplied as bounded context for the next turn, even when those messages did not address the Planner. The first eligible model-backed action, either a Planner turn or research request, claims the channel's Copilot usage until that owner's session ends or the server restarts. The current web interface has no control for transferring that ownership manually.
Typing # in Chat opens a picker for other documents in the current
repository, including published children. Selected references retain stable
identities even when their titles change. The Planner reads referenced documents
at their latest revision, and references never change which document its editing
tools target. Research starts from /research in the document rather than from
a Chat reference.
Chopin exposes a bearer-authenticated Streamable HTTP MCP endpoint. See Connect a local coding agent for Claude Code, Codex CLI, and GitHub Copilot CLI configuration.
Planning is one way to use a Chopin document today. The optional creating-chopin-plans skill turns a settled coding-agent conversation into an initial plan document. Implementation handoff and the implementing-chopin-plans skill are experimental. The supported read-before-claim flow works only for documents created through MCP, and Chopin does not yet provide a user-facing way to approve a draft graph.
| Topic | Document |
|---|---|
| Deploy and operate an instance | Self-hosting |
| Configure identity and access | Authentication |
| Connect an external coding agent | Local agent MCP |
| Understand the system | Architecture |
| Understand channel identity and access | Repository channels |
| Understand persistence | Storage |
| Review the hosted agent boundary | Hosted agent |
| Register durable background jobs | Background jobs |
| Review experimental implementation handoff | Implementation lifecycle |
| Develop on exe.dev | exe.dev development |
| Test an authenticated PR preview | PR preview testing |
| Work on the repository | Maintainer guide |
bun test # unit and in-memory adapter tests
bun run test:postgres # PostgreSQL storage contract and lifecycle tests
bun run e2e # browser and system integration suite
bun run types # TypeScript checks across the workspace
bun run ci # formatting, lint, and token checks
Run bun run e2e:browsers once to install Chromium. The browser suite builds
the client and starts disposable PostgreSQL services and application servers.
See AGENTS.md for repository structure, test selection, and current
engineering invariants.
Security reports should follow SECURITY.md. Participation is covered by the Code of Conduct, and the source is available under the MIT License.
TypeScript
96.8%
CSS
3.1%