TeamFlow in Qwen Code
Qwen Code reads QWEN.md, loads skills from .qwen/skills and takes MCP servers in .qwen/settings.json. The installer writes all three. Untested · coming shortly. We have not run TeamFlow in Qwen Code yet. The steps below follow its own documentation.
Tool Qwen Code Reporting Automatic, via git hooks Status Untested · coming shortly
1. Install
npx -y github:macleodlabs-ai/teamflow-plugin skills install --for qwen
That writes:
.qwen/skills/<skill>/SKILL.md— the twelve skills, in the skills directory Qwen Code readsQWEN.md— a marked TeamFlow block; your own instructions are kept.qwen/settings.json— the TeamFlow MCP server underhttpUrl
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.
TeamFlow does not read Qwen Code's own hooks yet, 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.
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. 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.
3. Sign in once
Its documentation does not say how it signs in to a remote server. If no sign-in opens, sign in from the command line, which the git hooks use anyway:
npx -y github:macleodlabs-ai/teamflow-plugin login
4. By hand
The installer writes this for you. If you would rather paste it: .qwen/settings.json.
{
"mcpServers": {
"teamflow": {
"httpUrl": "https://codercat.io/mcp"
}
}
}
Qwen Code's hooks send tool_name, tool_input and tool_response, close to Claude Code's. TeamFlow does not read them yet, so the git hooks do the reporting.
5. Uninstall
npx -y github:macleodlabs-ai/teamflow-plugin skills uninstall --for qwen
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.
The git hooks are the repository's rather than this tool's, so they come out separately:
npx -y github:macleodlabs-ai/teamflow-plugin hooks uninstall --git
Each of the three loses the block between # BEGIN teamflow and # END teamflow. A hook file that was nothing but that block goes; one you had already keeps everything else in it.
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.
6. 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.
7. 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.
8. What this is not
Qwen Code has hooks of its own, and TeamFlow does not read them yet, so TeamFlow installs git hooks: commits, merges and pushes report by themselves; test and audit gates report when the test command runs through teamflow. Qwen Code has hooks close to Claude Code’s. TeamFlow does not read them yet, so it reports Qwen Code work on commit, merge and push. Checked against the vendor’s own hook documentation on 2026-09-23: PostToolUse documents tool_name, tool_input, tool_response, tool_use_id and duration_ms in .qwen/settings.json hooks, close to Claude Code’s shape; an adapter is the next step once a real session is watched.
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.
9. What leaves your machine
TeamFlow is the DevOps harness for agentic software delivery, 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.