Skip to main content
Glama

agent-bridge

Let Claude steer Codex, and Codex steer Claude, in the real desktop chats you already have open.

License: MIT Python 3.11+ MCP Windows

agent-bridge is a single-file MCP server for Windows. It lets one AI coding agent list, read and message another agent's chats. It covers Codex in the ChatGPT desktop app, the Claude desktop Code tab and headless Claude Code CLI sessions. It drives the desktop apps through Windows UI Automation, filling the same composer and pressing the same buttons you would. No subprocess copy and no hidden session: the message lands in the chat you are watching, with that chat's full context.

  • Claude as PI, Codex as worker. Claude reads a long-running Codex chat, steers it mid-turn, and pauses, resumes or rewrites its goal.

  • Replies come back on their own. When the caller is itself a desktop chat, the answer is typed into the caller's chat when it is ready.

  • It works in both directions. Register it in Codex and Codex can hand work to a Claude session.

Tools

Tool

What it does

list_projects(app)

Projects (folders) for codex, claude_code or claude_cli, most recently active first.

list_chats(app, project)

Chats in a project, newest first, with each Codex chat's goal status and each Claude chat's busy/idle state.

read_chat(app, chat, last)

The last messages of a chat: what was asked and each turn's final answer.

send_message(app, text, chat?, project?)

Types into an existing chat, or starts a new one in any folder. A busy Codex chat gets the message as a Steer. Returns a job_id.

wait_reply(job_id)

Waits for the answer to a send.

codex_goal(chat, action, objective?)

Gets, pauses, resumes or edits a Codex chat's goal, and checks the change against Codex's goal store.

codex_generate_image(prompt, dest_dir)

Has Codex make an image with its image_gen tool and copies the file to you.

Related MCP server: QQ MCP Server

Install

Requires Windows, Python 3.11+, and the Codex (ChatGPT) and/or Claude desktop apps installed and signed in.

Claude Code

claude mcp add -s user agent-bridge -- uvx agent-bridge-mcp

Codex (~/.codex/config.toml). Replies can take a while, so raise the tool timeout:

[mcp_servers.agent_bridge]
command = "uvx"
args = ["agent-bridge-mcp"]
tool_timeout_sec = 1800

Any other MCP client

{ "mcpServers": { "agent-bridge": { "command": "uvx", "args": ["agent-bridge-mcp"] } } }

Without uv: pip install agent-bridge-mcp, then use agent-bridge-mcp as the command. From source: uvx --from git+https://github.com/EngMarchG/agent-bridge agent-bridge-mcp.

Example

Read my Codex chat "Implement milestones" in project bridges, tell me where it is stuck, and steer it toward the failing test.

The calling agent runs list_chats, read_chat and then send_message. The answer arrives in its chat when Codex finishes the turn.

How it works

  • Listing and reading opens each app's own local files read-only: Codex's SQLite state and rollouts, and Claude's session JSON and JSONL transcripts.

  • Sending goes through UI Automation. The bridge first switches the ChatGPT app to Codex mode, then opens the chat from the sidebar. It handles a split Claude window. A busy Codex chat shows Queue and then Steer, and the bridge clicks Steer. Afterwards it puts back the chats you were looking at.

  • Replies. Every send starts a detached watcher. The watcher waits for the turn to end in the transcript and stores the reply in ~/.agent-bridge/jobs/ (set AGENT_BRIDGE_HOME to move it). If the caller is a desktop chat, the watcher types the reply into it.

  • claude_cli runs claude -p --resume headless with the permission_mode you pass.

Limits and safety

  • Windows only. It depends on UI Automation, and on the apps' current labels and layout, so an app update can break it.

  • It types into your real chats and briefly brings the app window forward. Don't type in the target window during a send.

  • Run one call at a time. Parallel calls drive the same UI and collide. A file lock serialises calls across processes.

  • Wake the window if needed. If a send fails with "no window found", the Chromium window has its accessibility tree off. Click into the app once.

  • The bridge never accepts "Trust this workspace?" for you. It never overwrites a draft that's already in the composer.

  • Prompt injection. Text in one agent's reply becomes input for another. Treat chains of agents with the same care as any other untrusted input.

Development

python test_agent_bridge.py

The test checks transcript parsing only and touches no app.

License

MIT

Available Tools

7 tools
codex_generate_imageA

