Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_USE",
"authentication": "ON_INSTALL",
"products": [
"CODEX"
]
Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

All notable changes to Doable Agent Plugins are documented here.

## [0.2.5] - 2026-09-07

### Changed

- Bundle the official remote Doable MCP connection for Codex, Claude Code, and Cursor.
- Ask for `DOABLE_API_KEY` as a required Cursor installation variable so a
first-time user authenticates while installing the plugin.
- Define the cold-start acceptance path from a TRD Editor copy prompt through
plugin approval, authentication, exact-Round preflight, and automatic resume.

## [0.2.4] - 2026-09-07

### Changed
Expand Down
2 changes: 1 addition & 1 deletion PRIVACY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Repository inspection happens inside the coding agent selected by the customer a

## Doable Code Context

`doable-code-context` performs remote operations only through the configured Doable MCP connection. The coding-agent host owns that connection's credential. During recovery, the Skill may direct the host to configure a user-supplied key in its user-scoped MCP credential/configuration store, but the bundled helper never reads or persists it and no credential may enter the project workspace or a remote Doable payload.
`doable-code-context` performs remote operations only through the Doable MCP connection loaded by the coding-agent host. The plugin package declares the official endpoint and a credential-variable reference for Cursor and Claude Code; it contains no credential value. The coding-agent host owns the resolved credential. During recovery, the Skill may direct the host to configure a user-supplied key in its user-scoped MCP credential/configuration store, but the bundled helper never reads or persists it and no credential may enter the project workspace or a remote Doable payload.

Its local `.doable/workspace-candidate.json`, `.doable/workspace-private.json`, and `.doable/requests/` records may contain real repository identities, explicitly user-supplied artifact roots, local paths, Git provenance, exact evidence locators, and frozen Doable questions. They are written with private permissions and ignored by Git. Artifact roots are never serialized into the remote workspace profile.

