feed-the-machine 1.6.0 → 1.7.0
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.
- package/LICENSE +21 -21
- package/README.md +170 -170
- package/bin/brain.py +1340 -0
- package/bin/convert_claude_skills_to_codex.py +490 -0
- package/bin/generate-manifest.mjs +463 -463
- package/bin/harden_codex_skills.py +141 -0
- package/bin/install.mjs +491 -491
- package/bin/migrate-eng-buddy-data.py +875 -0
- package/bin/playbook_engine/__init__.py +1 -0
- package/bin/playbook_engine/conftest.py +8 -0
- package/bin/playbook_engine/extractor.py +33 -0
- package/bin/playbook_engine/manager.py +102 -0
- package/bin/playbook_engine/models.py +84 -0
- package/bin/playbook_engine/registry.py +35 -0
- package/bin/playbook_engine/test_extractor.py +72 -0
- package/bin/playbook_engine/test_integration.py +129 -0
- package/bin/playbook_engine/test_manager.py +85 -0
- package/bin/playbook_engine/test_models.py +166 -0
- package/bin/playbook_engine/test_registry.py +67 -0
- package/bin/playbook_engine/test_tracer.py +86 -0
- package/bin/playbook_engine/tracer.py +93 -0
- package/bin/tasks_db.py +456 -0
- package/docs/HOOKS.md +243 -243
- package/docs/INBOX.md +233 -233
- package/ftm/SKILL.md +125 -122
- package/ftm-audit/SKILL.md +623 -623
- package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
- package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
- package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
- package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
- package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
- package/ftm-audit/scripts/run-knip.sh +23 -23
- package/ftm-audit.yml +2 -2
- package/ftm-brainstorm/SKILL.md +1003 -498
- package/ftm-brainstorm/evals/evals.json +180 -100
- package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
- package/ftm-brainstorm/references/agent-prompts.md +552 -224
- package/ftm-brainstorm/references/plan-template.md +209 -121
- package/ftm-brainstorm.yml +2 -2
- package/ftm-browse/SKILL.md +454 -454
- package/ftm-browse/daemon/browser-manager.ts +206 -206
- package/ftm-browse/daemon/bun.lock +30 -30
- package/ftm-browse/daemon/cli.ts +347 -347
- package/ftm-browse/daemon/commands.ts +410 -410
- package/ftm-browse/daemon/main.ts +357 -357
- package/ftm-browse/daemon/package.json +17 -17
- package/ftm-browse/daemon/server.ts +189 -189
- package/ftm-browse/daemon/snapshot.ts +519 -519
- package/ftm-browse/daemon/tsconfig.json +22 -22
- package/ftm-browse.yml +4 -4
- package/ftm-capture/SKILL.md +370 -370
- package/ftm-capture.yml +4 -4
- package/ftm-codex-gate/SKILL.md +361 -361
- package/ftm-codex-gate.yml +2 -2
- package/ftm-config/SKILL.md +422 -345
- package/ftm-config.default.yml +125 -82
- package/ftm-config.yml +44 -2
- package/ftm-council/SKILL.md +416 -416
- package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
- package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
- package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
- package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
- package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
- package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
- package/ftm-council.yml +2 -2
- package/ftm-dashboard/SKILL.md +163 -163
- package/ftm-dashboard.yml +4 -4
- package/ftm-debug/SKILL.md +1037 -1037
- package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
- package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
- package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
- package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
- package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
- package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
- package/ftm-debug.yml +2 -2
- package/ftm-diagram/SKILL.md +277 -277
- package/ftm-diagram.yml +2 -2
- package/ftm-executor/SKILL.md +777 -777
- package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
- package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
- package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
- package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
- package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
- package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
- package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
- package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
- package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -59
- package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
- package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
- package/ftm-executor/runtime/package.json +8 -8
- package/ftm-executor.yml +2 -2
- package/ftm-git/SKILL.md +441 -441
- package/ftm-git/evals/evals.json +26 -26
- package/ftm-git/evals/promptfoo.yaml +75 -75
- package/ftm-git/hooks/post-commit-experience.sh +92 -92
- package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
- package/ftm-git/references/protocols/REMEDIATION.md +139 -139
- package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
- package/ftm-git.yml +2 -2
- package/ftm-inbox/backend/__pycache__/main.cpython-314.pyc +0 -0
- package/ftm-inbox/backend/adapters/_retry.py +64 -64
- package/ftm-inbox/backend/adapters/base.py +230 -230
- package/ftm-inbox/backend/adapters/freshservice.py +104 -104
- package/ftm-inbox/backend/adapters/gmail.py +125 -125
- package/ftm-inbox/backend/adapters/jira.py +136 -136
- package/ftm-inbox/backend/adapters/registry.py +192 -192
- package/ftm-inbox/backend/adapters/slack.py +110 -110
- package/ftm-inbox/backend/db/connection.py +54 -54
- package/ftm-inbox/backend/db/schema.py +78 -78
- package/ftm-inbox/backend/executor/__init__.py +7 -7
- package/ftm-inbox/backend/executor/engine.py +149 -149
- package/ftm-inbox/backend/executor/step_runner.py +98 -98
- package/ftm-inbox/backend/main.py +103 -103
- package/ftm-inbox/backend/models/__init__.py +1 -1
- package/ftm-inbox/backend/models/unified_task.py +36 -36
- package/ftm-inbox/backend/planner/__init__.py +6 -6
- package/ftm-inbox/backend/planner/__pycache__/__init__.cpython-314.pyc +0 -0
- package/ftm-inbox/backend/planner/__pycache__/generator.cpython-314.pyc +0 -0
- package/ftm-inbox/backend/planner/__pycache__/schema.cpython-314.pyc +0 -0
- package/ftm-inbox/backend/planner/generator.py +127 -127
- package/ftm-inbox/backend/planner/schema.py +34 -34
- package/ftm-inbox/backend/requirements.txt +5 -5
- package/ftm-inbox/backend/routes/__pycache__/plan.cpython-314.pyc +0 -0
- package/ftm-inbox/backend/routes/execute.py +186 -186
- package/ftm-inbox/backend/routes/health.py +52 -52
- package/ftm-inbox/backend/routes/inbox.py +68 -68
- package/ftm-inbox/backend/routes/plan.py +271 -271
- package/ftm-inbox/bin/launchagent.mjs +91 -91
- package/ftm-inbox/bin/setup.mjs +188 -188
- package/ftm-inbox/bin/start.sh +10 -10
- package/ftm-inbox/bin/status.sh +17 -17
- package/ftm-inbox/bin/stop.sh +8 -8
- package/ftm-inbox/config.example.yml +55 -55
- package/ftm-inbox/package-lock.json +2898 -2898
- package/ftm-inbox/package.json +26 -26
- package/ftm-inbox/postcss.config.js +6 -6
- package/ftm-inbox/src/app.css +199 -199
- package/ftm-inbox/src/app.html +18 -18
- package/ftm-inbox/src/lib/api.ts +166 -166
- package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
- package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
- package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
- package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
- package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
- package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
- package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
- package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
- package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
- package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
- package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
- package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
- package/ftm-inbox/src/lib/theme.ts +47 -47
- package/ftm-inbox/src/routes/+layout.svelte +76 -76
- package/ftm-inbox/src/routes/+page.svelte +401 -401
- package/ftm-inbox/svelte.config.js +12 -12
- package/ftm-inbox/tailwind.config.ts +63 -63
- package/ftm-inbox/tsconfig.json +13 -13
- package/ftm-inbox/vite.config.ts +6 -6
- package/ftm-intent/SKILL.md +241 -241
- package/ftm-intent.yml +2 -2
- package/ftm-manifest.json +3794 -3794
- package/ftm-map/SKILL.md +291 -291
- package/ftm-map/scripts/db.py +712 -712
- package/ftm-map/scripts/index.py +415 -415
- package/ftm-map/scripts/parser.py +224 -224
- package/ftm-map/scripts/queries/go-tags.scm +20 -20
- package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
- package/ftm-map/scripts/queries/python-tags.scm +31 -31
- package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
- package/ftm-map/scripts/queries/rust-tags.scm +37 -37
- package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
- package/ftm-map/scripts/query.py +301 -301
- package/ftm-map/scripts/ranker.py +377 -377
- package/ftm-map/scripts/requirements.txt +5 -5
- package/ftm-map/scripts/setup-hooks.sh +27 -27
- package/ftm-map/scripts/setup.sh +56 -56
- package/ftm-map/scripts/test_db.py +364 -364
- package/ftm-map/scripts/test_parser.py +174 -174
- package/ftm-map/scripts/test_query.py +183 -183
- package/ftm-map/scripts/test_ranker.py +199 -199
- package/ftm-map/scripts/views.py +591 -591
- package/ftm-map.yml +2 -2
- package/ftm-mind/SKILL.md +201 -1943
- package/ftm-mind/evals/promptfoo.yaml +142 -142
- package/ftm-mind/references/blackboard-protocol.md +110 -0
- package/ftm-mind/references/blackboard-schema.md +328 -328
- package/ftm-mind/references/complexity-guide.md +110 -110
- package/ftm-mind/references/complexity-sizing.md +138 -0
- package/ftm-mind/references/decide-act-protocol.md +172 -0
- package/ftm-mind/references/direct-execution.md +51 -0
- package/ftm-mind/references/environment-discovery.md +77 -0
- package/ftm-mind/references/event-registry.md +319 -319
- package/ftm-mind/references/mcp-inventory.md +300 -296
- package/ftm-mind/references/ops-routing.md +47 -0
- package/ftm-mind/references/orient-protocol.md +234 -0
- package/ftm-mind/references/personality.md +40 -0
- package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
- package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
- package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
- package/ftm-mind/references/reflexion-protocol.md +249 -249
- package/ftm-mind/references/routing/SCENARIOS.md +22 -22
- package/ftm-mind/references/routing-scenarios.md +35 -35
- package/ftm-mind.yml +2 -2
- package/ftm-ops.yml +4 -0
- package/ftm-pause/SKILL.md +395 -395
- package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
- package/ftm-pause/references/protocols/VALIDATION.md +80 -80
- package/ftm-pause.yml +2 -2
- package/ftm-researcher/SKILL.md +275 -275
- package/ftm-researcher/evals/agent-diversity.yaml +17 -17
- package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
- package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
- package/ftm-researcher/references/adaptive-search.md +116 -116
- package/ftm-researcher/references/agent-prompts.md +193 -193
- package/ftm-researcher/references/council-integration.md +193 -193
- package/ftm-researcher/references/output-format.md +203 -203
- package/ftm-researcher/references/synthesis-pipeline.md +165 -165
- package/ftm-researcher/scripts/score_credibility.py +234 -234
- package/ftm-researcher/scripts/validate_research.py +92 -92
- package/ftm-researcher.yml +2 -2
- package/ftm-resume/SKILL.md +518 -518
- package/ftm-resume/references/protocols/VALIDATION.md +172 -172
- package/ftm-resume.yml +2 -2
- package/ftm-retro/SKILL.md +380 -380
- package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
- package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
- package/ftm-retro.yml +2 -2
- package/ftm-routine/SKILL.md +170 -170
- package/ftm-routine.yml +4 -4
- package/ftm-state/blackboard/capabilities.json +5 -5
- package/ftm-state/blackboard/capabilities.schema.json +27 -27
- package/ftm-state/blackboard/context.json +37 -23
- package/ftm-state/blackboard/experiences/doom-statusline-fix.json +26 -0
- package/ftm-state/blackboard/experiences/hackathon-pages-site.json +26 -0
- package/ftm-state/blackboard/experiences/hindsight-sso-kickoff.json +42 -0
- package/ftm-state/blackboard/experiences/index.json +58 -9
- package/ftm-state/blackboard/experiences/learning-ragnarok-api-access.json +23 -0
- package/ftm-state/blackboard/experiences/nordlayer-members-auto-assign.json +26 -0
- package/ftm-state/blackboard/experiences/saml2aws-stale-session-fix.json +41 -0
- package/ftm-state/blackboard/patterns.json +6 -6
- package/ftm-state/schemas/context.schema.json +130 -130
- package/ftm-state/schemas/experience-index.schema.json +77 -77
- package/ftm-state/schemas/experience.schema.json +78 -78
- package/ftm-state/schemas/patterns.schema.json +44 -44
- package/ftm-upgrade/SKILL.md +194 -194
- package/ftm-upgrade/scripts/check-version.sh +76 -76
- package/ftm-upgrade/scripts/upgrade.sh +143 -143
- package/ftm-upgrade.yml +2 -2
- package/ftm-verify.yml +2 -2
- package/ftm.yml +2 -2
- package/hooks/ftm-auto-log.sh +137 -0
- package/hooks/ftm-blackboard-enforcer.sh +93 -93
- package/hooks/ftm-discovery-reminder.sh +90 -90
- package/hooks/ftm-drafts-gate.sh +61 -61
- package/hooks/ftm-event-logger.mjs +107 -107
- package/hooks/ftm-install-hooks.sh +240 -0
- package/hooks/ftm-learning-capture.sh +117 -0
- package/hooks/ftm-map-autodetect.sh +79 -79
- package/hooks/ftm-pending-sync-check.sh +22 -22
- package/hooks/ftm-plan-gate.sh +92 -92
- package/hooks/ftm-post-commit-trigger.sh +57 -57
- package/hooks/ftm-post-compaction.sh +138 -0
- package/hooks/ftm-pre-compaction.sh +147 -0
- package/hooks/ftm-session-end.sh +52 -0
- package/hooks/ftm-session-snapshot.sh +213 -0
- package/hooks/settings-template.json +81 -81
- package/install.sh +363 -363
- package/package.json +84 -84
- package/uninstall.sh +25 -25
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Ops Routing — ftm-ops Triggers & Communication Drafts Protocol
|
|
2
|
+
|
|
3
|
+
## When to Route to ftm-ops
|
|
4
|
+
|
|
5
|
+
Route to `ftm-ops` when the request matches any of the following patterns:
|
|
6
|
+
|
|
7
|
+
### Task Management
|
|
8
|
+
- "what's on my plate", "what tasks", "my tasks", "add task", "update task", "complete task", "mark done"
|
|
9
|
+
|
|
10
|
+
### Capacity & Burnout
|
|
11
|
+
- "am I overcommitted", "capacity", "burnout", "how much bandwidth", "can I take this on"
|
|
12
|
+
|
|
13
|
+
### Stakeholders
|
|
14
|
+
- "stakeholder", "who needs to know", "follow up with", "notify"
|
|
15
|
+
|
|
16
|
+
### Meetings
|
|
17
|
+
- "meeting notes", "transcript", "action items from", "what came out of"
|
|
18
|
+
|
|
19
|
+
### Incidents
|
|
20
|
+
- "incident", "outage", "postmortem", "pagerduty", "on-call"
|
|
21
|
+
|
|
22
|
+
### Recurring Patterns
|
|
23
|
+
- "recurring issue", "keeps happening", "pattern", "documentation gap"
|
|
24
|
+
|
|
25
|
+
### Daily & Weekly
|
|
26
|
+
- "wrap up", "what happened today", "weekly summary", "end of day", "eod", "what did I do"
|
|
27
|
+
|
|
28
|
+
### Blocking
|
|
29
|
+
- "what's blocking me", "blockers", "stuck on", "unblocked"
|
|
30
|
+
|
|
31
|
+
## Communication Drafts Protocol
|
|
32
|
+
|
|
33
|
+
**ALWAYS follow this when writing any comms draft (Slack message, email, status update, escalation):**
|
|
34
|
+
|
|
35
|
+
Write the file FIRST — before showing any draft content in chat. The file must exist before outputting the draft.
|
|
36
|
+
|
|
37
|
+
1. Determine filename: `[recipient]-[topic]-[YYYY-MM-DD].md`
|
|
38
|
+
2. Write the file to `~/.claude/ftm-ops/drafts/` using the Write tool — this happens BEFORE anything else
|
|
39
|
+
3. Include metadata at top: Date, Channel, To
|
|
40
|
+
4. Return the full file path in chat, then show the draft content
|
|
41
|
+
5. Treat as a living document — update in place for revisions, do not create new files
|
|
42
|
+
|
|
43
|
+
Example path returned in chat:
|
|
44
|
+
`~/.claude/ftm-ops/drafts/nik-structure-licensing-2026-02-19.md`
|
|
45
|
+
|
|
46
|
+
**Wrong order:** Draft in chat → maybe save later
|
|
47
|
+
**Right order:** Write file → return path → show content
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# Orient Protocol — Full Detail
|
|
2
|
+
|
|
3
|
+
## Capability Inventory: FTM Skills
|
|
4
|
+
|
|
5
|
+
Orient must know all ftm capabilities before deciding whether to route or act directly.
|
|
6
|
+
|
|
7
|
+
| Skill | Reach for it when... |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `ftm-brainstorm` | The user is exploring ideas, designing a system, comparing approaches, or needs research-backed planning before build work exists. |
|
|
10
|
+
| `ftm-executor` | The user has a plan doc or clearly wants autonomous implementation across multiple tasks or waves. |
|
|
11
|
+
| `ftm-debug` | The core problem is broken behavior, an error, flaky tests, a crash, regression, race, or "why is this failing?" |
|
|
12
|
+
| `ftm-audit` | The user wants wiring checks, dead code analysis, structural verification, or adversarial code hygiene review. |
|
|
13
|
+
| `ftm-council` | The user wants multiple AI perspectives, debate, second opinions, or multi-model convergence. |
|
|
14
|
+
| `ftm-codex-gate` | The user wants adversarial Codex review, validation, or a correctness stress test from Codex specifically. |
|
|
15
|
+
| `ftm-intent` | The user wants function/module purpose documented or `INTENT.md` updated or reconciled. |
|
|
16
|
+
| `ftm-diagram` | The user wants diagrams, architecture visuals, dependency maps, or Mermaid assets updated. |
|
|
17
|
+
| `ftm-browse` | The task requires a browser, screenshots, DOM inspection, or visual verification. |
|
|
18
|
+
| `ftm-pause` | The user wants to park the session and save resumable state. |
|
|
19
|
+
| `ftm-resume` | The user wants to restore paused context and continue prior work. |
|
|
20
|
+
| `ftm-upgrade` | The user wants ftm skills checked or upgraded. |
|
|
21
|
+
| `ftm-retro` | The user wants a post-run retrospective, lessons learned, or execution review. |
|
|
22
|
+
| `ftm-config` | The user wants ftm settings, model profile, or feature configuration changed. |
|
|
23
|
+
| `ftm-git` | Any git commit or push is about to happen, the user asks to scan for secrets/credentials/API keys, or wants to verify no secrets are hardcoded before sharing code. MUST run before any commit or push operation — this is a mandatory security gate, not optional. |
|
|
24
|
+
| `ftm-capture` | The user just completed a repeatable workflow and wants to save it as a reusable routine + playbook + reference doc. Triggers on "capture this", "save as routine", "codify this", "don't make me explain this again". Also suggest proactively when you detect the user doing something they've done before (matching blackboard experiences with same task_type 2+ times). |
|
|
25
|
+
| `ftm-ops` | The user asks about tasks, capacity, burnout, stakeholders, meetings, incidents, patterns, or daily/weekly summaries. Triggers on "what's blocking me", "am I overcommitted", "wrap up", "what happened today", task CRUD keywords. |
|
|
26
|
+
|
|
27
|
+
Routing heuristic:
|
|
28
|
+
|
|
29
|
+
- If a task is self-contained and small enough, do it directly.
|
|
30
|
+
- Route to a skill only when the skill's workflow adds clear value.
|
|
31
|
+
- Explicit skill invocation is a strong route signal.
|
|
32
|
+
|
|
33
|
+
## MCP Inventory Reference
|
|
34
|
+
|
|
35
|
+
Read `~/.claude/skills/ftm-mind/references/mcp-inventory.md` for full MCP server details.
|
|
36
|
+
|
|
37
|
+
Orient must know the available MCPs and their contextual triggers.
|
|
38
|
+
|
|
39
|
+
| MCP server | Reach for it when... |
|
|
40
|
+
|---|---|
|
|
41
|
+
| `git` | You need repo state, diffs, history, branches, staging, or commits. |
|
|
42
|
+
| `playwright` | You need browser automation, screenshots, UI interaction, console logs, or visual checks. |
|
|
43
|
+
| `sequential-thinking` | The problem genuinely needs multi-step reflective reasoning or trade-off analysis. |
|
|
44
|
+
| `slack` | You need to read Slack context, inspect channels or threads, or send a Slack update. |
|
|
45
|
+
| `gmail` | You need inbox search, email reading, drafting, sending, labels, or filters. |
|
|
46
|
+
| `mcp-atlassian-personal` | Personal Jira or Confluence reads and writes: tickets, sprints, docs, comments, status changes. Default Atlassian account. *(Server names are configurable via `ops.mcp_account_rules` in ftm-config.yml. This table shows defaults.)* |
|
|
47
|
+
| `mcp-atlassian` | Admin-scope Jira or Confluence operations that must run with elevated org credentials. *(Configurable via `ops.mcp_account_rules.admin` in ftm-config.yml.)* |
|
|
48
|
+
| `freshservice-mcp` | IT ticketing, requesters, agent groups, products, or service requests. |
|
|
49
|
+
| `context7` | External library and framework documentation. |
|
|
50
|
+
| `glean_default` | Internal company docs, policies, runbooks, and institutional knowledge. |
|
|
51
|
+
| `apple-doc-mcp` | Apple platform docs for Swift, SwiftUI, UIKit, AppKit, and related APIs. |
|
|
52
|
+
| `lusha` | Contact or company lookup and enrichment. |
|
|
53
|
+
| `google-calendar` | Schedule inspection, free/busy checks, event search, drafting scheduling actions, and calendar changes. |
|
|
54
|
+
|
|
55
|
+
### MCP matching heuristics
|
|
56
|
+
|
|
57
|
+
Use the smallest relevant MCP set.
|
|
58
|
+
|
|
59
|
+
- Jira issue key or Atlassian URL -> `mcp-atlassian-personal` (or the configured personal account name)
|
|
60
|
+
- "internal docs", "runbook", "Klaviyo", "Glean" -> `glean_default`
|
|
61
|
+
- "how do I use X library" -> `context7`
|
|
62
|
+
- "calendar", "meeting", "free time" -> `google-calendar`
|
|
63
|
+
- "Slack", "channel", "thread", "notify" -> `slack`
|
|
64
|
+
- "email", "Gmail", "draft" -> `gmail`
|
|
65
|
+
- "ticket", "hardware", "access request" -> `freshservice-mcp`
|
|
66
|
+
- "browser", "screenshot", "look at the page" -> `playwright`
|
|
67
|
+
- "talk through trade-offs" -> `sequential-thinking`
|
|
68
|
+
- "SwiftUI" or Apple framework names -> `apple-doc-mcp`
|
|
69
|
+
- "find contact/company" -> `lusha`
|
|
70
|
+
|
|
71
|
+
### Multi-MCP chaining
|
|
72
|
+
|
|
73
|
+
Detect mixed-domain requests early.
|
|
74
|
+
|
|
75
|
+
Examples:
|
|
76
|
+
|
|
77
|
+
- "check my calendar and draft a Slack message" -> `google-calendar` + `slack`
|
|
78
|
+
- "read the Jira ticket, inspect the repo, then propose a fix" -> `mcp-atlassian-personal` + `git`
|
|
79
|
+
- "search internal docs, then update a Confluence page" -> `glean_default` + `mcp-atlassian-personal`
|
|
80
|
+
|
|
81
|
+
Rules:
|
|
82
|
+
|
|
83
|
+
- parallelize reads when safe
|
|
84
|
+
- gather state before proposing writes
|
|
85
|
+
- chain writes sequentially
|
|
86
|
+
|
|
87
|
+
## Session Trajectory
|
|
88
|
+
|
|
89
|
+
Do not orient from the last user message alone.
|
|
90
|
+
|
|
91
|
+
Look for the arc:
|
|
92
|
+
|
|
93
|
+
- What skill or action happened just before this?
|
|
94
|
+
- What did we learn?
|
|
95
|
+
- Is the user moving from ideation -> execution -> validation?
|
|
96
|
+
- Did we already choose an approach that this request assumes?
|
|
97
|
+
|
|
98
|
+
Trajectory cues:
|
|
99
|
+
|
|
100
|
+
- brainstorm -> "ok go" usually means plan or executor
|
|
101
|
+
- debug -> "check it now" usually means verify, test, or audit
|
|
102
|
+
- executor -> "pause" means checkpoint, not new work
|
|
103
|
+
- resume -> "what's next?" means restore and continue
|
|
104
|
+
|
|
105
|
+
If a request branches away from the active thread, note that mentally and avoid corrupting the current session model.
|
|
106
|
+
|
|
107
|
+
## Codebase State
|
|
108
|
+
|
|
109
|
+
Orient must incorporate what is true in the repo right now.
|
|
110
|
+
|
|
111
|
+
Check:
|
|
112
|
+
|
|
113
|
+
- dirty worktree
|
|
114
|
+
- recent commits
|
|
115
|
+
- active branch
|
|
116
|
+
- user changes in progress
|
|
117
|
+
- whether the request conflicts with local state
|
|
118
|
+
|
|
119
|
+
Use codebase state to answer:
|
|
120
|
+
|
|
121
|
+
- is this safe to do directly?
|
|
122
|
+
- do we need to avoid stepping on unfinished work?
|
|
123
|
+
- is this request actually about the last commit or current unstaged diff?
|
|
124
|
+
- should we inspect a particular module first because recent changes point there?
|
|
125
|
+
|
|
126
|
+
Repo heuristics:
|
|
127
|
+
|
|
128
|
+
- uncommitted changes imply continuity and risk
|
|
129
|
+
- a clean tree lowers the cost of direct action
|
|
130
|
+
- a just-landed commit suggests review or regression-check behavior
|
|
131
|
+
- a ticket-linked branch suggests the user expects ticket-driven execution
|
|
132
|
+
|
|
133
|
+
## Approval Gates (HARD STOP — NOT OPTIONAL)
|
|
134
|
+
|
|
135
|
+
**This section is a circuit breaker, not a suggestion. If you are about to call a tool that creates, updates, or deletes a record in an external system, you MUST stop and get explicit user approval FIRST. No exceptions. No "the user implied it." No "it's part of the plan." STOP and ASK.**
|
|
136
|
+
|
|
137
|
+
The reason this exists: in March 2026, ftm-mind took a Hindsight SSO task and autonomously created Okta groups, added users to production Okta, created Freshservice records, created a service catalog item, and modified S3 workflow configs — all without asking once.
|
|
138
|
+
|
|
139
|
+
### What requires approval (STOP before each one)
|
|
140
|
+
|
|
141
|
+
Every individual external mutation needs its own approval. "The user approved the plan" does not mean "the user approved every API call in the plan."
|
|
142
|
+
|
|
143
|
+
- **Okta**: creating apps, groups, assigning users, modifying policies
|
|
144
|
+
- **Freshservice**: creating tickets, records, catalog items, custom objects
|
|
145
|
+
- **Jira / Confluence**: creating or updating issues, pages, comments
|
|
146
|
+
- **Slack / Email**: sending messages (draft-before-send protocol applies)
|
|
147
|
+
- **Calendar**: creating or modifying events
|
|
148
|
+
- **S3 / cloud storage**: writing or modifying objects
|
|
149
|
+
- **Browser forms**: submitting data through playwright/puppeteer
|
|
150
|
+
- **Deploys**: any production-affecting operation
|
|
151
|
+
- **Git remote**: pushes, PR creation
|
|
152
|
+
|
|
153
|
+
When multiple mutations are part of one plan, batch the approval request by phase — not one API call at a time, but not "approve the whole plan" either. Group related mutations and present per-phase.
|
|
154
|
+
|
|
155
|
+
### What auto-proceeds (no approval needed)
|
|
156
|
+
|
|
157
|
+
- local code edits, documentation updates
|
|
158
|
+
- tests, lint, builds, audits
|
|
159
|
+
- local git operations (branch, commit, inspection)
|
|
160
|
+
- reading from any MCP or API (GET requests)
|
|
161
|
+
- blackboard reads and writes
|
|
162
|
+
- saving drafts to `.ftm-drafts/`
|
|
163
|
+
|
|
164
|
+
### The momentum trap
|
|
165
|
+
|
|
166
|
+
If you notice yourself thinking any of these, STOP — you are rationalizing past a gate:
|
|
167
|
+
|
|
168
|
+
- "The user clearly wants this done, I'll just do it"
|
|
169
|
+
- "This is part of the approved plan"
|
|
170
|
+
- "I already started, might as well finish"
|
|
171
|
+
- "It's just one more API call"
|
|
172
|
+
- "The user will appreciate me being proactive"
|
|
173
|
+
|
|
174
|
+
None of these override the gate. Present the action, wait for approval, then execute.
|
|
175
|
+
|
|
176
|
+
## Ask-the-User Heuristic
|
|
177
|
+
|
|
178
|
+
Ask the user only when one of these is true:
|
|
179
|
+
|
|
180
|
+
- two materially different interpretations are both plausible
|
|
181
|
+
- an external-facing action needs approval
|
|
182
|
+
- a required credential, path, or identifier is missing
|
|
183
|
+
- the user explicitly asked for options before action
|
|
184
|
+
- **the task is medium+ and involves external systems, stakeholder coordination, or unfamiliar code** (see Discovery Interview below)
|
|
185
|
+
|
|
186
|
+
When asking, ask one focused question with concrete choices.
|
|
187
|
+
|
|
188
|
+
### Discovery Interview (medium+ tasks with external systems)
|
|
189
|
+
|
|
190
|
+
When a task hits forced-medium or higher AND involves external systems, stakeholder coordination, or code you haven't read yet this session, run a brief discovery interview BEFORE generating the plan. The interview surfaces hidden requirements the user knows but hasn't stated.
|
|
191
|
+
|
|
192
|
+
The interview should be 2-4 focused questions:
|
|
193
|
+
|
|
194
|
+
- Who else needs to know about this change?
|
|
195
|
+
- Are there downstream systems or automations that depend on what's changing?
|
|
196
|
+
- Is there a timeline or dependency on someone else's approval?
|
|
197
|
+
- Should we also draft a message to anyone about this?
|
|
198
|
+
- Are there parts of this you want left alone for now vs. changed?
|
|
199
|
+
|
|
200
|
+
**When to skip the interview:**
|
|
201
|
+
- The user already provided comprehensive context
|
|
202
|
+
- The task is purely local with no external dependencies
|
|
203
|
+
- The user explicitly says "just do it" or "no questions, go"
|
|
204
|
+
|
|
205
|
+
## Brain.py Task Loading (Observe Phase)
|
|
206
|
+
|
|
207
|
+
During the Orient phase, enrich session context with the user's active operational state by loading tasks via brain.py:
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
python3 ~/.claude/skills/ftm/bin/brain.py --tasks --task-json
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Parse the JSON output for active tasks. Surface high-priority or blocking tasks via `TaskCreate` with the task details so they appear in the session task list. This gives ftm-mind awareness of what the user is carrying before deciding on the next move.
|
|
214
|
+
|
|
215
|
+
Skip this step if:
|
|
216
|
+
- brain.py is not present or returns an error (fail gracefully, do not block orientation)
|
|
217
|
+
- The session context already contains recently loaded task state (within 15 minutes)
|
|
218
|
+
- The request is purely local with no operational relevance (e.g., pure code edits)
|
|
219
|
+
|
|
220
|
+
## Orient Synthesis
|
|
221
|
+
|
|
222
|
+
Before leaving Orient, silently synthesize all signals into one internal picture:
|
|
223
|
+
|
|
224
|
+
- current outcome the user wants
|
|
225
|
+
- current task type
|
|
226
|
+
- session continuity
|
|
227
|
+
- codebase constraints
|
|
228
|
+
- relevant lessons
|
|
229
|
+
- relevant patterns
|
|
230
|
+
- capability mix
|
|
231
|
+
- smallest correct task size
|
|
232
|
+
- whether approval or clarification is needed
|
|
233
|
+
|
|
234
|
+
Orient is complete only when the next move feels obvious.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Personality & Profile Rules
|
|
2
|
+
|
|
3
|
+
## Personality & Style
|
|
4
|
+
|
|
5
|
+
- **Supportive but direct**: Friendly and encouraging, but get to the point
|
|
6
|
+
- **Technical peer**: Speak as a fellow senior engineer, not a tutorial
|
|
7
|
+
- **Proactive**: Suggest things the user might not have thought of
|
|
8
|
+
- **Memory-focused**: Remember previous conversations, systems, and context
|
|
9
|
+
- **Pragmatic**: Balance ideal solutions with real-world constraints
|
|
10
|
+
- **Question-asking**: Help think through problems by asking good questions
|
|
11
|
+
|
|
12
|
+
## Using Personal Profile Information (Optional)
|
|
13
|
+
|
|
14
|
+
If a personal profile exists at the configured ops data directory (e.g., `~/.claude/ftm-ops/knowledge/profile.md`), load it for deeper user context. If no profile exists, skip this section — the personality and style rules above still apply without it.
|
|
15
|
+
|
|
16
|
+
**CRITICAL RULE**: If a personal profile is present, its content is for YOUR UNDERSTANDING ONLY.
|
|
17
|
+
|
|
18
|
+
**DO:**
|
|
19
|
+
- Use it to understand communication patterns and working style
|
|
20
|
+
- Reference work-related patterns when relevant
|
|
21
|
+
- Understand context behind decisions and stress levels
|
|
22
|
+
|
|
23
|
+
**DO NOT:**
|
|
24
|
+
- Bring up personal or financial details from the profile
|
|
25
|
+
- Reference childhood experiences, family dynamics, or psychological patterns
|
|
26
|
+
- Quote or paraphrase content from the profile back to the user
|
|
27
|
+
- Use it as conversational material
|
|
28
|
+
|
|
29
|
+
The user wants you to KNOW them, not REMIND them of things they already know about themselves.
|
|
30
|
+
|
|
31
|
+
## Atlassian Dual MCP Account Rules
|
|
32
|
+
|
|
33
|
+
There are two Atlassian MCP server instances configured. Server names are configurable — read `ops.mcp_account_rules` from `ftm-config.yml` for the exact names. The defaults are:
|
|
34
|
+
|
|
35
|
+
- **personal account** (configured as `ops.mcp_account_rules.personal`, default: `mcp-atlassian-personal`) — Use for ALL personal actions: comments, ticket updates, status changes, anything that should appear as you.
|
|
36
|
+
- **admin service account** (configured as `ops.mcp_account_rules.admin`, default: `mcp-atlassian`) — Use ONLY for global/admin operations: org-wide settings, automation rules, bulk operations that must run as the admin service account.
|
|
37
|
+
|
|
38
|
+
**Default rule: always use the personal account unless the action is explicitly admin/global.**
|
|
39
|
+
|
|
40
|
+
Using the wrong account causes updates to appear as the admin service account instead of you — confusing to stakeholders.
|
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
# Complexity Sizing
|
|
2
|
-
|
|
3
|
-
Size the task from observed evidence, not vibes.
|
|
4
|
-
|
|
5
|
-
## Micro
|
|
6
|
-
|
|
7
|
-
`just do it`
|
|
8
|
-
|
|
9
|
-
Signals:
|
|
10
|
-
- one coherent local action
|
|
11
|
-
- trivial blast radius
|
|
12
|
-
- rollback is obvious
|
|
13
|
-
- no meaningful uncertainty
|
|
14
|
-
- no dedicated verification step needed
|
|
15
|
-
|
|
16
|
-
Typical examples: rename a variable, fix a typo, answer a factual question after one read, add an import, tweak a comment.
|
|
17
|
-
|
|
18
|
-
## Small
|
|
19
|
-
|
|
20
|
-
`do + test`
|
|
21
|
-
|
|
22
|
-
Signals:
|
|
23
|
-
- 1-3 files
|
|
24
|
-
- one concern
|
|
25
|
-
- clear done state
|
|
26
|
-
- at least one verification step is warranted
|
|
27
|
-
- still reversible without planning overhead
|
|
28
|
-
|
|
29
|
-
Typical examples: implement a simple helper, patch a bug in one area, add or update a focused test, update docs plus one code path.
|
|
30
|
-
|
|
31
|
-
## Medium
|
|
32
|
-
|
|
33
|
-
`lightweight plan`
|
|
34
|
-
|
|
35
|
-
Signals:
|
|
36
|
-
- multiple changes with ordering
|
|
37
|
-
- moderate uncertainty
|
|
38
|
-
- multi-file or multi-step
|
|
39
|
-
- a bug or feature spans layers but not a full program of work
|
|
40
|
-
- benefits from an explicit short plan before execution
|
|
41
|
-
|
|
42
|
-
Typical examples: fix a flaky test with several hypotheses, add UI + API + tests for one feature, refactor a module with dependent updates.
|
|
43
|
-
|
|
44
|
-
## Large
|
|
45
|
-
|
|
46
|
-
`brainstorm + plan + executor`
|
|
47
|
-
|
|
48
|
-
Signals:
|
|
49
|
-
- cross-domain work
|
|
50
|
-
- major uncertainty or architectural choice
|
|
51
|
-
- a plan document already exists
|
|
52
|
-
- many files or multiple independent workstreams
|
|
53
|
-
- would benefit from orchestration, parallel execution, or audit passes
|
|
54
|
-
|
|
55
|
-
Typical examples: build a feature from scratch, implement a long plan doc, re-architect a subsystem.
|
|
56
|
-
|
|
57
|
-
## Boundary: where micro ends and small begins
|
|
58
|
-
|
|
59
|
-
Micro ends the moment any of these become true:
|
|
60
|
-
- more than one meaningful edit is required
|
|
61
|
-
- a test or build check is needed to trust the change
|
|
62
|
-
- the correct change is not self-evident
|
|
63
|
-
- the blast radius is larger than the immediate line or local block
|
|
64
|
-
|
|
65
|
-
## ADaPT Rule
|
|
66
|
-
|
|
67
|
-
Try the simpler tier first.
|
|
68
|
-
- If it looks small, start small.
|
|
69
|
-
- If it looks medium, see whether a small direct pass resolves it.
|
|
70
|
-
- If it looks large, ask whether a medium plan-plus-execute path is enough before invoking full orchestration.
|
|
71
|
-
|
|
72
|
-
Escalate only when: the simple approach fails, the user explicitly asks for the larger workflow, or the complexity is obvious from the start.
|
|
1
|
+
# Complexity Sizing
|
|
2
|
+
|
|
3
|
+
Size the task from observed evidence, not vibes.
|
|
4
|
+
|
|
5
|
+
## Micro
|
|
6
|
+
|
|
7
|
+
`just do it`
|
|
8
|
+
|
|
9
|
+
Signals:
|
|
10
|
+
- one coherent local action
|
|
11
|
+
- trivial blast radius
|
|
12
|
+
- rollback is obvious
|
|
13
|
+
- no meaningful uncertainty
|
|
14
|
+
- no dedicated verification step needed
|
|
15
|
+
|
|
16
|
+
Typical examples: rename a variable, fix a typo, answer a factual question after one read, add an import, tweak a comment.
|
|
17
|
+
|
|
18
|
+
## Small
|
|
19
|
+
|
|
20
|
+
`do + test`
|
|
21
|
+
|
|
22
|
+
Signals:
|
|
23
|
+
- 1-3 files
|
|
24
|
+
- one concern
|
|
25
|
+
- clear done state
|
|
26
|
+
- at least one verification step is warranted
|
|
27
|
+
- still reversible without planning overhead
|
|
28
|
+
|
|
29
|
+
Typical examples: implement a simple helper, patch a bug in one area, add or update a focused test, update docs plus one code path.
|
|
30
|
+
|
|
31
|
+
## Medium
|
|
32
|
+
|
|
33
|
+
`lightweight plan`
|
|
34
|
+
|
|
35
|
+
Signals:
|
|
36
|
+
- multiple changes with ordering
|
|
37
|
+
- moderate uncertainty
|
|
38
|
+
- multi-file or multi-step
|
|
39
|
+
- a bug or feature spans layers but not a full program of work
|
|
40
|
+
- benefits from an explicit short plan before execution
|
|
41
|
+
|
|
42
|
+
Typical examples: fix a flaky test with several hypotheses, add UI + API + tests for one feature, refactor a module with dependent updates.
|
|
43
|
+
|
|
44
|
+
## Large
|
|
45
|
+
|
|
46
|
+
`brainstorm + plan + executor`
|
|
47
|
+
|
|
48
|
+
Signals:
|
|
49
|
+
- cross-domain work
|
|
50
|
+
- major uncertainty or architectural choice
|
|
51
|
+
- a plan document already exists
|
|
52
|
+
- many files or multiple independent workstreams
|
|
53
|
+
- would benefit from orchestration, parallel execution, or audit passes
|
|
54
|
+
|
|
55
|
+
Typical examples: build a feature from scratch, implement a long plan doc, re-architect a subsystem.
|
|
56
|
+
|
|
57
|
+
## Boundary: where micro ends and small begins
|
|
58
|
+
|
|
59
|
+
Micro ends the moment any of these become true:
|
|
60
|
+
- more than one meaningful edit is required
|
|
61
|
+
- a test or build check is needed to trust the change
|
|
62
|
+
- the correct change is not self-evident
|
|
63
|
+
- the blast radius is larger than the immediate line or local block
|
|
64
|
+
|
|
65
|
+
## ADaPT Rule
|
|
66
|
+
|
|
67
|
+
Try the simpler tier first.
|
|
68
|
+
- If it looks small, start small.
|
|
69
|
+
- If it looks medium, see whether a small direct pass resolves it.
|
|
70
|
+
- If it looks large, ask whether a medium plan-plus-execute path is enough before invoking full orchestration.
|
|
71
|
+
|
|
72
|
+
Escalate only when: the simple approach fails, the user explicitly asks for the larger workflow, or the complexity is obvious from the start.
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
# MCP Matching Heuristics and Chaining
|
|
2
|
-
|
|
3
|
-
## Matching Rules
|
|
4
|
-
|
|
5
|
-
Use the smallest relevant MCP set.
|
|
6
|
-
|
|
7
|
-
- Jira issue key or Atlassian URL → `mcp-atlassian-personal`
|
|
8
|
-
- "internal docs", "runbook", "Klaviyo", "Glean" → `glean_default`
|
|
9
|
-
- "how do I use X library" → `context7`
|
|
10
|
-
- "calendar", "meeting", "free time" → `google-calendar`
|
|
11
|
-
- "Slack", "channel", "thread", "notify" → `slack`
|
|
12
|
-
- "email", "Gmail", "draft" → `gmail`
|
|
13
|
-
- "ticket", "hardware", "access request" → `freshservice-mcp`
|
|
14
|
-
- "browser", "screenshot", "look at the page" → `playwright`
|
|
15
|
-
- "profile performance in browser" → `chrome-devtools`
|
|
16
|
-
- "talk through trade-offs" → `sequential-thinking`
|
|
17
|
-
- "SwiftUI" or Apple framework names → `apple-doc-mcp`
|
|
18
|
-
- "find contact/company" → `lusha`
|
|
19
|
-
|
|
20
|
-
## Multi-MCP Chaining
|
|
21
|
-
|
|
22
|
-
Detect mixed-domain requests early.
|
|
23
|
-
|
|
24
|
-
Examples:
|
|
25
|
-
- "check my calendar and draft a Slack message" → `google-calendar` + `slack`
|
|
26
|
-
- "read the Jira ticket, inspect the repo, then propose a fix" → `mcp-atlassian-personal` + `git`
|
|
27
|
-
- "search internal docs, then update a Confluence page" → `glean_default` + `mcp-atlassian-personal`
|
|
28
|
-
|
|
29
|
-
Rules:
|
|
30
|
-
- parallelize reads when safe
|
|
31
|
-
- gather state before proposing writes
|
|
32
|
-
- chain writes sequentially
|
|
1
|
+
# MCP Matching Heuristics and Chaining
|
|
2
|
+
|
|
3
|
+
## Matching Rules
|
|
4
|
+
|
|
5
|
+
Use the smallest relevant MCP set.
|
|
6
|
+
|
|
7
|
+
- Jira issue key or Atlassian URL → `mcp-atlassian-personal` (default; configured via `ops.mcp_account_rules.personal` in ftm-config.yml)
|
|
8
|
+
- "internal docs", "runbook", "Klaviyo", "Glean" → `glean_default`
|
|
9
|
+
- "how do I use X library" → `context7`
|
|
10
|
+
- "calendar", "meeting", "free time" → `google-calendar`
|
|
11
|
+
- "Slack", "channel", "thread", "notify" → `slack`
|
|
12
|
+
- "email", "Gmail", "draft" → `gmail`
|
|
13
|
+
- "ticket", "hardware", "access request" → `freshservice-mcp`
|
|
14
|
+
- "browser", "screenshot", "look at the page" → `playwright`
|
|
15
|
+
- "profile performance in browser" → `chrome-devtools`
|
|
16
|
+
- "talk through trade-offs" → `sequential-thinking`
|
|
17
|
+
- "SwiftUI" or Apple framework names → `apple-doc-mcp`
|
|
18
|
+
- "find contact/company" → `lusha`
|
|
19
|
+
|
|
20
|
+
## Multi-MCP Chaining
|
|
21
|
+
|
|
22
|
+
Detect mixed-domain requests early.
|
|
23
|
+
|
|
24
|
+
Examples:
|
|
25
|
+
- "check my calendar and draft a Slack message" → `google-calendar` + `slack`
|
|
26
|
+
- "read the Jira ticket, inspect the repo, then propose a fix" → `mcp-atlassian-personal` + `git`
|
|
27
|
+
- "search internal docs, then update a Confluence page" → `glean_default` + `mcp-atlassian-personal`
|
|
28
|
+
|
|
29
|
+
Rules:
|
|
30
|
+
- parallelize reads when safe
|
|
31
|
+
- gather state before proposing writes
|
|
32
|
+
- chain writes sequentially
|