Ask Codex (new chat in project) to make an image with its image_gen tool, wait, and copy the result(s) into dest_dir. Returns the copied file paths; open them with your image viewer/Read tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
projectNoscratch
dest_dirYes
timeout_sNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose real behavior: a new chat is created in `project`, the call blocks while waiting, and files are written into dest_dir, with file paths returned. However it says nothing about failure/timeout behavior, whether existing files in dest_dir are overwritten, or that the default 900s timeout makes this a long-running call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences: the workflow is front-loaded and the return-value/next-step note is appended, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description usefully states the return value (copied file paths), so the basics are covered. Still missing are timeout/failure semantics and documentation for the prompt/timeout_s parameters, leaving an agent guessing on a long-running, file-writing operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it only partially does: `project` is tied to 'new chat in project' and dest_dir to 'copy the result(s) into dest_dir'. The `prompt` argument is left implicit and `timeout_s` is never mentioned at all despite its 900s default materially affecting behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource (generate an image, copy the resulting file(s) to dest_dir) and even explains the mechanism (delegating to a new Codex chat's image_gen tool). This clearly distinguishes it from chat-oriented siblings like send_message, read_chat, and codex_goal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies when the tool is used (you want an image produced) and hints at next steps ('open them with your image viewer/Read tool'), but it never states exclusions or names an alternative (e.g. why use this instead of send_message to a Codex chat). Usage is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

codex_goalB

Read or steer the goal of a Codex chat (id or exact title). action: 'get' | 'pause' (the stop button) | 'resume' (the start button) | 'edit' (opens Edit goal, replaces the objective with objective, presses Save). Changes are checked against Codex's goal store.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
actionNoget
projectNo
objectiveNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose real behavior: 'edit' replaces the objective and presses Save, and changes are validated against Codex's goal store. However it omits side effects of pause/resume, permission or auth requirements, and what 'get' returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose in the first clause, then packs action semantics into a compact parenthetical list. Dense but every clause carries information; no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no annotations and no output schema, the description covers the action behaviors well but leaves `project` unexplained and gives no sense of what read/get returns. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and there are 4 parameters, so the description must compensate. It does well for `action` (spelling out get/pause/resume/edit semantics), `chat` (id or exact title), and `objective` (used by edit), but says nothing about the `project` parameter, leaving one of four undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource ('Read or steer the goal of a Codex chat'), which clearly separates it from siblings like read_chat or list_chats. It doesn't explicitly contrast with any named alternative, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description enumerates the actions and what each does, which implies usage, but never states when to choose this tool over read_chat/send_message or what prerequisites (e.g., a valid chat id) are needed. Usage is left to inference from the action list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_chatsC

List chats in a project (name or path from list_projects), newest first. codex chats show their goal status; claude chats show busy / idle / closed.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
limitNo
projectYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It adds some useful status semantics (goal status for codex chats, busy/idle/closed for claude chats), but omits pagination/limit behavior, required 'app'/'project' prerequisites, and permission or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and followed by a useful status note. No filler language, though the status sentence is somewhat cryptic without examples.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. Still, with 3 params at 0% schema description coverage and no annotations, the description is incomplete regarding parameter meanings and listing behavior (limit, app selection).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain the 'app', 'project', or 'limit' parameters. The only hint is that 'project' is a name or path from list_projects; 'app' and 'limit' are entirely undocumented, and limit doesn't even appear in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List chats in a project') and adds the ordering ('newest first'). However, it does not differentiate from the listed sibling 'list_projects' (though that sibling lists a different resource) beyond noting that the project argument is a name/path from list_projects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It mentions that the project argument can come from list_projects, which implies a chaining context, but provides no explicit when-to-use/when-not-to-use or alternatives for retrieving chats (e.g., read_chat).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsB

List projects (folders) for app = 'codex', 'claude_code' or 'claude_cli', most recently active first.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the default ordering (most recently active first), but says nothing about pagination, result limits, or authentication requirements for a read-style listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with no filler; the resource, the allowed app values, and the sort order all earn their place and are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter listing tool with an output schema present (so return values need no explanation), the description covers the essentials: what is listed, for which apps, and in what order. Only the lack of sibling routing and pagination/auth context keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema declares 'app' as a plain string with no enum, so the description supplies the critical missing information: the three accepted values ('codex', 'claude_code', 'claude_cli'). This materially compensates for the schema gap, though no default or format notes are given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List projects (folders)'), enumerates the valid app values, and specifies the ordering ('most recently active first'). This is clear and actionable, though it does not explicitly distinguish itself from siblings like list_chats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this tool versus the sibling listing tools such as list_chats, nor any stated prerequisites or exclusions. Usage is only implied by the resource name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_chatB

