chore: drop custom-connector cruft, align docs on Cowork-native MCP#38
Conversation
Cowork Tasks composes Cowork's hosted MCP connectors (declared in
packages/plugin/.mcp.json) - it does not ship its own connectors,
OAuth flows, or polling daemons. The repo had stale scaffolding and
docs from the pre-Cowork-MCP design that were misleading contributors.
Removed:
- packages/connector-{email-gmail,chat-slack,meet-fathom}/ (vestigial)
- examples/connector-template/ (promoted the wrong contribution path)
- packages/plugin/bin/connectors/* (standalone-mode binaries)
- packages/plugin/bin/triage-runner.js (replaced by the triage-now skill)
- @cowork-tasks/connector-* deps from plugin package.json + release plumbing
Rewrote so every doc surface tells the same story:
- README.md (Sources table, architecture mermaid, contributing note,
roadmap, "what we don't accept")
- CONTRIBUTING.md (full rewrite: high-impact areas, no custom connectors)
- ROADMAP.md (drop "Outlook/Linear/Jira/Notion connectors" upcoming list)
- VISION.md (replace community-connectors metric with triage-quality)
- docs/architecture.md (rewrite layer 3 - was "connector monitors", now
"Cowork-native MCP connectors")
- docs/local-install.md (rewrite "Connecting sources locally" - no env
vars, no local OAuth, point at Customize -> Connectors)
- packages/plugin/CONNECTORS.md (replace template/PR fallback)
- packages/plugin/skills/setup/SKILL.md (constraint: never suggest
writing a custom connector)
- SHOWCASE.md (custom-connector table -> custom triage rules)
- .github/PULL_REQUEST_TEMPLATE.md (drop "New connector" type, add
guardrail checkbox)
- scripts/pack-local.mjs (header comment)
No runtime change: pack-local already excluded bin/, so the shipped
plugin zip is unaffected. Typecheck/lint/tests/build/pack all green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Second audit pass after the initial cleanup. Found pockets the first pass missed; this commit fixes everything that contradicted the new "compose Cowork-native MCPs, don't ship connectors" story. Deleted dead code: - packages/core/src/connectors/ (entire Connector/ConnectorRuntime/ FileSystemRuntime/runForever/checkContract runtime; unused by any production code, only consumed by connectors.test.ts which is also gone). Slimmed packages/core/src/index.ts to drop the orphan exports. - packages/plugin/bin/health.js (read ~/.cowork-tasks/triage-queue/ and triage-state.json — directories the new architecture says do not exist; not packed; the health skill queries MCP tool availability). - .github/ISSUE_TEMPLATE/connector.yml (recruited custom-connector PRs with "I'd like to claim this and submit a PR" — direct contradiction of the new policy). Rewrote contradicting docs: - SECURITY.md (scope no longer includes packages/connector-*; "what we read" section names Cowork-hosted MCPs as the boundary; explicitly notes no credentials/, cursors/, or triage-queue/ exist). - packages/landing/public/index.html (dropped "20+ connectors", "~50 lines of TypeScript", "Connectors poll cheap APIs / hourly triage"; flattened ready/stub matrix to 26 Cowork-hosted MCPs grouped by category; replaced "Wishlist a connector" with "request the MCP upstream"). Polished: - .github/ISSUE_TEMPLATE/feature.yml — kind options reflect actual contribution surface; markdown note points at policy. - .github/ISSUE_TEMPLATE/bug.yml — added "Cowork connector involved" optional field that CONTRIBUTING.md says reporters should include. - packages/mcp-server/src/server.ts — two stale tool-description strings updated (no more "hourly triage runner" / "connector skips it on the next poll"). Bundle rebuilt. - Counts: every "25+" → exactly "26" (matches .mcp.json). - Commands: every /coach-me or bare coach-me → /coach or coach (matches the actual skill folder). - docs/local-install.md quickstart now includes /cowork-tasks:coach. - docs/architecture.md reframes "New connector = no triage code change" as the more precise "Adding a new Cowork-native MCP entry to .mcp.json requires no triage code change". - README.md "connector wishlist" → "source-coverage wishlist". - docs/promotion/README.md got a stale-content banner — all 17 launch-prep drafts in that directory still reference the deleted pitch and must not be published until rewritten. Tests: 44 → 40 passing (4 deleted connectors.test.ts units). Lint, typecheck, build, pack-local all green. No runtime behavior change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
sabbah13
left a comment
There was a problem hiding this comment.
Automated Code Review
Verdict: ✅ APPROVE (with suggestions worth addressing in a follow-up)
Summary
Removes three vestigial custom-connector packages (connector-email-gmail, connector-chat-slack, connector-meet-fathom), the Connector/ConnectorRuntime type tree from packages/core/src/connectors/, and all 14 packages/plugin/bin/ scripts — none of which were included in the shipped zip. Every doc surface (README, CONTRIBUTING, ROADMAP, VISION, SHOWCASE, docs/architecture.md, docs/local-install.md, both issue templates, the PR template, the setup skill) is rewritten to consistently describe the Cowork-native MCP composition architecture. The only runtime change is two MCP tool description strings in packages/mcp-server/src/server.ts ("hourly triage runner" → "triage-now skill"; "next poll" → "next /triage-now"), which is correct and accurate.
Issues (must fix before merge)
None found. All CI checks are reported passing (typecheck clean across 6 packages, lint clean, tests 40/44 passing, build produces the expected bundle and zip). No new code paths introduced; nothing to break.
Suggestions (follow-up issues, not merge blockers)
-
Committed bundle inflates future diffs [
packages/plugin/bundle/mcp-server.js+311/-334]
The two stale description-string edits inserver.tstouched only ~10 characters of the bundle, but the rebuild also renamed internal variables (path4→path5,fs3→fs4) — presumably an esbuild artifact of the currentnode_modulesstate. Any futureserver.tschange will produce a similarly noisy bundle diff. Worth addingpackages/plugin/bundle/to.gitignoreand generating the bundle from CI immediately beforepnpm pack-local, rather than committing it to source. -
Test-count discrepancy in PR description
Five test files are deleted (examples/connector-template,connector-chat-slack,connector-email-gmail,connector-meet-fathom, andpackages/core/src/__tests__/connectors.test.ts), but the description says "Tests dropped from 44 to 40 passing (the 4 deletedconnectors.test.tsunits)." If the examples template test was excluded from the vitest workspace the count still adds up — but a one-line clarification in the CHANGELOG or description would keep the history accurate. -
Smoke-install checkbox still unchecked
- [ ] Smoke-install the zip in Claude Cowork and confirm /triage-now still calls Cowork-native MCPs (reviewer)is intentionally left for the reviewer, which is reasonable given there's no runtime change to the shipped zip. If you merge this yourself, tick it after your next local smoke run, or add a note that the prior green smoke run covers it. -
docs/promotion/README.mdbanner (mentioned in CHANGELOG)
The CHANGELOG notes a banner was added flagging 17 launch-prep drafts that still reference the deleted connector pitch. That's a public-facing risk if any draft gets published before the follow-up rewrite lands. Worth a dedicated issue with a deadline tied to your next marketing push.
Checklist
TypeScript strict / no implicit any |
✅ No new TS code; removed code was clean |
| ESLint / Prettier | ✅ No new source files |
| Security | ✅ Removes OAuth scaffolding — reduces attack surface |
| Logic correctness | ✅ Consistent across all 63 changed files; no runtime change |
| Test coverage | ✅ Deletion-only; 5 test files removed alongside their subjects |
| Connector contract | N/A — connector code removed, not added |
| UI artifact | ✅ No packages/artifact/ changes |
| PR template completeness | |
| Conventional commit | ✅ chore: drop custom-connector cruft, align docs on Cowork-native MCP |
This review was generated automatically. A maintainer should verify the smoke-install item before merge.
Generated by Claude Code
Generated by Claude Code
Automated Code ReviewVerdict: SummaryRemoves all vestigial custom-connector scaffolding — 3 connector packages, 14 Issues (must fix before merge)
Suggestions (optional)
This review was generated automatically. A maintainer will follow up. Generated by Claude Code |
Summary
Cowork Tasks composes Cowork's hosted MCP connectors (declared in
packages/plugin/.mcp.json) — it does not ship its own connectors, OAuth flows, or polling daemons. The repo had stale scaffolding and contributor docs from the pre-Cowork-MCP design that were actively misleading new contributors toward writingpackages/connector-*packages that no longer fit the architecture.This PR makes the Cowork-native composition story consistent across every doc surface and removes the vestigial code that contradicts it.
What's removed
packages/connector-email-gmail/,packages/connector-chat-slack/,packages/connector-meet-fathom/— vestigial workspace packages whose only consumers were the also-removed connector binaries.examples/connector-template/— promoted writing custom connectors (the wrong contribution path).packages/plugin/bin/connectors/*(13 files) andpackages/plugin/bin/triage-runner.js— leftover standalone-mode binaries; triage runs as a chat skill against Cowork-native MCPs now.@cowork-tasks/connector-*workspace deps frompackages/plugin/package.json,release-please-config.json, and the release manifest.What's rewritten
Every doc surface now tells the same story:
README.md— sources table, architecture mermaid, contributing note, roadmap, explicit "no custom connectors" policyCONTRIBUTING.md— full rewrite: removed "Adding a connector in 4 steps", added "High-impact areas" (artifact UX, triage rules, MCP tools, docs) and "What we do NOT accept"ROADMAP.md— dropped the "Outlook / Linear / Jira / Notion connectors upcoming" list (those are already supported via Cowork's hosted MCPs); added an "upstream" noteVISION.md— replaced the "community-built connectors outpacing maintainer-built ones" metric with "triage-quality + externally contributed triage-rule PRs"docs/architecture.md— rewrote layer 3 (was "Connector Monitors (background)" with non-existentmonitors.json, now "Cowork-native MCP connectors"); fixed the mermaid; updated storage layoutdocs/local-install.md— rewrote "Connecting sources locally" (was: paste tokens via env vars, run a local connector binary; now: "authorize in Customize → Connectors, run /triage-now"); removedcursors/,triage-queue/,credentials/from the disk-layout (those concerns live upstream)packages/plugin/CONNECTORS.md— removed theconnector-templatefallback paragraphpackages/plugin/skills/setup/SKILL.md— added explicit constraint: "Never suggest writing a custom connector package, polling daemon, or local OAuth helper"SHOWCASE.md— replaced "Custom connectors" gallery section with "Custom triage rules / agent prompts".github/PULL_REQUEST_TEMPLATE.md— dropped the "New connector" type, added the new types (triage rule, MCP-entry addition), added a guardrail checkboxscripts/pack-local.mjs— updated the file header commentWhat's NOT changed
pack-localalready excludedbin/(verified in the script), so the shipped plugin zip is unaffected.triage-now,health, andtask-extractoragent already used Cowork-native MCPs correctly — this PR just removes the contradictory scaffolding around them..mcp.json(the source of truth for what the plugin reads from). 25+ Cowork-hosted MCP entries remain unchanged.Test plan
pnpm typecheck— clean across all 6 packagespnpm lint— cleanpnpm test— 44/44 passing (core 19, artifact 15, mcp-server 10)pnpm build— clean (bundle/mcp-server.js839.9 KB, artifact 5384 bytes seed, 6 skills validated)pnpm pack-local— producesdist/cowork-tasks-local.zip(379 KB)/triage-nowstill calls Cowork-native MCPs (reviewer)Follow-up
Open issues #2 - #14 (the "[connector] Add X connector" issues) should be closed after this lands — most of those sources are already supported via Cowork's hosted MCPs (Linear, Jira, Asana, ClickUp, Notion, Granola, Fireflies, Outlook), and the rest (Discord, Telegram, IMAP, Otter, Read.ai) are out of scope until Cowork ships an MCP for them. Happy to file a separate housekeeping PR or a single bulk-close comment if you want me to.
🤖 Generated with Claude Code