@bridge_gpt/mcp-server 0.2.59 → 0.2.60

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.
Files changed (71) hide show
  1. package/README.md +173 -51
  2. package/build/agent-guidance.generated.js +1 -1
  3. package/build/agent-notes.js +7 -1
  4. package/build/commands.generated.js +4 -4
  5. package/build/conductor/bridge-api-client.js +53 -2
  6. package/build/conductor/doctor.js +255 -53
  7. package/build/conductor/epic-runtime.js +11 -2
  8. package/build/conductor/install-doctor.js +24 -2
  9. package/build/conductor/local-merge.js +319 -26
  10. package/build/conductor/merge-execution-contract.js +61 -0
  11. package/build/conductor/merge-execution-eligibility.js +129 -0
  12. package/build/conductor/readiness-sections.js +159 -2
  13. package/build/conductor/readiness.js +95 -14
  14. package/build/conductor/recovery-operations.js +8 -2
  15. package/build/connect-bitbucket-api.js +6 -1
  16. package/build/connect-bitbucket.js +398 -88
  17. package/build/credential-store.js +16 -0
  18. package/build/docs.generated.js +2 -2
  19. package/build/doctor.js +183 -9
  20. package/build/drive-epic.js +23 -0
  21. package/build/epic-implementer-bin.js +10 -10
  22. package/build/epic-implementer-claude-hook-bin.js +1 -1
  23. package/build/epic-implementer-env.js +43 -14
  24. package/build/executor/ci-rerun-job.js +269 -0
  25. package/build/executor/cli.js +31 -0
  26. package/build/executor/credentials.js +11 -0
  27. package/build/executor/env.js +60 -0
  28. package/build/executor/index.js +21 -4
  29. package/build/executor/job-runner.js +126 -0
  30. package/build/executor/job-types.js +12 -2
  31. package/build/executor/merge-job.js +11 -2
  32. package/build/executor/service-lifecycle.js +136 -0
  33. package/build/executor/service-unit.js +427 -9
  34. package/build/executor/types.js +5 -0
  35. package/build/index.js +194 -179
  36. package/build/install-bridge-conductor.js +201 -8
  37. package/build/install-bridge.js +356 -30
  38. package/build/mcp-install-state.js +42 -4
  39. package/build/merge-pull-request.js +103 -10
  40. package/build/merge-workflow-codeowners.js +224 -0
  41. package/build/merge-workflow-config.js +133 -0
  42. package/build/merge-workflow-drift.js +66 -0
  43. package/build/merge-workflow-install.js +638 -0
  44. package/build/merge-workflow.js +572 -0
  45. package/build/pipelines.generated.js +2 -2
  46. package/build/plane/cli.js +24 -2
  47. package/build/plane/preflight.js +68 -0
  48. package/build/readme.generated.js +1 -1
  49. package/build/run-unit-tests-launcher.js +5 -0
  50. package/build/setup-epic.js +163 -9
  51. package/build/version.generated.js +3 -3
  52. package/package.json +3 -3
  53. package/build/conduct-epic/bridge-client.js +0 -773
  54. package/build/conduct-epic/checkpoint-store.js +0 -542
  55. package/build/conduct-epic/cli.js +0 -3145
  56. package/build/conduct-epic/cut-protocol.js +0 -392
  57. package/build/conduct-epic/lock.js +0 -302
  58. package/build/conduct-epic/pr-state.js +0 -286
  59. package/build/conduct-epic/spawn.js +0 -113
  60. package/build/conductor/cli.js +0 -1278
  61. package/build/conductor-bundle-cli.js +0 -256
  62. package/build/direct-ticket-tools.js +0 -70
  63. package/build/executor/reconcile-overlap-governance.js +0 -129
  64. package/build/implement-epic/bridge-client.js +0 -773
  65. package/build/implement-epic/checkpoint-store.js +0 -542
  66. package/build/implement-epic/cli.js +0 -3158
  67. package/build/implement-epic/cut-protocol.js +0 -392
  68. package/build/implement-epic/lock.js +0 -302
  69. package/build/implement-epic/pr-state.js +0 -286
  70. package/build/implement-epic/spawn.js +0 -113
  71. package/build/plan-epic-conductor-eligibility.js +0 -213