Read the last messages of a chat (id or exact title): what was asked and each turn's final answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
chatYes
lastNo
projectNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose the shape of the result (what was asked plus each turn's final answer). However, it says nothing about read-only safety, permissions, pagination, or what happens when the chat is not found, leaving meaningful behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, and the parenthetical qualification of the chat identifier is placed immediately after the object it describes. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter, unannotated tool with no output schema, the description covers the retrieval concept but omits the semantics of three parameters and any limits on how many messages are returned. Adequate to call the tool in the simplest case, but incomplete overall.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters. The description clarifies only one of them (chat accepts an id or exact title), which is useful, but app, last, and project are left entirely undefined with no format, meaning, or default explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Read the last messages of a chat") and scopes the result to questions and per-turn final answers, which clearly separates it from siblings like send_message or list_chats. It does not explicitly name an alternative, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The verb and scope imply the use case (fetching recent conversation content), but there is no explicit when-to-use or when-not-to-use guidance, and no mention of how it relates to siblings such as list_chats or wait_reply. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_messageA

Send text into a chat and press Enter. chat: id or exact title of an existing chat. Or leave chat empty to start a new chat: in project (a project name from list_projects, or any folder path; Codex gets a project made for a new folder), or with no folder when project is empty too. codex / claude_code are driven through the desktop app; a split Claude window is fine (a chat already on screen is used in place, otherwise it opens in the focused pane). The view returns to the chats the user was on. claude_cli runs claude -p --resume headless with permission_mode. Returns a job_id. When the answer is ready it is saved; if you are a desktop chat it is also typed into your chat (notify_caller). Otherwise call wait_reply(job_id).

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
chatNo
textYes
projectNo
notify_callerNo
permission_modeNoauto

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses desktop-app driving, split-window reuse behavior, that the view returns to the user's prior chats, that claude_cli runs headless with permission_mode, and the notify_caller typing behavior. It omits permission/auth implications of permission_mode and any rate or concurrency limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded and each sentence adds operational detail rather than filler. The chat/project paragraph is dense and could be tightened, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-param tool with no annotations and no output schema, the description covers the return value (job_id), where the answer lands, and the follow-up call. The only real gap is the implicit enumeration of app values and permission_mode semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it explains chat, project, notify_caller behavior, and mentions permission_mode in the claude_cli context. It never cleanly enumerates the valid `app` values even though codex/claude_code/claude_cli are effectively them, leaving that mapping implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a concrete verb+resource ('Send `text` into a chat and press Enter') and names the distinct app drivers, so an agent can distinguish it from siblings like wait_reply or read_chat without inspecting the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit conditional guidance: leave chat empty to start a new chat in a project, or use no folder when project is empty, and it names the alternative path ('Otherwise call wait_reply(job_id)'). It stops short of stating when-not to use this tool or prerequisites, so it is not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_replyA

Wait until the chat behind job_id has answered (or timeout_s passes) and return the job with its reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes
timeout_sNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose the key trait: this is a blocking wait that ends when the chat answers or timeout_s passes, and it returns the job with its reply. It omits critical behavior such as what happens on timeout (error, empty reply, or partial job) and whether polling/rate limits apply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the action, the termination condition, and the return value with no filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter blocking tool with no annotations and no output schema, the description covers the core contract (wait, terminate on reply or timeout, return job+reply) but leaves the timeout outcome and time unit unspecified. Adequate but with clear gaps an agent would want filled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two parameters, so the description must compensate. It clarifies that job_id identifies the chat being waited on and that timeout_s is the wait bound, but it never states the unit (seconds is only inferable from the name) or the behavior at expiry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (wait), the resource it waits on (the chat behind job_id), and the return payload (the job with its reply). It is distinguishable from siblings like read_chat or send_message, though it never explicitly contrasts itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is called after an async job was started to await its reply, and the timeout_s mention hints at bounded blocking. There is no explicit when-to-use statement, no when-not-to-use, and no named alternative among the siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedcodex_generate_image
    • First observedcodex_goal
    • First observedlist_chats
    • First observedlist_projects
    • First observedread_chat
    • First observedsend_message
    • First observedwait_reply

TDQS

A3.6/5.0

Scored across 7 tools

Disambiguation4/5

Each tool has a distinct resource+action: list_projects vs list_chats vs read_chat are clearly layered by scope, and send_message/wait_reply form a complementary pair rather than overlapping. codex_goal and codex_generate_image are Codex-specific but clearly named, though a few tools (read_chat vs list_chats) require reading descriptions to fully separate.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (list_projects, list_chats, read_chat, send_message, wait_reply). The codex_* prefix on codex_goal and codex_generate_image is a sensible namespace convention rather than a break, giving mostly consistent naming.

Tool Count5/5

7 tools is well-scoped for an agent-bridge: it covers discovery, messaging, waiting, and two Codex-specific extras without bloat. Each tool earns its place in the bridging workflow.

Completeness4/5

Core lifecycle is covered: list projects/chats, read, send, wait for reply, plus goal control and image generation. Creation is implicitly handled by send_message with an empty chat, but there is no explicit project creation, chat deletion/close, or job cancellation—minor gaps agents can mostly work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables sending QQ messages automatically via Claude Code using Windows UI automation, no Bot API required.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables reading and interacting with native Windows application UI through the UI Automation API, allowing listing windows, extracting structured content, and performing clicks/typing without screenshot-based vision.
    2
    MIT