TeamFlow in VS Code with GitHub Copilot
Copilot agent mode loads Agent Skills and reads MCP servers from a workspace file, handling the OAuth handoff itself. Note the top-level key: VS Code says servers where almost every other client says mcpServers. Untested · coming shortly. We have not run TeamFlow in VS Code with GitHub Copilot yet. The steps below follow its own documentation.
Tool VS Code + Copilot Reporting Automatic, via hooks Status Untested · coming shortly
1. Install
npx -y github:macleodlabs-ai/teamflow-plugin skills install --for copilot
That writes:
.agents/skills/<skill>/SKILL.md— the twelve skills, in the shared skills directory this tool reads.github/copilot-instructions.md— a marked TeamFlow block; your own instructions are kept.vscode/mcp.json— the TeamFlow MCP server underservers.github/mcp.json— the TeamFlow MCP server for Copilot CLI, undermcpServers; Copilot CLI does not read.vscode/mcp.json.teamflow/hooks/copilot.sh— the hook itself; it callsteamflow hook --for copilot, prints nothing the tool could read as a denial, and exits 0 whatever happens.teamflow/hooks/copilot.ps1— the same hook for a Windows developer; the config names it beside the shell one, so a repository shared between macOS and Windows reports from both.github/hooks/teamflow.json— the hook registration:SessionStart,UserPromptSubmit,PermissionRequest,SubagentStart,SubagentStop,SessionEnd,PostToolUse,PostToolUseFailure,Stop,postToolUse,postToolUseFailureandagentStop
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.
Then sign this machine in, and check it. The hooks above report nothing at all until there is a credential, and nothing errors while they do not: an install that is never signed in looks exactly like a working one until somebody notices the board is empty.
npx -y github:macleodlabs-ai/teamflow-plugin login
npx -y github:macleodlabs-ai/teamflow-plugin status
login opens a browser once and stores a revocable refresh token; login --device prints a code to type into a browser on another machine instead. status answers with the organisation, the project and the repository this checkout reports to, and identity: not signed in there is the one thing to fix before expecting anything on the board.
2. What TeamFlow can do in GitHub Copilot
This list comes from GitHub Copilot's own documentation, checked 2026-10-04. We have not run GitHub Copilot with TeamFlow yet.
- Yes: Ticket, project and lead notes at session start.
- Yes: TeamFlow skills.
- Yes: TeamFlow MCP server.
- Partly: Allow or Deny from TeamFlow. Only Copilot CLI asks TeamFlow. The VS Code agent has no event for a permission.
- Partly: Plan goes on when a turn ends. Only for helper agents. At a turn end, Copilot does not send its last answer.
- Partly: Helper agents and session end on the board. VS Code reports helper agents but not session end. Copilot CLI reports agent stops and session end.
- No: Ticket, project and threads with each prompt. Copilot drops the text a hook adds to a prompt. The ticket comes at session start.
- No: One-minute check-in on an idle session. Copilot cannot wake an idle session later.
To add these to an earlier install, run npx -y github:macleodlabs-ai/teamflow-plugin hooks install --for copilot again. Every tool side by side.
3. The skills you get
The same twelve 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-next | take the top-priority open ticket, assign it and bind it |
teamflow-sync | publish the current state now |
teamflow-doctor | transport, account, 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.
4. Sign in once
A browser window opens on the first connection to the server. After that, MCP: List Servers shows teamflow running with its three tools, and they appear in the agent-mode tool picker.
5. By hand
The installer writes this for you. If you would rather paste it: .vscode/mcp.json in the workspace, or the user profile file from MCP: Open User Configuration.
{
"servers": {
"teamflow": {
"type": "http",
"url": "https://codercat.io/mcp"
}
}
}
Leave the oauth block out. It exists for servers that need a pre-registered client id; TeamFlow publishes /.well-known/oauth-protected-resource and VS Code discovers what it needs. The command palette writes the same file: MCP: Add Server -> HTTP.
Agent mode is the only mode that can call MCP tools. Ask mode and inline chat read the instructions and have nothing to call them with.
VS Code also scans .github/skills and .claude/skills. The installer writes only the shared root, so a repository carries one copy.
6. Uninstall
npx -y github:macleodlabs-ai/teamflow-plugin skills uninstall --for copilot
That removes exactly what the install above wrote: its own files go, and its own entries come out of the files it shares with your editor's other hooks and servers, which are left as they were. A hook TeamFlow did not write is never touched, and uninstalling something that is not there succeeds quietly. --dry-run prints the list without removing anything.
npx -y github:macleodlabs-ai/teamflow-plugin hooks uninstall --all is the bigger hammer: every tool at once, the git hooks, and this repository's ticket binding.
7. 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 |
DONE | waiting on the production decision |
BACKLOG 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.
8. 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.
9. What this is not
VS Code with GitHub Copilot reports automatically through its own hooks: SessionStart, UserPromptSubmit, PermissionRequest, SubagentStart, SubagentStop, SessionEnd, PostToolUse, PostToolUseFailure, Stop, postToolUse, postToolUseFailure and agentStop. Nothing to remember. One hook file in .github/hooks covers both the VS Code agent and Copilot CLI, which read the same directory in two different dialects. Checked against the vendor’s own hook documentation on 2026-10-04: Re-read for MACLEOD-972 against docs.github.com/en/copilot/reference/hooks-reference and code.visualstudio.com/docs/agents/reference/hooks-reference. Copilot CLI: "Two payload formats are supported, selected by the event name used in the hook configuration", so the PascalCase names carry VS Code's fields. sessionStart additionalContext is honoured; preToolUse is "fail-closed on errors", so it is not registered; permissionRequest takes behavior "allow" | "deny"; agentStop takes decision "block" with a reason. VS Code has no PermissionRequest, SessionEnd or Notification event, and UserPromptSubmit takes only the common output.
The hooks see this tool's own calls and nothing else. A test run in another terminal, a merge from the web UI, a deploy from a pipeline: put npx -y github:macleodlabs-ai/teamflow-plugin report in the git hook or the script that already runs on every change, and those land on the board too.
10. What leaves your machine
TeamFlow manages your AI software factory. It is run by MacleodLabs. Your code stays inside your organisation: the local plugin sends 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.