TeamFlow in Zed
Zed calls MCP servers context servers, takes a bare URL for a remote one, and prompts for the standard MCP OAuth flow by itself. Its skills live in the shared .agents/skills root.
Tool Zed Reporting Automatic, via git hooks
1. Install
npx -y github:macleodlabs-ai/teamflow-plugin skills install --for zed
That writes:
.agents/skills/<skill>/SKILL.md— the ten skills, in the shared skills directory this tool readsAGENTS.md— the always-on reporting instruction, as a marked block; your own instructions above and below it are kept~/.config/zed/settings.json— the TeamFlow MCP server undercontext_servers
Add --scope user to install for every project on this machine, or --dry-run to see the file list without writing anything. Re-running it replaces TeamFlow's block and leaves the rest of each file alone.
Zed has no hook a local command can subscribe to, so the reporting comes from this repository's own git hooks:
npx -y github:macleodlabs-ai/teamflow-plugin hooks install --git
That writes three marked blocks into .git/hooks: post-commit, post-merge and pre-push. Each one exits 0 whatever TeamFlow answers, so a TeamFlow outage can never block a commit or a push.
2. The skills you get
The same ten the Claude Code plugin carries, generated from the same SKILL.md files. This tool loads them as skills, one directory each, with the name prefixed so they do not collide with anybody else’s in a shared directory.
| Skill | What it does |
|---|---|
teamflow-login / teamflow-logout | sign in once, or remove the session |
teamflow-status | who is signed in, what is bound, what was last sent |
teamflow-bind / teamflow-unbind | name the ticket by hand, or stop |
teamflow-sync | publish the current state now |
teamflow-doctor | transport, account, credits, tracker MCP |
teamflow-repos | register a repository so its CI can report |
teamflow-admin-code | email an invite code to an org admin; superadmins only |
macleodlabs-teamflow-client | call the paid service over MCP or REST |
Each one wraps a github:macleodlabs-ai/teamflow-plugin subcommand, so the skill and the shell command are the same thing. Inside Claude Code they are /teamflow:login, /teamflow:status and so on.
3. Sign in once
Zed's own words: when a remote MCP server has no configured Authorization header, it prompts you to authenticate against the server using the standard MCP OAuth flow. Leave the headers out and let it ask.
4. By hand
The installer writes this for you. If you would rather paste it: settings.json, opened with the zed: open settings file action.
{
"context_servers": {
"teamflow": {
"url": "https://codercat.io/mcp"
}
}
}
Settings -> AI -> MCP Servers writes the same entry. The key is context_servers, not mcpServers.
.agents/skills and ~/.agents/skills are Zed's only two skill locations, and the same shared root Codex CLI, Cursor, Copilot, Gemini CLI, Windsurf and Junie read. One install serves all of them. Keep the layout flat: Zed does not recurse into nested folders under the root.
Zed takes the first rules file it finds from .rules, .cursorrules, .windsurfrules, .clinerules, .github/copilot-instructions.md, AGENT.md, AGENTS.md, CLAUDE.md, GEMINI.md. The installer writes AGENTS.md; if the repository already has one of the earlier names, Zed reads that one instead and the TeamFlow block never loads. Check with npx -y github:macleodlabs-ai/teamflow-plugin skills install --for zed --dry-run and move the block by hand if so.
5. The stages to report
| Stage | When |
|---|---|
LOCAL_DEV | code is being written on a workstation |
LOCAL_TEST | the local test suite or build passed |
LOCAL_AUDIT | a local review, lint or security audit passed |
LOCAL_REWORK | a local gate failed; pass --rework-from naming it |
MERGE | the pull request is merged, or ready to be |
CI_BUILD | CI is building the merged change |
DEPLOY_DEV | the change is deployed to the shared dev environment |
DEV_TEST | tests passed against dev |
DEV_AUDIT | an audit passed against dev |
DEV_REWORK | a dev gate failed; pass --rework-from naming it |
DEV_VERIFIED | verified in dev |
READY_PROD | waiting on the production decision |
JIRA is the thirteenth: the ticket exists and nothing has started. Statuses are running, success, waiting, blocked, failed and idle. This is the same vocabulary the Claude Code plugin derives, so a ticket moved from here sits in the same column as one moved by Claude.
6. Without the agent
Anything that runs in a shell posts the same report with no model involved. A git hook, an npm script, a run configuration, a CI step:
npx -y github:macleodlabs-ai/teamflow-plugin report --issue DAEMON-142 --stage LOCAL_TEST \
--status success --summary "42 tests, 0 failing"
Same envelope, same transport, same credential. Prefer it wherever the board has to be right whether or not an agent remembered. npx -y github:macleodlabs-ai/teamflow-plugin report --help lists every flag.
7. What this is not
Zed has no agent hooks, so TeamFlow installs git hooks: commits, merges and pushes report by themselves; test and audit gates report when the test command runs through teamflow. Zed’s agent panel has no hook a local command can subscribe to, so TeamFlow reports from the repository’s own git hooks instead.
A commit is coarser than a tool call, so the board moves in steps rather than continuously. The rules the installer writes are there as well and the agent may report in between, but the git hooks are the half that does not forget, and they are the half worth wiring first.
8. What leaves your machine
TeamFlow is a delivery map for Jira, Linear and GitHub issues, run by MacleodLabs. Reports carry derived state only: a ticket key, a stage, a status, a short summary and evidence links. Prompts, diffs, source code, commands and logs are never sent and are rejected before they are charged.