package/README.md CHANGED
@@ -2,44 +2,6 @@
2
2
 
3
3
  The Bridge MCP is an end-to-end accelerator for shipping code within SFCC, powered by [Bridge API](https://bridgegpt-api.com). Works with Claude Code, Github Copilot, Cursor, Windsurf, and OpenAI Codex.
4
4
 
5
- ## Personal model routing preferences
6
-
7
- Create `~/.config/bridge/model-routing.json` to choose ordered providers for
8
- ticket review, Second Opinion, and Council without changing shared project
9
- configuration. The file is personal and uncommitted, contains no credentials,
10
- and is reread for every request. The repository key must exactly match Bridge's
11
- `repo_name`:
12
-
13
- ```json
14
- {
15
- "version": 1,
16
- "defaults": {
17
- "review_ticket": ["gemini", "anthropic"],
18
- "second_opinion": ["anthropic", "gemini"],
19
- "council": ["anthropic", "gemini"]
20
- },
21
- "repositories": {
22
- "my-repo": { "council": ["gemini"] }
23
- }
24
- }
25
- ```
26
-
27
- A repository entry replaces the machine entry only for a feature key it
28
- contains. Remove a key or set it to `[]` to restore automatic selection for
29
- that feature; an empty repository entry suppresses the machine entry. Delete
30
- the file to clear every preference. Malformed, unreadable, or unsafe files are
31
- ignored with a bounded local warning. Keep the file owned by your user and not
32
- writable by your group or others.
33
-
34
- Only the exact initialized MCP client names `codex` and `claude-code`, or their
35
- installer markers, identify the Codex and Claude Code families. Cursor, GitHub
36
- Copilot, and unlisted clients remain neutral. Automatic Codex requests prefer
37
- eligible Anthropic then Gemini; Claude Code requests prefer eligible OpenAI
38
- then Gemini. Explicit per-call choices override this personal order but must
39
- still pass model support, project restrictions, and feature entitlement. A
40
- populated project Allowed Providers list can reduce an automatic request or
41
- refuse an incompatible explicit request.
42
-
43
5
  ## Install
44
6
 
45
7
  From your **project root**, run:
@@ -102,6 +64,7 @@ account — it will ask.
102
64
  - [Custom Pipelines](#custom-pipelines)
103
65
  - [Environment Variables](#environment-variables)
104
66
  - [Worktree credentials and the `mcp-invoke` shim](#worktree-credentials-and-the-mcp-invoke-shim)
67
+ - [Personal model routing preferences](#personal-model-routing-preferences)
105
68
  - [Reference](#reference)
106
69
 
107
70
  For advanced epic/multi-agent orchestration, see [CONDUCTOR.md](./docs/CONDUCTOR.md).
@@ -406,7 +369,7 @@ later boot.
406
369
  "mcpServers": {
407
370
  "bridge": {
408
371
  "command": "npx",
409
- "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.59", "serve"],
372
+ "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.60", "serve"],
410
373
  "env": {
411
374
  "BAPI_BASE_URL": "https://bridgegpt-api.com",
412
375
  "BAPI_REPO_NAME": "your-repo",
@@ -428,7 +391,7 @@ later boot.
428
391
  "bridge": {
429
392
  "type": "stdio",
430
393
  "command": "npx",
431
- "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.59", "serve"],
394
+ "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.60", "serve"],
432
395
  "env": {
433
396
  "BAPI_BASE_URL": "https://bridgegpt-api.com",
434
397
  "BAPI_REPO_NAME": "your-repo",
@@ -450,7 +413,7 @@ later boot.
450
413
  "bridge": {
451
414
  "type": "stdio",
452
415
  "command": "npx",
453
- "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.59", "serve"],
416
+ "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.60", "serve"],
454
417
  "env": {
455
418
  "BAPI_BASE_URL": "https://bridgegpt-api.com",
456
419
  "BAPI_REPO_NAME": "your-repo",
@@ -473,7 +436,7 @@ Windsurf only supports global MCP configuration.
473
436
  "mcpServers": {
474
437
  "bridge": {
475
438
  "command": "npx",
476
- "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.59", "serve"],
439
+ "args": ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.60", "serve"],
477
440
  "env": {
478
441
  "BAPI_BASE_URL": "https://bridgegpt-api.com",
479
442
  "BAPI_REPO_NAME": "your-repo",
@@ -492,7 +455,7 @@ Windsurf only supports global MCP configuration.
492
455
  ```toml
493
456
  [mcp_servers.bridge]
494
457
  command = "npx"
495
- args = ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.59", "serve"]
458
+ args = ["-y", "--prefer-offline", "@bridge_gpt/mcp-server@0.2.60", "serve"]
496
459
 
497
460
  [mcp_servers.bridge.env]
498
461
  BAPI_BASE_URL = "https://bridgegpt-api.com"
@@ -613,16 +576,16 @@ The tools worth knowing for most tickets.
613
576
  - **How to use it:** `/review-and-start BAPI-248 BAPI-250` (single or multiple keys flow through the identical code path).
614
577
  - **Flags:** `--auto` auto-approves both the review and the implementation phase of every spawned session · `--rounds=1|2` forwarded to the review phase · `--agent`, `--base-branch`, `--max-parallel`, `--dry-run` mirror `/start-tickets`.
615
578
 
616
- **4. Explore Ticket**
617
- - **What it does:** Maps the code paths, dependencies, and project conventions a task would touch, settles its acceptance criteria with you on a decision page, then compares the viable implementation approaches and their trade-offs and writes up a proposed design. Along the way it surfaces the ambiguities that still need deciding and can pull in optional web or deep research where the answer is not in the code.
579
+ **4. Define Tickets**
580
+ - **What it does:** Analyzes a single task or feature specification to define, refine, and structure one or more actionable Jira tickets. It maps the code paths, dependencies, and project conventions the task would touch, settles acceptance criteria with you on a decision page, then compares the viable implementation approaches and their trade-offs so the ticket work is grounded in the real codebase. Along the way it surfaces the ambiguities that still need deciding and can pull in optional web or deep research where the answer is not in the code.
618
581
  - **When it's useful:** (Architecture | Refinement) Before writing a ticket or a plan, when you're unsure how a change would fit the existing code and want the open questions and the realistic options laid out first.
619
- - **How to use it:** `/explore-ticket <task>` — *"Explore the codebase for how we'd add a Mistral LLM provider and recommend 2–3 implementation options."*
582
+ - **How to use it:** `/define-tickets <task>` — *"Define the tickets we'd need to add a Mistral LLM provider."*
620
583
  - **Flags:** None.
621
584
 
622
- **5. Council**
585
+ **5. AI Council**
623
586
  - **What it does:** Fans your problem out to two different models and returns their approaches, in technical, design, discovery, or general mode.
624
587
  - **When it's useful:** (Architecture | Refinement) Early, when you want a spread of approaches — technical for how to build it, design for how it should look, discovery for what still needs figuring out before a real ticket exists, general for a quick brief-driven pass before the repository is indexed.
625
- - **How to use it:** `/council <question>`
588
+ - **How to use it:** `/ai-council <question>`
626
589
  - **Flags:** `--mode` selects one of four modes, passed to the underlying `request_council` tool as e.g. `mode: "discovery"`: `technical` (the default — implementation/architecture approaches), `design` (UI/UX and visual direction), `discovery` (stakeholder discovery questions, grouped into `Technical Discovery Questions` and `Business / Stakeholder Discovery Questions` and tagged `[HUMAN]`/`[CODE]`/`[TICKET]`), and `general` (brief-driven ideation from your task description alone). `technical` and `discovery` are codebase-grounded and need an indexed repository; `general` needs no code index at all, so it works immediately after install. The legacy boolean `design=true` still works and maps to `mode: "design"`.
627
590
 
628
591
  **6. Deep Research**
@@ -756,7 +719,7 @@ Useful once in a while.
756
719
 
757
720
  ### Workflow commands
758
721
 
759
- Slash commands that drive several tools at once. Start Tickets, Review and Start, and Explore Ticket are documented above under [Regularly useful](#regularly-useful); Create Decision Page is documented above under [Occasionally useful](#occasionally-useful); Regression Check and Scan Test Coverage are documented above under [Now and then](#now-and-then) — the rest live here.
722
+ Slash commands that drive several tools at once. Start Tickets, Review and Start, and Define Tickets are documented above under [Regularly useful](#regularly-useful); Create Decision Page is documented above under [Occasionally useful](#occasionally-useful); Regression Check and Scan Test Coverage are documented above under [Now and then](#now-and-then) — the rest live here.
760
723
 
761
724
  **1. Implement Ticket**
762
725
  - **What it does:** Full build for one ticket: generate a plan, write the code, commit, open a PR, and monitor CI.
@@ -784,7 +747,7 @@ Slash commands that drive several tools at once. Start Tickets, Review and Start
784
747
 
785
748
  #### Ticket-authoring posture
786
749
 
787
- `/explore-ticket`, `/idea-to-ticket`, and `/plan-epic` all decide ticket shape
750
+ `/define-tickets`, `/idea-to-ticket`, and `/plan-epic` all decide ticket shape
788
751
  the same way, as does the `jira-ticket-writer` agent they draft through. A fresh install inherits this with no configuration
789
752
  step and no server call; the full rationale and the closed exception list ship as
790
753
  `docs/bridge-ticket-authoring.md`.
@@ -843,7 +806,7 @@ Repository and ticket housekeeping commands, beyond the tiers above. Implementat
843
806
  >
844
807
  > | Copilot mode | Artifact Bridge writes | How you invoke it |
845
808
  > |---|---|---|
846
- > | VS Code Local agent | `.github/prompts/<command>.prompt.md` | `/<command>`, for example `/explore-ticket` |
809
+ > | VS Code Local agent | `.github/prompts/<command>.prompt.md` | `/<command>`, for example `/define-tickets` |
847
810
  > | VS Code Agent Host | `.github/skills/<command>/SKILL.md` (a separately verified project skill; prompt files are not loaded in this mode) | `/<command>` |
848
811
  > | Copilot CLI, Copilot cloud coding agent | None | Out of scope |
849
812
  >
@@ -1276,6 +1239,127 @@ Conductor is an **opt-in, off-by-default** layer for epic supervision, inter-age
1276
1239
 
1277
1240
  > The v1 `epic-implementer epic-tick` command is **frozen** — it throws on every invocation. There is nothing to schedule locally, and `epic-implementer doctor` flags any epic-tick schedule left over from an earlier release so you can cancel it.
1278
1241
 
1242
+ <!-- BEGIN GENERATED: merge-workflow-install (managed by mcp_server/scripts/sync-readme-merge-workflow.js — DO NOT EDIT BY HAND) -->
1243
+ ### `install-bridge conductor --merge-workflow`
1244
+
1245
+ Generates the Epic Implementer **merge workflow** plus its CODEOWNERS fragment
1246
+ and repository-rule guidance, commits them on a managed branch, pushes with
1247
+ **your own git identity**, and opens a pull request with **your own `gh`**.
1248
+
1249
+ ```
1250
+ npx -y @bridge_gpt/mcp-server install-bridge conductor --merge-workflow --codeowner <@org/team|@user>
1251
+ ```
1252
+
1253
+ `--codeowner` is **required** and takes exactly one `@user` or `@org/team`. It is
1254
+ never inferred from repository metadata, and a documentation placeholder is
1255
+ rejected. `--dry-run` prints the plan and performs **no** write: no branch, no
1256
+ file, no install-state write, no commit, no push, and no pull request.
1257
+
1258
+ **Bridge performs no repository write, and the pull request is never merged for
1259
+ you.** Reviewing the workflow before it lands is the security control — it is the
1260
+ one file in your repository that can perform a privileged merge.
1261
+
1262
+ #### Files it generates
1263
+
1264
+ | Path | What it is |
1265
+ |---|---|
1266
+ | `.github/workflows/epic-implementer-merge.yml` | The merge workflow, contract version 1. |
1267
+ | `.bridge/merge-workflow/CODEOWNERS.fragment` | A CODEOWNERS rule for that path. Not in force until you merge it into your active CODEOWNERS file. |
1268
+ | `.bridge/merge-workflow/REPOSITORY-RULES.md` | The setup steps, including the repository rule that actually enforces review. |
1269
+
1270
+ #### The four content outcomes
1271
+
1272
+ Re-running is safe and reports exactly one of these:
1273
+
1274
+ | Outcome | What happens |
1275
+ |---|---|
1276
+ | **not installed** | The workflow and companions are written on a managed branch and a pull request is opened. |
1277
+ | **managed version is older** | The same, labelled explicitly as an *upgrade* in the branch, commit, pull request title, and terminal summary. |
1278
+ | **identical** | A clean no-op. Nothing is written and no pull request is opened. |
1279
+ | **modified/unrecognized** | Fail-closed. Your file is preserved untouched and never overwritten — including a file that merely *claims* an older version in its marker. |
1280
+
1281
+ An already-open installation or upgrade pull request is **reported, not
1282
+ duplicated**: the command verifies its branch, base, and file set and prints its
1283
+ URL instead of creating a second branch, commit, push, or pull request.
1284
+
1285
+ #### What you must do after merging
1286
+
1287
+ 1. Create a repository Actions **secret** named `BAPI_API_KEY` holding a Bridge API key for the repository. Its value must **never** be passed to the installer, committed, printed, or placed in `--dry-run` output — the CLI has no flag, prompt, or file field that accepts one.
1288
+ 2. Merge the generated CODEOWNERS rule into your active CODEOWNERS file. The fragment enforces nothing by itself.
1289
+ 3. Add a default-branch repository rule requiring a pull request and code-owner review. **Until this rule exists, the workflow path is not protected.**
1290
+
1291
+ Optionally set a repository Actions **variable** named `BAPI_BASE_URL` to point the workflow at a non-default Bridge deployment (default `https://bridgegpt-api.com`). A variable, not a workflow input: the base URL decides which server authorizes a merge.
1292
+
1293
+ #### Merge credentials (`local` and `machine_token` modes)
1294
+
1295
+ No merge path reads an ambient `gh` login. Each mode reads exactly one
1296
+ process-launch configuration key, with **no fallback** between them and none to
1297
+ an inherited `GH_TOKEN`, `GITHUB_TOKEN`, a `gh auth` session, or the Bridge
1298
+ credential store. Bridge never stores either value.
1299
+
1300
+ | Mode | Key | Provenance |
1301
+ |---|---|---|
1302
+ | `local` | `BAPI_LOCAL_MERGE_TOKEN` | A configured local scoped credential. |
1303
+ | `machine_token` | `BAPI_MACHINE_MERGE_TOKEN` | Your machine user's credential. |
1304
+
1305
+ Supply them at process launch, or from an approved external secret manager.
1306
+
1307
+ | Preflight outcome | Remediation |
1308
+ |---|---|
1309
+ | `*_credential_missing` | Set the mode's key in the environment this MCP server is launched with. |
1310
+ | `*_credential_invalid` | GitHub rejected the configured credential. Rotate it and relaunch. |
1311
+ | `*_credential_unpermitted` | It authenticates but cannot write to this repository. Grant it merge permission. |
1312
+ | `local_gh_unavailable` | Install the GitHub CLI (`gh`) on the machine running this MCP server. |
1313
+
1314
+ #### What the workflow does and does not do
1315
+
1316
+ - It **never checks out** the repository and never runs pull-request content.
1317
+ - It uses **no third-party action** and no `uses:` step — only runner-provided bash, curl, jq, and `gh`.
1318
+ - It merges only under an **expected-head-SHA precondition**.
1319
+ - It **refuses a fork-origin** or otherwise unverifiable head.
1320
+ - It **refuses any base that is the repository default branch**, without retrying.
1321
+ - It **reports** the result to Bridge after the merge and read-back; the report decides nothing.
1322
+
1323
+ `workflow_dispatch` always runs the workflow definition on the **trusted default
1324
+ branch**, so a pull request that edits the file cannot change the version that runs
1325
+ against it.
1326
+
1327
+ #### Canonical template
1328
+
1329
+ Git blob SHA of the rendered workflow: `3d4956c9447223c37075069352cdd9aae2d561dc`
1330
+
1331
+ ```yaml
1332
+ name: Epic Implementer merge
1333
+
1334
+ env:
1335
+ x-bridge-merge-contract-version: 1
1336
+
1337
+ on:
1338
+ workflow_dispatch:
1339
+ inputs:
1340
+ action_key:
1341
+ description: >-
1342
+ Durable merge-action key naming the approved attempt. A wake-up and a
1343
+ correlator only; it authorizes nothing by itself.
1344
+ required: true
1345
+ type: string
1346
+ lease_owner:
1347
+ description: >-
1348
+ Per-attempt lease secret proving this run is the live attempt. Never
1349
+ printed, never echoed, never written to an output.
1350
+ required: true
1351
+ type: string
1352
+
1353
+ permissions:
1354
+ contents: write
1355
+ pull-requests: write
1356
+
1357
+ concurrency:
1358
+ group: epic-implementer-merge-${{ inputs.action_key }}
1359
+ cancel-in-progress: false
1360
+ ```
1361
+ <!-- END GENERATED: merge-workflow-install -->
1362
+
1279
1363
  ## Custom Pipelines
1280
1364
 
1281
1365
  You can create your own pipelines by adding JSON files to `.bridge/pipelines/`. Running `--init` scaffolds this directory with a `README.md` and an example pipeline to get you started.
@@ -1555,6 +1639,44 @@ there is no fallback path for it.
1555
1639
  informational only: it cannot confirm the next worker spawn will authenticate,
1556
1640
  and it never blocks the doctor run or changes its exit code.
1557
1641
 
1642
+ ## Personal model routing preferences
1643
+
1644
+ Create `~/.config/bridge/model-routing.json` to choose ordered providers for
1645
+ ticket review, Second Opinion, and AI Council without changing shared project
1646
+ configuration. The file is personal and uncommitted, contains no credentials,
1647
+ and is reread for every request. The repository key must exactly match Bridge's
1648
+ `repo_name`:
1649
+
1650
+ ```json
1651
+ {
1652
+ "version": 1,
1653
+ "defaults": {
1654
+ "review_ticket": ["gemini", "anthropic"],
1655
+ "second_opinion": ["anthropic", "gemini"],
1656
+ "council": ["anthropic", "gemini"]
1657
+ },
1658
+ "repositories": {
1659
+ "my-repo": { "council": ["gemini"] }
1660
+ }
1661
+ }
1662
+ ```
1663
+
1664
+ A repository entry replaces the machine entry only for a feature key it
1665
+ contains. Remove a key or set it to `[]` to restore automatic selection for
1666
+ that feature; an empty repository entry suppresses the machine entry. Delete
1667
+ the file to clear every preference. Malformed, unreadable, or unsafe files are
1668
+ ignored with a bounded local warning. Keep the file owned by your user and not
1669
+ writable by your group or others.
1670
+
1671
+ Only the exact initialized MCP client names `codex` and `claude-code`, or their
1672
+ installer markers, identify the Codex and Claude Code families. Cursor, GitHub
1673
+ Copilot, and unlisted clients remain neutral. Automatic Codex requests prefer
1674
+ eligible Anthropic then Gemini; Claude Code requests prefer eligible OpenAI
1675
+ then Gemini. Explicit per-call choices override this personal order but must
1676
+ still pass model support, project restrictions, and feature entitlement. A
1677
+ populated project Allowed Providers list can reduce an automatic request or
1678
+ refuse an incompatible explicit request.
1679
+
1558
1680
  ## Reference
1559
1681
 
1560
1682
  The full surface, for when you need the complete enumeration. Day-to-day, use [Usage Documentation](#usage-documentation) instead — you don't call MCP tools directly; you ask your AI assistant to perform a task, or compose tools into a pipeline.
@@ -1,3 +1,3 @@
1
1
  // AUTO-GENERATED — do not edit manually. Regenerate with: npm run build
2
2
  // This file is produced by scripts/bundle-agent-guidance.js from mcp_server/agent-guidance.md
3
- export const AGENT_GUIDANCE = "### Get Project Standards (`get_project_standards`)\n\n**When to use it:** (Implementation | Refinement) Before writing or reviewing code, so the agent applies this project's recorded coding standards instead of generic defaults.\n\n**How to use it:** Call the `get_project_standards` MCP tool directly — it takes no required input and returns the project's recorded standards text.\n\n### Second Opinion (`second_opinion`)\n\n**When to use it:** (Architecture | Refinement | Implementation) Any time you want a quick sanity check on a plan, draft, or decision from a fresh perspective.\n\n**How to use it:** Ask your agent — \"Get a second opinion from Gemini on whether the BAPI-123 plan's migration step is safe to run against production.\"\n\n### Council (`request_council`)\n\n**When to use it:** (Architecture | Refinement) Early, when you want a spread of approaches — technical for how to build it, design for how it should look, discovery for what still needs figuring out before a real ticket exists, general for a quick brief-driven pass before the repository is indexed.\n\n**How to use it:** `/council <question>`\n\n### Review Ticket (`request_ticket_review`)\n\n**When to use it:** (Refinement) Right after a ticket is drafted, before anyone starts building — to surface gaps and tighten it.\n\n**How to use it:** `/review-tickets BAPI-123` (command only — \"review\" as free text is easily mistaken for a freehand agent review). A single key reviews inline in the current session — no terminal tab, no worktree. For several tickets at once, `/review-tickets BAPI-123 BAPI-456` opens one terminal tab per ticket and reviews them in parallel with no worktrees; every review flag applies, and `--review KEY=auto,rounds=N` sets per-ticket overrides.";
3
+ export const AGENT_GUIDANCE = "### Get Project Standards (`get_project_standards`)\n\n**When to use it:** (Implementation | Refinement) Before writing or reviewing code, so the agent applies this project's recorded coding standards instead of generic defaults.\n\n**How to use it:** Call the `get_project_standards` MCP tool directly — it takes no required input and returns the project's recorded standards text.\n\n### Second Opinion (`second_opinion`)\n\n**When to use it:** (Architecture | Refinement | Implementation) Any time you want a quick sanity check on a plan, draft, or decision from a fresh perspective.\n\n**How to use it:** Ask your agent — \"Get a second opinion from Gemini on whether the BAPI-123 plan's migration step is safe to run against production.\"\n\n### AI Council (`request_council`)\n\n**When to use it:** (Architecture | Refinement) Early, when you want a spread of approaches — technical for how to build it, design for how it should look, discovery for what still needs figuring out before a real ticket exists, general for a quick brief-driven pass before the repository is indexed.\n\n**How to use it:** `/ai-council <question>`\n\n### Review Ticket (`request_ticket_review`)\n\n**When to use it:** (Refinement) Right after a ticket is drafted, before anyone starts building — to surface gaps and tighten it.\n\n**How to use it:** `/review-tickets BAPI-123` (command only — \"review\" as free text is easily mistaken for a freehand agent review). A single key reviews inline in the current session — no terminal tab, no worktree. For several tickets at once, `/review-tickets BAPI-123 BAPI-456` opens one terminal tab per ticket and reviews them in parallel with no worktrees; every review flag applies, and `--review KEY=auto,rounds=N` sets per-ticket overrides.";
@@ -33,6 +33,7 @@ const AGENTS_MD_PLATFORMS = new Set([
33
33
  export function resolveAgentNotesTargets(selectedPlatforms) {
34
34
  const targets = new Set();
35
35
  const unsupported = new Set();
36
+ const supported = new Set();
36
37
  for (const platform of selectedPlatforms) {
37
38
  if (platform === "windsurf") {
38
39
  unsupported.add(platform);
@@ -40,6 +41,7 @@ export function resolveAgentNotesTargets(selectedPlatforms) {
40
41
  }
41
42
  if (AGENTS_MD_PLATFORMS.has(platform)) {
42
43
  targets.add("AGENTS.md");
44
+ supported.add(platform);
43
45
  }
44
46
  // Claude Code additionally gets a CLAUDE.md pointer — never a substitute
45
47
  // for AGENTS.md, since @AGENTS.md would otherwise dangle.
@@ -52,7 +54,11 @@ export function resolveAgentNotesTargets(selectedPlatforms) {
52
54
  ordered.push("AGENTS.md");
53
55
  if (targets.has("CLAUDE.md"))
54
56
  ordered.push("CLAUDE.md");
55
- return { targets: ordered, unsupportedPlatforms: [...unsupported] };
57
+ return {
58
+ targets: ordered,
59
+ unsupportedPlatforms: [...unsupported],
60
+ supportedPlatforms: [...supported],
61
+ };
56
62
  }
57
63
  /** The one-line pointer note CLAUDE.md's owned region carries (BAPI-1207). */
58
64
  const CLAUDE_NOTES_POINTER_NOTE = "Bridge MCP usage guidance is maintained in AGENTS.md — see the section above.";