Expand Down
57 changes: 14 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Official agent plugins for [Doable](https://getdoable.ai), supporting Codex, Cla

| Plugin | Version | Purpose | Network |
| --- | --- | --- | --- |
| `doable-code-context` | `0.2.4` | Resolve context requests or start a managed feature-testing workflow | Configured Doable MCP |
| `doable-code-context` | `0.2.5` | Resolve context requests or start a managed feature-testing workflow | Doable MCP |

## Workflow

Expand Down Expand Up @@ -44,7 +44,7 @@ change is present in the connected repositories. If that target is missing or
ambiguous, it stops and asks the user to fetch, check out, or identify it
instead of answering from a neighboring revision.

All remote operations use the separately configured Doable MCP connection. The bundled helper is not a service or standalone CLI: it deterministically maps local repositories, keeps exact provenance private, builds safe payloads, and validates MCP responses.
All remote operations use the Doable MCP connection. Codex, Claude Code, and Cursor load its official remote endpoint from the plugin package. The bundled helper is not a service or standalone CLI: it deterministically maps local repositories, keeps exact provenance private, builds safe payloads, and validates MCP responses.

## Requirements

Expand All @@ -59,20 +59,26 @@ The MCP connection owns organization authentication; the helper never reads a cr

### Codex

Make `DOABLE_API_KEY` available to the environment that launches the next Codex task, then install the plugin:

```bash
codex plugin marketplace add getdoable/doable-agent-plugins --ref main
codex plugin add doable-code-context@getdoable
```

Install only the plugin needed for the desired workflow, then start a new task.
The plugin registers the official Doable MCP endpoint automatically. Start a new task so Codex loads the new Skill and MCP connection.

### Claude Code

Make `DOABLE_API_KEY` available to the environment that launches the next Claude Code session, then install the plugin:

```bash
claude plugin marketplace add https://github.com/getdoable/doable-agent-plugins.git
claude plugin install doable-code-context@doable --scope user
```

The plugin registers the official Doable MCP endpoint automatically. Claude Code loads the new Skill and MCP connection in the next session.

Natural-language requests activate the Skills. Explicit invocations are:

- `/doable-code-context:doable-connect`
Expand All @@ -87,52 +93,17 @@ In a new Cursor Agent chat, install the plugin:
/add-plugin doable-code-context@https://github.com/getdoable/doable-agent-plugins
```

Cursor asks for the target organization's `DOABLE_API_KEY` during installation and uses it only for the plugin's user-level Doable MCP connection. After the user approves installation and enters the key, continue the original DQ request in the same conversation; do not ask them to copy it again.

## Connect Doable MCP

The plugin supplies Skills and the local privacy helper; it does not bundle or duplicate the remote MCP server. On every entry path, the Skill first verifies the active connection against Doable. A copied Round also verifies the exact `DQ-...` code and organization before any workspace inspection. If recovery is needed, the coding agent configures the user-scoped connection and resumes the original request after the connection refreshes.
The plugin supplies Skills, a declarative connection to the hosted Doable MCP endpoint for Codex, Claude Code, and Cursor, and the local privacy helper. It does not contain an MCP server implementation. On every entry path, the Skill first verifies the active connection against Doable. A copied Round also verifies the exact `DQ-...` code and organization before any workspace inspection. If recovery is needed, the coding agent configures the user-scoped connection and resumes the original request after the connection refreshes.

Keep the key in the host environment or user-scoped credential store. Never commit it, add it to a project-level MCP file, save it under `.doable/`, or print it in agent output.

### Codex

Make `DOABLE_API_KEY` available to the environment that launches Codex, then register the remote server without putting the key value in Codex configuration:

```bash
codex mcp add doable \
--url https://mcp.getdoable.ai/mcp \
--bearer-token-env-var DOABLE_API_KEY
```

### Claude Code

Make `DOABLE_API_KEY` available to the environment that launches Claude Code. Single quotes preserve the environment reference instead of placing the key value in shell history:

```bash
claude mcp add doable \
--scope user \
--transport http \
https://mcp.getdoable.ai/mcp \
--header 'Authorization: Bearer ${DOABLE_API_KEY}'
```

### Cursor

Make `DOABLE_API_KEY` available to the Cursor process and add the server to the global `~/.cursor/mcp.json` file, not the customer's repository:

```json
{
"mcpServers": {
"doable": {
"url": "https://mcp.getdoable.ai/mcp",
"headers": {
"Authorization": "Bearer ${env:DOABLE_API_KEY}"
}
}
}
}
```
### Host credential loading

When configuring the environment ahead of time, launch the coding-agent host from that environment. If Claude Code updates an existing MCP connection during a request, open `/mcp` and reconnect `doable` once; the Skill then retries the original preflight and continues without a restart, a new session, or another copy-paste.
Cursor and Claude Code load `plugins/doable-code-context/.mcp.json`; the Codex manifest embeds the equivalent server using Codex's native bearer-token environment field. Cursor collects the required variable during installation. Codex and Claude Code expand `DOABLE_API_KEY` from the environment when the next task or session loads the plugin. If Claude Code updates an existing connection during a request, open `/mcp` and reconnect `doable` once; the Skill then retries the original preflight and continues without another copy-paste.

## Use Doable Code Context

Expand Down
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ Include the plugin version, coding-agent host, and sanitized reproduction steps.

## Security boundary

`doable-code-context` contains no bundled MCP server, credential store, standalone CLI package, runtime dependency, or telemetry. Its helper has no network or credential primitives: it validates local/private versus remote/sanitized schemas, writes private state atomically with mode `0600`, and checks content-derived payload digests around calls made through the separately configured Doable MCP connection. Connection recovery may place a user-supplied key only in the coding-agent host's user-scoped MCP credential/configuration store; it must never echo the key or put it in a workspace file, project-scoped MCP file, shell history, or command-line argument.
`doable-code-context` contains only a declarative connection to the official hosted Doable MCP endpoint; it contains no MCP server implementation, credential store, standalone CLI package, runtime dependency, or telemetry. Cursor owns the required installation variable, and Codex and Claude Code expand it from the launching environment. The helper has no network or credential primitives: it validates local/private versus remote/sanitized schemas, writes private state atomically with mode `0600`, and checks content-derived payload digests around calls made through the host-loaded Doable MCP connection. Connection recovery may place a user-supplied key only in the coding-agent host's user-scoped MCP credential/configuration store; it must never echo the key or put it in a workspace file, project-scoped MCP file, shell history, or command-line argument.

Never commit `.doable/workspace-candidate.json`, `.doable/workspace-private.json`, or `.doable/requests/`. Rotate a Doable API key if it is pasted into a conversation, terminal transcript, issue, or log.
Loading
Loading