Skip to content

Port Walter, Loop, and Lincoln as default teammate agents - #252

Open
TheGreatAxios wants to merge 5 commits into
mainfrom
cl-og-teammates
Open

Port Walter, Loop, and Lincoln as default teammate agents#252
TheGreatAxios wants to merge 5 commits into
mainfrom
cl-og-teammates

Conversation

@TheGreatAxios

Copy link
Copy Markdown
Contributor

Summary

Ports three of the OG gtm-workbench's agent templates as self-contained default-teammate packages, each installable through the same agent-directory create path Scout and the code-review reviewers already use:

  • @corbits/walter-agent — writer/editor. Zero tool package pins.
  • @corbits/loop-agent — research/synthesis generalist. Zero tool package pins.
  • @corbits/lincoln-agent — LinkedIn writer. Pins @corbits/web-search-tools (Exa) for optional grounding, replacing the original's firecrawl scrape/search tools, which workbench doesn't integrate.

Left out, and why

  • Oat (Granola call notes) and Freddy (web scraping): every one of their tools requires its own connector with no fallback function — Oat is 100% Granola-dependent, Freddy is 100% firecrawl-dependent. Neither does anything useful until someone connects a service first, which makes them specialists to add later, not default teammates that "go with Myra" out of the box.
  • The original's conditional artifact_link_file tool (used by Walter and Lincoln) has no workbench chat-agent-facing equivalent today, so it's dropped rather than invented — both prompts say plainly they have no tool to write or persist files.

A gap this surfaced

Lincoln's grounding tool, @corbits/web-search-tools, didn't wire the missing-credential-detail contract (packages/connections/src/missing-credential-detail.ts) or @corbits/error-sink, so a missing Exa credential rendered as a plain string instead of a connect prompt, and a genuine search failure was returned to the caller with no durable record. Fixed both (bumped to 0.0.4, updated every pin that names it) since Lincoln's honest-degradation story runs entirely through this shared package.

Merge order

Base: main. Sibling stack cl-6499-scout (#234) → cl-6499-jimmy (#235) → cl-6499-seed-agents (#240) isn't merged yet — this branch does not touch packages/workflow-catalog/src/templates.ts's default-teammates roster, since that template doesn't exist on main yet. Once #240 lands, add Walter/Loop/Lincoln to DEFAULT_TEAMMATES_TEMPLATE.participants following the exact pattern JIMMY_AGENT_ID already uses there — each package here exports the {id, handle, displayName, description, systemPrompt, toolPackagePins} shape participant-agent-requests.ts expects.

Confirmed generic

Grepped every new/changed file for company names, people, and endpoints from the reference project (gtm-workbench) — nothing beyond the porting-provenance comments/READMEs, which name the source project the same way the existing Scout/Jimmy ports already do. No secrets, no customer names, no internal URLs.

Test plan

  • bun test passes in packages/walter-agent, packages/loop-agent, packages/lincoln-agent, packages/web-search-tools, and workflows/last-30-days-research
  • tsc --noEmit passes in all three new packages
  • bun run check:tool-package-pins passes repo-wide

Ported from the OG gtm-workbench as default workbench teammates
alongside Myra: a writer/editor, a research/synthesis generalist, and a
LinkedIn writer, each self-contained as its own @corbits/*-agent
package.
Each ships as installable data (id/handle/displayName/description/
systemPrompt/toolPackagePins), the same shape the code-review and Scout
agents already use for the agent-directory create path.

- Walter (writer/editor) and Loop (research/synthesis) declare zero
  tool package pins — no connector needed before either is useful.
- Lincoln (LinkedIn writer) pins @corbits/web-search-tools instead of
  the original's firecrawl scrape/search tools, which workbench does
  not integrate. web_search already degrades to a plain "not
  connected" result rather than failing, and Lincoln's prompt tells him
  to draft from the conversation alone when that happens, so nothing
  here blocks on a connection either.

Left out of this port: Oat (Granola call notes) and Freddy (web
scraping) — every one of their tools requires its own connector with
no fallback function, so neither works until someone connects a
service first. That makes them specialists to add later, not default
teammates to seed a bench with.
…ting

Lincoln (the newly ported LinkedIn agent) depends on this tool for its
grounding search, so its two silent gaps are worth closing here: the
not-connected result carried no structured detail for a chat surface to
render a connect prompt from, and a genuine search failure returned a
plain string with no durable record of what broke.
The not-connected result now carries missing-credential-detail("exa")
so a chat surface renders "Connect Exa" instead of a dead-end error —
the same contract every other missing-credential surface in this repo
reads. A genuine search failure is reported through @corbits/error-sink
for the durable, quotable record before the plain-language ToolResult
goes back to the caller, so a real bug here is never swallowed.

Bumped to 0.0.4 and updated every pin that names it.
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