Skip to content

chore: drop custom-connector cruft, align docs on Cowork-native MCP#38

Merged
sabbah13 merged 2 commits into
mainfrom
chore/drop-custom-connectors
May 6, 2026
Merged

chore: drop custom-connector cruft, align docs on Cowork-native MCP#38
sabbah13 merged 2 commits into
mainfrom
chore/drop-custom-connectors

Conversation

@sabbah13

@sabbah13 sabbah13 commented May 5, 2026

Copy link
Copy Markdown
Owner

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 writing packages/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) and packages/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 from packages/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" policy
  • CONTRIBUTING.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" note
  • VISION.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-existent monitors.json, now "Cowork-native MCP connectors"); fixed the mermaid; updated storage layout
  • docs/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"); removed cursors/, triage-queue/, credentials/ from the disk-layout (those concerns live upstream)
  • packages/plugin/CONNECTORS.md — removed the connector-template fallback paragraph
  • packages/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 checkbox
  • scripts/pack-local.mjs — updated the file header comment

What's NOT changed

  • Runtime behavior. pack-local already excluded bin/ (verified in the script), so the shipped plugin zip is unaffected.
  • The triage-now, health, and task-extractor agent already used Cowork-native MCPs correctly — this PR just removes the contradictory scaffolding around them.
  • The plugin's .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 packages
  • pnpm lint — clean
  • pnpm test — 44/44 passing (core 19, artifact 15, mcp-server 10)
  • pnpm build — clean (bundle/mcp-server.js 839.9 KB, artifact 5384 bytes seed, 6 skills validated)
  • pnpm pack-local — produces dist/cowork-tasks-local.zip (379 KB)
  • Smoke-install the zip in Claude Cowork and confirm /triage-now still 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

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 sabbah13 left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)

  1. Committed bundle inflates future diffs [packages/plugin/bundle/mcp-server.js +311/-334]
    The two stale description-string edits in server.ts touched only ~10 characters of the bundle, but the rebuild also renamed internal variables (path4path5, fs3fs4) — presumably an esbuild artifact of the current node_modules state. Any future server.ts change will produce a similarly noisy bundle diff. Worth adding packages/plugin/bundle/ to .gitignore and generating the bundle from CI immediately before pnpm pack-local, rather than committing it to source.

  2. Test-count discrepancy in PR description
    Five test files are deleted (examples/connector-template, connector-chat-slack, connector-email-gmail, connector-meet-fathom, and packages/core/src/__tests__/connectors.test.ts), but the description says "Tests dropped from 44 to 40 passing (the 4 deleted connectors.test.ts units)." 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.

  3. 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.

  4. docs/promotion/README.md banner (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 ⚠️ Uses a custom format rather than the standard template; test plan is thorough, fine for a maintainer PR
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

sabbah13 commented May 6, 2026

Copy link
Copy Markdown
Owner Author

Automated Code Review

Verdict: ⚠️ REQUEST CHANGES

Summary

Removes all vestigial custom-connector scaffolding — 3 connector packages, 14 bin/ scripts, examples/connector-template/, packages/core/src/connectors/, and 4 related tests — and rewrites every doc surface to align with the Cowork-native-MCP architecture. No runtime behavior changes; the shipped plugin zip and .mcp.json are untouched. All 40 remaining tests (was 44; 4 connector tests deleted) and the build pass cleanly. The deletion work and doc rewrites are thorough, but two consistency gaps must be resolved before the PR achieves its stated goal of eliminating misleading contributor guidance.


Issues (must fix before merge)

  1. packages/plugin/monitors/monitors.json not addressed

    The old CONTRIBUTING.md described adding an entry to monitors.json as part of the connector-setup flow. That file does not appear in this diff. If it still exists on disk with entries pointing to the now-deleted bin/connectors/*.js binaries, it is a stale dead reference that directly contradicts the PR's goal. Please confirm the file is already deleted in a prior commit, or delete/empty it here.

  2. Connector count discrepancy: "26" vs table row count [README.md, packages/landing/public/index.html, packages/plugin/skills/setup/SKILL.md]

    The prose throughout the PR states "26 Cowork-native sources," but the README's "Sources supported" table tallies to 27 rows (Email:2, Calendar:2, Chat:2, Issues:6, Knowledge:2, Meeting recorders:4, Customer support:2, Incidents:2, Files:2, Signatures:1, Design:2 = 27). The architecture diagram's Mermaid node says "5 named + …21 more = 26." Since this PR's entire purpose is making the docs the single source of truth, the stated count, the table, and the actual entry count in packages/plugin/.mcp.json must all agree. Please reconcile.


Suggestions (optional)

  • cache/ directory silently dropped [docs/architecture.md, docs/local-install.md] — The old storage-layout trees included cache/ # content cache (LRU, 500 MB cap). Both updated trees drop it without a "Notably absent" note. If the MCP server still creates this directory at runtime, the docs are now inaccurate. Either restore the entry or add it to the "Notably absent" list.

  • /coach vs /cowork-tasks:coach inconsistencyREADME.md uses the bare /coach form throughout; docs/local-install.md quickstart uses the fully-qualified /cowork-tasks:coach. If both forms are valid in their respective contexts, a brief parenthetical in one of the two files would prevent contributor confusion.

  • docs/promotion/ stale messaging — The CHANGELOG correctly flags this as a known non-blocking gap ("17 launch-prep drafts still carry old messaging"). Filing a tracking issue now would prevent the next contributor from inadvertently publishing the stale copy.

  • Feature-template anchor [.github/ISSUE_TEMPLATE/feature.yml] — The new markdown block links to CONTRIBUTING.md#what-we-do-not-accept. The heading contains Markdown bold (**not**); GitHub strips markers when slugifying, producing #what-we-do-not-accept, which matches the link. Worth a quick click-test after merge to confirm.


This review was generated automatically. A maintainer will follow up.


Generated by Claude Code

@sabbah13
sabbah13 merged commit 46cd3b3 into main May 6, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant