Skip to content

Commit ae1058f

Browse files
authored
feat(adapters): native Qwen Code, iFlow CLI, Trae, Kiro IDE & ECA adapters (#530)
Extends "whatever AI coding agent you run, the Peon shows up — natively" to five more agentic IDEs. Each ships .sh + .ps1 versions with BATS coverage and is wired into session-id routing so sounds attribute to the right IDE. - Qwen Code (Alibaba) & iFlow CLI (iflow-ai): Claude-Code-style stdin-JSON hook passthroughs (qwen-/iflow- session prefix, drop noisy per-tool events); iFlow maps a failed PostToolUse to PostToolUseFailure. - Trae (ByteDance): filesystem-watcher adapter (Amp/Antigravity pattern) since Trae has no synchronous shell-hook API; watched paths overridable via TRAE_DATA_DIR/TRAE_SESSIONS_DIR/TRAE_SESSION_GLOB. - Kiro IDE (Amazon): .kiro/hooks/*.kiro.hook runCommand adapter (event name on argv, no stdin JSON), distinct from the existing Kiro CLI adapter; kiro-ide- session prefix. - ECA (Editor Code Assistant): stdin-JSON shell hooks, eca- prefix derived from db_cache_path; vendored first-party from community contribution #261. peon.sh and the embedded Windows runtime (generated by install.ps1) recognize all five via IDE_ALIASES, the session-id prefix_map / Detect-SessionIde, and IDE_DISPLAY_NAMES (kiro-ide- ordered before kiro- so the longer prefix wins). install.sh and install.ps1 ship the adapters; README.md, README_zh.md, and docs/public/llms.txt document setup for each. Bumps VERSION to 2.30.0.
1 parent 254a338 commit ae1058f

24 files changed

Lines changed: 2073 additions & 13 deletions

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
## v2.30.0 (2026-06-07)
2+
3+
### Added
4+
- **Five new native IDE adapters: Qwen Code, iFlow CLI, Trae, Kiro IDE, and ECA.** Extends "whatever AI coding agent you run, the Peon shows up — natively" to five more agentic IDEs. Each ships both `.sh` and `.ps1` versions with BATS coverage, and is wired into the session-id routing so sounds attribute to the right IDE.
5+
- **Qwen Code** (Alibaba) and **iFlow CLI** (iflow-ai) expose Claude-Code-style stdin-JSON hook systems with PascalCase CESP event names. The adapters are thin passthroughs that re-tag the session id (`qwen-` / `iflow-` prefix) and drop noisy per-tool-call events; iFlow additionally maps a failed `PostToolUse` to `PostToolUseFailure`. Configure in `~/.qwen/settings.json` / `~/.iflow/settings.json`.
6+
- **Trae** (ByteDance) is a VS Code-derived AI IDE with no synchronous shell-hook API, so the adapter follows the Amp/Antigravity filesystem-watcher pattern: a new session file → `SessionStart`, an idle timer → `Stop`. Watched paths are environment-overridable (`TRAE_DATA_DIR`, `TRAE_SESSIONS_DIR`, `TRAE_SESSION_GLOB`); Windows uses .NET `FileSystemWatcher`.
7+
- **Kiro IDE** (Amazon) — distinct from the existing **Kiro CLI** adapter — uses `.kiro/hooks/*.kiro.hook` Agent Hooks whose `runCommand` action passes the event name on argv with no stdin JSON. `agentStop` / `promptSubmit` / `preToolUse` / `sessionStart` map to CESP with a `kiro-ide-` session prefix.
8+
- **ECA** (Editor Code Assistant) pipes stdin JSON with the hook type also on argv; events map to CESP with a stable `eca-` session prefix derived from `db_cache_path`. Vendored first-party from the community contribution in #261.
9+
- `peon.sh` and the embedded Windows runtime (generated by `install.ps1`) recognize all five via `IDE_ALIASES`, the session-id `prefix_map` / `Detect-SessionIde`, and `IDE_DISPLAY_NAMES` (`kiro-ide-` ordered before `kiro-` so the longer prefix wins). `install.sh` and `install.ps1` ship the new adapters; `README.md`, `README_zh.md`, and `docs/public/llms.txt` document setup for each.
10+
111
## v2.29.0 (2026-05-29)
212

313
### Added

README.md

Lines changed: 112 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
![macOS](https://img.shields.io/badge/macOS-blue) ![WSL2](https://img.shields.io/badge/WSL2-blue) ![Linux](https://img.shields.io/badge/Linux-blue) ![Windows](https://img.shields.io/badge/Windows-blue) ![MSYS2](https://img.shields.io/badge/MSYS2-blue) ![SSH](https://img.shields.io/badge/SSH-blue)
77
![License](https://img.shields.io/badge/license-MIT-green)
88

9-
![Claude Code](https://img.shields.io/badge/Claude_Code-hook-ffab01) ![Amp](https://img.shields.io/badge/Amp-adapter-ffab01) ![Gemini CLI](https://img.shields.io/badge/Gemini_CLI-adapter-ffab01) ![GitHub Copilot](https://img.shields.io/badge/GitHub_Copilot-adapter-ffab01) ![Codex](https://img.shields.io/badge/Codex-adapter-ffab01) ![Cursor](https://img.shields.io/badge/Cursor-adapter-ffab01) ![OpenCode](https://img.shields.io/badge/OpenCode-adapter-ffab01) ![Kilo CLI](https://img.shields.io/badge/Kilo_CLI-adapter-ffab01) ![Kiro](https://img.shields.io/badge/Kiro-adapter-ffab01) ![Kimi Code](https://img.shields.io/badge/Kimi_Code-adapter-ffab01) ![Windsurf](https://img.shields.io/badge/Windsurf-adapter-ffab01) ![Antigravity](https://img.shields.io/badge/Antigravity-adapter-ffab01) ![OpenClaw](https://img.shields.io/badge/OpenClaw-adapter-ffab01) ![Rovo Dev CLI](https://img.shields.io/badge/Rovo_Dev_CLI-adapter-ffab01) ![DeepAgents](https://img.shields.io/badge/DeepAgents-adapter-ffab01) ![oh-my-pi](https://img.shields.io/badge/oh--my--pi-adapter-ffab01)
9+
![Claude Code](https://img.shields.io/badge/Claude_Code-hook-ffab01) ![Amp](https://img.shields.io/badge/Amp-adapter-ffab01) ![Gemini CLI](https://img.shields.io/badge/Gemini_CLI-adapter-ffab01) ![GitHub Copilot](https://img.shields.io/badge/GitHub_Copilot-adapter-ffab01) ![Codex](https://img.shields.io/badge/Codex-adapter-ffab01) ![Cursor](https://img.shields.io/badge/Cursor-adapter-ffab01) ![OpenCode](https://img.shields.io/badge/OpenCode-adapter-ffab01) ![Kilo CLI](https://img.shields.io/badge/Kilo_CLI-adapter-ffab01) ![Kiro](https://img.shields.io/badge/Kiro-adapter-ffab01) ![Kimi Code](https://img.shields.io/badge/Kimi_Code-adapter-ffab01) ![Windsurf](https://img.shields.io/badge/Windsurf-adapter-ffab01) ![Antigravity](https://img.shields.io/badge/Antigravity-adapter-ffab01) ![OpenClaw](https://img.shields.io/badge/OpenClaw-adapter-ffab01) ![Rovo Dev CLI](https://img.shields.io/badge/Rovo_Dev_CLI-adapter-ffab01) ![DeepAgents](https://img.shields.io/badge/DeepAgents-adapter-ffab01) ![oh-my-pi](https://img.shields.io/badge/oh--my--pi-adapter-ffab01) ![Qwen Code](https://img.shields.io/badge/Qwen_Code-adapter-ffab01) ![iFlow CLI](https://img.shields.io/badge/iFlow_CLI-adapter-ffab01) ![Trae](https://img.shields.io/badge/Trae-adapter-ffab01) ![Kiro IDE](https://img.shields.io/badge/Kiro_IDE-adapter-ffab01) ![ECA](https://img.shields.io/badge/ECA-adapter-ffab01)
1010

1111
**Game character voice lines + visual overlay notifications when your AI coding agent needs attention — or let the agent pick its own sound via MCP.**
1212

13-
AI coding agents don't notify you when they finish or need permission. You tab away, lose focus, and waste 15 minutes getting back into flow. peon-ping fixes this with voice lines and bold on-screen banners from Warcraft, StarCraft, Portal, Zelda, and more — works with **Claude Code**, **Amp**, **GitHub Copilot**, **Codex**, **Cursor**, **OpenCode**, **Kilo CLI**, **Kiro**, **Kimi Code**, **Windsurf**, **Google Antigravity**, **Rovo Dev CLI**, **DeepAgents**, and any MCP client.
13+
AI coding agents don't notify you when they finish or need permission. You tab away, lose focus, and waste 15 minutes getting back into flow. peon-ping fixes this with voice lines and bold on-screen banners from Warcraft, StarCraft, Portal, Zelda, and more — works with **Claude Code**, **Amp**, **GitHub Copilot**, **Codex**, **Cursor**, **OpenCode**, **Kilo CLI**, **Kiro**, **Kimi Code**, **Windsurf**, **Google Antigravity**, **Rovo Dev CLI**, **DeepAgents**, **Qwen Code**, **iFlow CLI**, **Trae**, **Kiro IDE**, **ECA**, and any MCP client.
1414

1515
**See it in action** → [peonping.com](https://peonping.com/)
1616

@@ -733,8 +733,13 @@ peon-ping works with any agentic IDE that supports hooks. Adapters translate IDE
733733
| **Rovo Dev CLI** | Adapter | Auto-registered by `install.sh` if `~/.rovodev` exists, or add hooks to `~/.rovodev/config.yml` manually ([setup](#rovo-dev-cli-setup)) |
734734
| **DeepAgents** | Adapter | `bash adapters/deepagents.sh` / `powershell adapters/deepagents.ps1` ([setup](#deepagents-setup)) |
735735
| **oh-my-pi (omp)** | Adapter | `bash adapters/omp.sh` ([setup](#oh-my-pi-omp-setup)) |
736+
| **Qwen Code** | Adapter | Add hooks pointing to `adapters/qwen.sh` (or `.ps1` on Windows) ([setup](#qwen-code-setup)) |
737+
| **iFlow CLI** | Adapter | Add hooks pointing to `adapters/iflow.sh` (or `.ps1`) ([setup](#iflow-cli-setup)) |
738+
| **Trae** | Adapter | Filesystem watcher: `bash adapters/trae.sh &` / `powershell adapters/trae.ps1 -Install` ([setup](#trae-setup)) |
739+
| **Kiro IDE** | Adapter | Agent hooks in `.kiro/hooks/*.kiro.hook` calling `adapters/kiro-ide.sh` (or `.ps1`) ([setup](#kiro-ide-setup)) |
740+
| **ECA** | Adapter | Add a shell hook pointing to `adapters/eca.sh` (or `.ps1`) ([setup](#eca-setup)) |
736741

737-
> **Windows:** All adapters have native PowerShell (`.ps1`) versions. The Windows installer (`install.ps1`) copies them to `~/.claude/hooks/peon-ping/adapters/`. Filesystem watchers (Amp, Antigravity, Kimi) use .NET `FileSystemWatcher` instead of fswatch/inotifywait — no extra dependencies needed.
742+
> **Windows:** All adapters have native PowerShell (`.ps1`) versions. The Windows installer (`install.ps1`) copies them to `~/.claude/hooks/peon-ping/adapters/`. Filesystem watchers (Amp, Antigravity, Kimi, Trae) use .NET `FileSystemWatcher` instead of fswatch/inotifywait — no extra dependencies needed.
738743
739744
### OpenAI Codex setup
740745

@@ -1183,6 +1188,110 @@ The installer copies `peon-ping.ts` and `package.json` to `~/.omp/agent/extensio
11831188
curl -fsSL https://raw.githubusercontent.com/PeonPing/peon-ping/main/adapters/omp.sh | bash -s -- --uninstall
11841189
```
11851190

1191+
### Qwen Code setup
1192+
1193+
A thin passthrough adapter for [Qwen Code](https://github.com/QwenLM/qwen-code) (Alibaba). Qwen Code ships a Claude-Code-style hook system — events are piped as JSON on stdin using the same PascalCase CESP names peon-ping expects — so this adapter simply re-tags the session id with a `qwen-` prefix and drops the noisy per-tool-call events.
1194+
1195+
Add to `~/.qwen/settings.json`:
1196+
1197+
```json
1198+
{
1199+
"hooks": {
1200+
"SessionStart": [{ "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/peon-ping/adapters/qwen.sh" }] }],
1201+
"UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/peon-ping/adapters/qwen.sh" }] }],
1202+
"Stop": [{ "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/peon-ping/adapters/qwen.sh" }] }],
1203+
"Notification": [{ "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/peon-ping/adapters/qwen.sh" }] }],
1204+
"PostToolUseFailure": [{ "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/peon-ping/adapters/qwen.sh" }] }],
1205+
"SessionEnd": [{ "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/peon-ping/adapters/qwen.sh" }] }]
1206+
}
1207+
}
1208+
```
1209+
1210+
On Windows, point the command at `qwen.ps1` via `powershell -NoProfile -File %USERPROFILE%\.claude\hooks\peon-ping\adapters\qwen.ps1`.
1211+
1212+
### iFlow CLI setup
1213+
1214+
A passthrough adapter for [iFlow CLI](https://cli.iflow.cn) (iflow-ai). iFlow ships a Claude-Code-style hook system (PascalCase events on stdin); this adapter forwards the meaningful lifecycle events with an `iflow-` session prefix and maps a failed `PostToolUse` to `PostToolUseFailure`.
1215+
1216+
Add to `~/.iflow/settings.json` (or per-project `./.iflow/settings.json`):
1217+
1218+
```json
1219+
{
1220+
"hooks": {
1221+
"SessionStart": [{ "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/peon-ping/adapters/iflow.sh" }] }],
1222+
"UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/peon-ping/adapters/iflow.sh" }] }],
1223+
"Stop": [{ "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/peon-ping/adapters/iflow.sh" }] }],
1224+
"Notification": [{ "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/peon-ping/adapters/iflow.sh" }] }],
1225+
"PostToolUse": [{ "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/peon-ping/adapters/iflow.sh" }] }],
1226+
"SessionEnd": [{ "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/peon-ping/adapters/iflow.sh" }] }]
1227+
}
1228+
}
1229+
```
1230+
1231+
### Trae setup
1232+
1233+
A filesystem-watcher adapter for [Trae](https://trae.ai) (ByteDance). Trae is a VS Code-derived AI IDE with no synchronous shell-hook API, so peon-ping uses the same watcher approach as Amp and Antigravity: a new session file means `SessionStart`, and an idle timer (the session file stops updating) means `Stop`.
1234+
1235+
```bash
1236+
# Foreground
1237+
bash ~/.claude/hooks/peon-ping/adapters/trae.sh
1238+
# Background
1239+
bash ~/.claude/hooks/peon-ping/adapters/trae.sh &
1240+
```
1241+
1242+
On Windows: `powershell -File adapters\trae.ps1 -Install` registers a background watcher (`-Status` / `-Uninstall` to manage it).
1243+
1244+
Trae's on-disk session layout varies by platform/version and isn't publicly documented, so the watched paths are environment-overridable:
1245+
1246+
| Variable | Default |
1247+
|---|---|
1248+
| `TRAE_DATA_DIR` | `~/.trae` |
1249+
| `TRAE_SESSIONS_DIR` | `$TRAE_DATA_DIR/sessions` |
1250+
| `TRAE_SESSION_GLOB` | `*.json` |
1251+
1252+
Requires `fswatch` (macOS: `brew install fswatch`) or `inotifywait` (Linux: `apt install inotify-tools`). Windows uses .NET `FileSystemWatcher` — no extra dependency.
1253+
1254+
### Kiro IDE setup
1255+
1256+
A hook adapter for **Kiro IDE** (Amazon) — distinct from the [Kiro CLI](#kiro-setup) (`adapters/kiro.sh`). The IDE's Agent Hooks are `.kiro/hooks/*.kiro.hook` JSON files; their `then.type: runCommand` action runs a shell command with **no stdin JSON**, passing the triggering event name to the adapter as an argv argument.
1257+
1258+
Create one hook file per event, e.g. `.kiro/hooks/peon-ping-stop.kiro.hook`:
1259+
1260+
```json
1261+
{
1262+
"version": "1.0.0",
1263+
"enabled": true,
1264+
"name": "peon-ping-stop",
1265+
"when": { "type": "agentStop" },
1266+
"then": {
1267+
"type": "runCommand",
1268+
"command": "bash ~/.claude/hooks/peon-ping/adapters/kiro-ide.sh agentStop"
1269+
}
1270+
}
1271+
```
1272+
1273+
Repeat with `when.type` = `promptSubmit` (→ `UserPromptSubmit`), `preToolUse` (→ permission prompt), or `sessionStart` (→ `SessionStart`), each passing the matching event name as the command argument. `postToolUse` and file/user-triggered hooks carry no peon-relevant signal and are ignored. On Windows, point the command at `kiro-ide.ps1` via `powershell -NoProfile -File`.
1274+
1275+
### ECA setup
1276+
1277+
A shell-hook adapter for [ECA](https://eca.dev) (Editor Code Assistant), an editor-agnostic LLM-agent integration. ECA pipes JSON on stdin (snake_case top-level keys) and also passes the hook type as an argv argument; this adapter maps ECA's events to CESP with a stable `eca-` session prefix derived from the ECA `db_cache_path`. Originally contributed in PeonPing/peon-ping#261, vendored first-party here.
1278+
1279+
Add a shell hook to your ECA config pointing at the adapter, one per event:
1280+
1281+
```json
1282+
{
1283+
"hooks": {
1284+
"sessionStart": [{ "actions": [{ "type": "shell", "command": "bash ~/.claude/hooks/peon-ping/adapters/eca.sh sessionStart" }] }],
1285+
"preRequest": [{ "actions": [{ "type": "shell", "command": "bash ~/.claude/hooks/peon-ping/adapters/eca.sh preRequest" }] }],
1286+
"postRequest": [{ "actions": [{ "type": "shell", "command": "bash ~/.claude/hooks/peon-ping/adapters/eca.sh postRequest" }] }],
1287+
"preToolCall": [{ "actions": [{ "type": "shell", "command": "bash ~/.claude/hooks/peon-ping/adapters/eca.sh preToolCall" }] }],
1288+
"sessionEnd": [{ "actions": [{ "type": "shell", "command": "bash ~/.claude/hooks/peon-ping/adapters/eca.sh sessionEnd" }] }]
1289+
}
1290+
}
1291+
```
1292+
1293+
**Event mapping:** `sessionStart`/`chatStart` → `SessionStart`, `preRequest` → `UserPromptSubmit`, `postRequest`/`subagentPostRequest`/`postToolCall` → `Stop`, `preToolCall` → permission prompt, `sessionEnd` → `SessionEnd`.
1294+
11861295
## Remote development (SSH / Devcontainers / Codespaces)
11871296

11881297
Coding on a remote server or inside a container? peon-ping auto-detects SSH sessions, devcontainers, and Codespaces, then routes audio and notifications through a lightweight relay running on your local machine.

0 commit comments

Comments
 (0)