clitrigger 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +124 -100
- package/README_KR.md +243 -0
- package/dist/client/assets/index-BiXO2oR3.js +541 -0
- package/dist/client/assets/index-tGOot928.css +1 -0
- package/dist/client/index.html +2 -2
- package/dist/server/data/cli-models-registry.json +34 -0
- package/dist/server/db/queries.d.ts +95 -48
- package/dist/server/db/queries.d.ts.map +1 -1
- package/dist/server/db/queries.js +328 -129
- package/dist/server/db/queries.js.map +1 -1
- package/dist/server/db/schema.d.ts.map +1 -1
- package/dist/server/db/schema.js +67 -35
- package/dist/server/db/schema.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +27 -13
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/git.d.ts +3 -0
- package/dist/server/lib/git.d.ts.map +1 -0
- package/dist/server/lib/git.js +7 -0
- package/dist/server/lib/git.js.map +1 -0
- package/dist/server/routes/{pipelines.d.ts → analytics.d.ts} +1 -1
- package/dist/server/routes/analytics.d.ts.map +1 -0
- package/dist/server/routes/analytics.js +102 -0
- package/dist/server/routes/analytics.js.map +1 -0
- package/dist/server/routes/cli-status.d.ts +3 -0
- package/dist/server/routes/cli-status.d.ts.map +1 -0
- package/dist/server/routes/cli-status.js +28 -0
- package/dist/server/routes/cli-status.js.map +1 -0
- package/dist/server/routes/discussions.js +5 -5
- package/dist/server/routes/discussions.js.map +1 -1
- package/dist/server/routes/execution.d.ts.map +1 -1
- package/dist/server/routes/execution.js +9 -5
- package/dist/server/routes/execution.js.map +1 -1
- package/dist/server/routes/images.d.ts +21 -0
- package/dist/server/routes/images.d.ts.map +1 -1
- package/dist/server/routes/images.js +163 -1
- package/dist/server/routes/images.js.map +1 -1
- package/dist/server/routes/logs.js +3 -3
- package/dist/server/routes/logs.js.map +1 -1
- package/dist/server/routes/models.d.ts.map +1 -1
- package/dist/server/routes/models.js +2 -0
- package/dist/server/routes/models.js.map +1 -1
- package/dist/server/routes/planner.d.ts +3 -0
- package/dist/server/routes/planner.d.ts.map +1 -0
- package/dist/server/routes/planner.js +344 -0
- package/dist/server/routes/planner.js.map +1 -0
- package/dist/server/routes/projects.d.ts.map +1 -1
- package/dist/server/routes/projects.js +159 -1
- package/dist/server/routes/projects.js.map +1 -1
- package/dist/server/routes/schedules.d.ts.map +1 -1
- package/dist/server/routes/schedules.js +39 -0
- package/dist/server/routes/schedules.js.map +1 -1
- package/dist/server/routes/sessions.d.ts +3 -0
- package/dist/server/routes/sessions.d.ts.map +1 -0
- package/dist/server/routes/sessions.js +200 -0
- package/dist/server/routes/sessions.js.map +1 -0
- package/dist/server/routes/todos.d.ts.map +1 -1
- package/dist/server/routes/todos.js +16 -4
- package/dist/server/routes/todos.js.map +1 -1
- package/dist/server/services/claude-manager.d.ts.map +1 -1
- package/dist/server/services/claude-manager.js +63 -28
- package/dist/server/services/claude-manager.js.map +1 -1
- package/dist/server/services/cli-adapters.d.ts +60 -0
- package/dist/server/services/cli-adapters.d.ts.map +1 -1
- package/dist/server/services/cli-adapters.js +123 -5
- package/dist/server/services/cli-adapters.js.map +1 -1
- package/dist/server/services/cli-status.d.ts +8 -0
- package/dist/server/services/cli-status.d.ts.map +1 -0
- package/dist/server/services/cli-status.js +57 -0
- package/dist/server/services/cli-status.js.map +1 -0
- package/dist/server/services/discussion-orchestrator.d.ts.map +1 -1
- package/dist/server/services/discussion-orchestrator.js +33 -6
- package/dist/server/services/discussion-orchestrator.js.map +1 -1
- package/dist/server/services/log-streamer.d.ts +12 -0
- package/dist/server/services/log-streamer.d.ts.map +1 -1
- package/dist/server/services/log-streamer.js +117 -31
- package/dist/server/services/log-streamer.js.map +1 -1
- package/dist/server/services/model-sync.d.ts +22 -0
- package/dist/server/services/model-sync.d.ts.map +1 -0
- package/dist/server/services/model-sync.js +181 -0
- package/dist/server/services/model-sync.js.map +1 -0
- package/dist/server/services/orchestrator.d.ts +18 -0
- package/dist/server/services/orchestrator.d.ts.map +1 -1
- package/dist/server/services/orchestrator.js +81 -11
- package/dist/server/services/orchestrator.js.map +1 -1
- package/dist/server/services/pty-output-filter.d.ts.map +1 -1
- package/dist/server/services/pty-output-filter.js +91 -8
- package/dist/server/services/pty-output-filter.js.map +1 -1
- package/dist/server/services/session-manager.d.ts +22 -0
- package/dist/server/services/session-manager.d.ts.map +1 -0
- package/dist/server/services/session-manager.js +249 -0
- package/dist/server/services/session-manager.js.map +1 -0
- package/dist/server/services/worktree-manager.d.ts +11 -1
- package/dist/server/services/worktree-manager.d.ts.map +1 -1
- package/dist/server/services/worktree-manager.js +128 -32
- package/dist/server/services/worktree-manager.js.map +1 -1
- package/dist/server/websocket/events.d.ts +13 -22
- package/dist/server/websocket/events.d.ts.map +1 -1
- package/dist/server/websocket/index.d.ts.map +1 -1
- package/dist/server/websocket/index.js +17 -1
- package/dist/server/websocket/index.js.map +1 -1
- package/package.json +3 -3
- package/README_EN.md +0 -219
- package/dist/client/assets/index-B4peRpUi.js +0 -134
- package/dist/client/assets/index-Bjyoy6lB.css +0 -1
- package/dist/server/routes/pipelines.d.ts.map +0 -1
- package/dist/server/routes/pipelines.js +0 -315
- package/dist/server/routes/pipelines.js.map +0 -1
- package/dist/server/services/pipeline-orchestrator.d.ts +0 -43
- package/dist/server/services/pipeline-orchestrator.d.ts.map +0 -1
- package/dist/server/services/pipeline-orchestrator.js +0 -503
- package/dist/server/services/pipeline-orchestrator.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
3
|
<picture>
|
|
4
|
-
<source media="(prefers-color-scheme: dark)" srcset="src/client/public/logo.svg">
|
|
5
|
-
<source media="(prefers-color-scheme: light)" srcset="src/client/public/logo.svg">
|
|
6
|
-
<img alt="CLITrigger" src="src/client/public/logo.svg" width="360">
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/src/client/public/logo.svg">
|
|
5
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/src/client/public/logo.svg">
|
|
6
|
+
<img alt="CLITrigger" src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/src/client/public/logo.svg" width="360">
|
|
7
7
|
</picture>
|
|
8
8
|
|
|
9
9
|
**AI-Powered Parallel Worktree Automation**
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
*Write tasks. Let AI execute them in parallel. Review and merge.*
|
|
12
12
|
|
|
13
13
|
<p align="center">
|
|
14
|
-
<a href="README.md"
|
|
15
|
-
<a href="
|
|
14
|
+
<a href="https://github.com/OSgoodYZ/CLITrigger/blob/main/README.md">English</a> ·
|
|
15
|
+
<a href="https://github.com/OSgoodYZ/CLITrigger/blob/main/README_KR.md">한국어</a>
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
18
|
[](LICENSE)
|
|
@@ -25,195 +25,219 @@
|
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
28
|
-
> AI
|
|
29
|
-
>
|
|
30
|
-
> CLITrigger
|
|
28
|
+
> In the age of AI-generated code, the developer's role is shifting toward supervision and review.
|
|
29
|
+
> But **vibe coding without understanding** eventually hits a wall.
|
|
30
|
+
> CLITrigger lets you run AI in parallel — while keeping you in full context of what's happening.
|
|
31
31
|
|
|
32
32
|
<div align="center">
|
|
33
|
-
<img src="docs/images/screenshot-tasks.png" alt="Tasks —
|
|
34
|
-
<p><em
|
|
33
|
+
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-tasks.png" alt="Tasks — Parallel worktree execution" width="800">
|
|
34
|
+
<p><em>AI CLIs working simultaneously across isolated git worktrees</em></p>
|
|
35
35
|
</div>
|
|
36
36
|
|
|
37
37
|
---
|
|
38
38
|
|
|
39
|
-
##
|
|
39
|
+
## Why CLITrigger?
|
|
40
40
|
|
|
41
|
-
Claude Code
|
|
41
|
+
Boris Cherny, creator of Claude Code, emphasizes **parallelism** as the key to AI-assisted development. Waiting for one task to finish before starting the next is the new bottleneck.
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
At the same time, most AI services have **rate limits** — you can burn through your daily quota by noon and be stuck waiting until midnight.
|
|
44
44
|
|
|
45
|
-
CLITrigger
|
|
45
|
+
CLITrigger solves both problems:
|
|
46
46
|
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
47
|
+
- **Right now** — Multiple tasks run in isolated git worktrees, with Claude / Gemini / Codex executing in parallel
|
|
48
|
+
- **Without hitting limits** — Schedule tasks for off-peak hours to make the most of your token quota
|
|
49
|
+
- **Better output** — Multiple AI agents debate and review before implementation, producing higher-quality results than a single AI working alone
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
##
|
|
53
|
+
## How It Works
|
|
54
54
|
|
|
55
55
|
```
|
|
56
|
-
[
|
|
56
|
+
[Write TODOs in the browser]
|
|
57
57
|
↓
|
|
58
|
-
|
|
59
|
-
│ TODO 1:
|
|
60
|
-
│ TODO 2:
|
|
61
|
-
│ TODO 3:
|
|
62
|
-
|
|
58
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
59
|
+
│ TODO 1: Implement login → worktree/feature-login → Claude CLI → auto-commit │
|
|
60
|
+
│ TODO 2: Signup page → worktree/feature-signup → Gemini CLI → auto-commit │
|
|
61
|
+
│ TODO 3: Dashboard layout → worktree/feature-dashboard → Claude CLI → auto-commit │
|
|
62
|
+
└──────────────────────────────────────────────────────────────┘
|
|
63
63
|
↓
|
|
64
|
-
[
|
|
64
|
+
[Live log streaming → Review diffs → Merge to main]
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
Each TODO runs in its **own isolated git worktree** — no conflicts, separate branches, independent commit history. You review the results and decide what to merge.
|
|
68
68
|
|
|
69
69
|
---
|
|
70
70
|
|
|
71
|
-
##
|
|
71
|
+
## Features
|
|
72
72
|
|
|
73
|
-
###
|
|
74
|
-
TODO
|
|
73
|
+
### Parallel Worktree Execution
|
|
74
|
+
Each TODO automatically gets its own git worktree. Claude / Gemini / Codex CLIs execute simultaneously in parallel. Dependency chains let you automatically trigger follow-up tasks and branch merges once prerequisites complete. Per-project worktree toggle plus per-TODO tri-state override (inherit / force-worktree / force-main) give you fine-grained control — main-branch tasks are automatically serialized to avoid conflicts. Drag-and-drop reordering and an iOS-style stack mode keep long task lists manageable.
|
|
75
75
|
|
|
76
|
-
###
|
|
77
|
-
|
|
76
|
+
### Multi-Agent Discussion
|
|
77
|
+
AI agents with different roles — architect, developer, reviewer — debate in rounds before implementation. The resulting design is far more robust than a single AI working in isolation. Agents flagged as **Implementers** (`can_implement`) can commit code during their regular turns, while a final implementation round stitches everything together. Auto-implement triggers the code-writing round automatically on consensus.
|
|
78
78
|
|
|
79
79
|
<div align="center">
|
|
80
|
-
<img src="docs/images/screenshot-discussions.png" alt="Discussions —
|
|
81
|
-
<p><em
|
|
80
|
+
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-discussions.png" alt="Discussions — Multi-agent debate" width="800">
|
|
81
|
+
<p><em>Multiple AI agents with different roles debating in the Discussion view</em></p>
|
|
82
82
|
</div>
|
|
83
83
|
|
|
84
|
-
###
|
|
85
|
-
|
|
84
|
+
### Scheduled Execution
|
|
85
|
+
Schedule tasks for off-peak hours to avoid rate limits. Supports recurring cron schedules, one-time scheduled runs, and auto-recovery scheduling on rate-limit events — if the CLI hits a token quota, CLITrigger schedules a retry for the exact reset time.
|
|
86
86
|
|
|
87
87
|
<div align="center">
|
|
88
|
-
<img src="docs/images/screenshot-schedules.png" alt="Schedules —
|
|
89
|
-
<p><em>
|
|
88
|
+
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-schedules.png" alt="Schedules — Scheduled execution" width="800">
|
|
89
|
+
<p><em>Cron-based recurring and one-time scheduled task execution</em></p>
|
|
90
90
|
</div>
|
|
91
91
|
|
|
92
|
-
###
|
|
93
|
-
|
|
92
|
+
### Planner
|
|
93
|
+
A lightweight task planner separate from TODOs — capture ideas, attach images, tag with colors, sort by any column. Convert any planner item into a TODO or a schedule in one click. JSON export/import lets you move plans across machines or share with teammates.
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
<div align="center">
|
|
96
|
+
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-planer.png" alt="Planner — Lightweight task management" width="800">
|
|
97
|
+
<p><em>Inline editing, color-coded tags, image attachments, and one-click conversion to TODOs or schedules</em></p>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
### Analytics
|
|
101
|
+
Per-project cost and execution stats powered by Recharts — stacked bar chart by CLI tool, donut chart for status distribution, line chart for cost/token trends. Denormalized cost fields in the DB keep aggregation fast even on long histories.
|
|
102
|
+
|
|
103
|
+
<div align="center">
|
|
104
|
+
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-analytics.png" alt="Analytics — Execution stats" width="800">
|
|
105
|
+
<p><em>Cost and token usage broken down by CLI, status, and over time</em></p>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
### Built-in Git Client
|
|
109
|
+
A full Git client lives inside the web UI — commit graph, action toolbar, file-status sidebar, worktree list, branch context menu (checkout / merge / rebase / fetch / pull / push / rename / delete), and a commit detail panel with file-level diff viewer. Non-ASCII filenames (Korean, CJK, emoji) render correctly in diff and status output.
|
|
110
|
+
|
|
111
|
+
<div align="center">
|
|
112
|
+
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-git.png" alt="Git — Built-in client" width="800">
|
|
113
|
+
<p><em>Commit graph, branch actions, file diffs — all in the browser</em></p>
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
### Interactive Sessions
|
|
117
|
+
Long-lived interactive CLI sessions as first-class entities — bring up a Claude / Gemini / Codex session in an embedded terminal, with optional worktree isolation per session. PTY output is filtered for spinner noise and classified into assistant / tool-use blocks so the Chat-mode log viewer stays readable.
|
|
118
|
+
|
|
119
|
+
### Live Logs (Chat & Raw)
|
|
120
|
+
WebSocket-based real-time log streaming with two view modes — Chat mode renders assistant messages as markdown with collapsible tool-use rows; Raw mode is a flat terminal view. Multi-round continue reuses the same worktree via the CLI's native `--continue` flag.
|
|
97
121
|
|
|
98
|
-
###
|
|
99
|
-
Claude / Gemini / Codex
|
|
122
|
+
### Multi-CLI & Sandbox Mode
|
|
123
|
+
Select Claude / Gemini / Codex per project, per TODO, or per discussion agent. Strict sandbox mode restricts CLI file access to the worktree directory using each CLI's native sandboxing (Claude settings.json, Codex `--full-auto`, Gemini prompt-level restriction).
|
|
100
124
|
|
|
101
|
-
###
|
|
102
|
-
Jira, GitHub, Notion
|
|
125
|
+
### Plugin System
|
|
126
|
+
Jira, GitHub, Notion integrations and gstack skill injection ship as self-contained plugins. Two plugin categories — `external-service` (REST proxy + UI panel) and `execution-hook` (pre-execution hook into the orchestrator). Adding a new integration needs only a manifest and `registerPlugin()` call — no core code changes.
|
|
103
127
|
|
|
104
|
-
###
|
|
105
|
-
Cloudflare Tunnel
|
|
128
|
+
### Remote Access
|
|
129
|
+
Access and control from anywhere via Cloudflare Tunnel. Browser notifications alert you when tasks or discussions complete, so you can walk away and come back.
|
|
106
130
|
|
|
107
131
|
---
|
|
108
132
|
|
|
109
|
-
##
|
|
133
|
+
## Tech Stack
|
|
110
134
|
|
|
111
|
-
|
|
|
112
|
-
|
|
135
|
+
| Layer | Tech |
|
|
136
|
+
|-------|------|
|
|
113
137
|
| Backend | Node.js · Express · TypeScript · SQLite · WebSocket |
|
|
114
|
-
| Frontend | React 18 · Vite · Tailwind CSS |
|
|
115
|
-
| AI
|
|
116
|
-
| Git | simple-git (worktree
|
|
117
|
-
|
|
|
118
|
-
|
|
|
119
|
-
|
|
|
138
|
+
| Frontend | React 18 · Vite · Tailwind CSS · Recharts |
|
|
139
|
+
| AI CLIs | Claude · Gemini · Codex (Adapter Pattern) |
|
|
140
|
+
| Git | simple-git (worktree management) |
|
|
141
|
+
| Scheduling | node-cron |
|
|
142
|
+
| Terminal | node-pty (TTY support) |
|
|
143
|
+
| Remote Access | Cloudflare Tunnel (optional) |
|
|
120
144
|
|
|
121
145
|
---
|
|
122
146
|
|
|
123
|
-
##
|
|
147
|
+
## Quick Start
|
|
124
148
|
|
|
125
149
|
```bash
|
|
126
150
|
npm i -g clitrigger
|
|
127
151
|
clitrigger
|
|
128
152
|
```
|
|
129
153
|
|
|
130
|
-
|
|
131
|
-
|
|
154
|
+
On first run, you'll be prompted to set a password. Then the server starts immediately.
|
|
155
|
+
Open `http://localhost:3000` → Register a project → Write TODOs → Click Start.
|
|
132
156
|
|
|
133
157
|
```bash
|
|
134
|
-
#
|
|
135
|
-
clitrigger config port 8080 #
|
|
136
|
-
clitrigger config password #
|
|
158
|
+
# Change settings
|
|
159
|
+
clitrigger config port 8080 # Change port
|
|
160
|
+
clitrigger config password # Change password
|
|
137
161
|
```
|
|
138
162
|
|
|
139
|
-
>
|
|
163
|
+
> **Prerequisites**: Node.js 20+, Git, at least one AI CLI (Claude / Gemini / Codex)
|
|
140
164
|
>
|
|
141
|
-
>
|
|
142
|
-
> macOS
|
|
165
|
+
> **Supported Platforms**: Windows · macOS · Linux — all core code is cross-platform compatible.
|
|
166
|
+
> On macOS, you may need `xcode-select --install` for native module compilation.
|
|
143
167
|
|
|
144
|
-
###
|
|
168
|
+
### Run from Source (for development)
|
|
145
169
|
|
|
146
170
|
<details>
|
|
147
|
-
<summary
|
|
171
|
+
<summary>Click to expand</summary>
|
|
148
172
|
|
|
149
173
|
```bash
|
|
150
|
-
# 1.
|
|
174
|
+
# 1. Clone & install
|
|
151
175
|
git clone https://github.com/OSgoodYZ/CLITrigger.git
|
|
152
176
|
cd CLITrigger
|
|
153
177
|
npm install
|
|
154
178
|
cd src/client && npm install && cd ../..
|
|
155
179
|
|
|
156
|
-
# 2.
|
|
180
|
+
# 2. Configure environment
|
|
157
181
|
cp .env.example .env
|
|
158
|
-
# .env
|
|
182
|
+
# Edit .env and set AUTH_PASSWORD
|
|
159
183
|
|
|
160
|
-
# 3.
|
|
184
|
+
# 3. Run
|
|
161
185
|
npm run dev
|
|
162
186
|
```
|
|
163
187
|
|
|
164
|
-
|
|
188
|
+
Open `http://localhost:5173`.
|
|
165
189
|
|
|
166
|
-
#### Windows
|
|
190
|
+
#### Windows One-Click Scripts
|
|
167
191
|
|
|
168
|
-
|
|
192
|
+
Double-click any bat file in `scripts/` — no terminal needed.
|
|
169
193
|
|
|
170
|
-
|
|
|
171
|
-
|
|
172
|
-
| `install.bat` |
|
|
173
|
-
| `dev.bat` |
|
|
174
|
-
| `build.bat` |
|
|
175
|
-
| `start.bat` |
|
|
176
|
-
| `start-tunnel.bat` |
|
|
177
|
-
| `test.bat` |
|
|
194
|
+
| File | Action |
|
|
195
|
+
|------|--------|
|
|
196
|
+
| `install.bat` | Install dependencies (first time) |
|
|
197
|
+
| `dev.bat` | Start development mode |
|
|
198
|
+
| `build.bat` | Build project |
|
|
199
|
+
| `start.bat` | Start production server |
|
|
200
|
+
| `start-tunnel.bat` | Start with Cloudflare Tunnel |
|
|
201
|
+
| `test.bat` | Run all tests |
|
|
178
202
|
|
|
179
203
|
#### macOS / Linux
|
|
180
204
|
|
|
181
|
-
`npm run`
|
|
205
|
+
`npm run` commands work identically on all platforms. Use the terminal instead of `.bat` scripts.
|
|
182
206
|
|
|
183
207
|
```bash
|
|
184
|
-
npm run dev #
|
|
185
|
-
npm run build #
|
|
186
|
-
npm run start #
|
|
187
|
-
npm test #
|
|
208
|
+
npm run dev # Development mode
|
|
209
|
+
npm run build # Build
|
|
210
|
+
npm run start # Production server
|
|
211
|
+
npm test # Run tests
|
|
188
212
|
```
|
|
189
213
|
|
|
190
214
|
</details>
|
|
191
215
|
|
|
192
|
-
###
|
|
216
|
+
### Remote Access (Cloudflare Tunnel)
|
|
193
217
|
|
|
194
218
|
```bash
|
|
195
|
-
# cloudflared
|
|
219
|
+
# Install cloudflared
|
|
196
220
|
winget install cloudflare.cloudflared # Windows
|
|
197
221
|
brew install cloudflared # macOS
|
|
198
222
|
|
|
199
|
-
#
|
|
223
|
+
# Set TUNNEL_ENABLED=true in .env, then:
|
|
200
224
|
npm run start:tunnel
|
|
201
|
-
# →
|
|
225
|
+
# → Outputs https://xxxx.trycloudflare.com in the console
|
|
202
226
|
```
|
|
203
227
|
|
|
204
228
|
---
|
|
205
229
|
|
|
206
|
-
##
|
|
230
|
+
## Documentation
|
|
207
231
|
|
|
208
|
-
|
|
|
209
|
-
|
|
210
|
-
| [SETUP.md](docs/SETUP.md) |
|
|
211
|
-
| [CHANGELOG.md](docs/CHANGELOG.md) |
|
|
212
|
-
| [CICD.md](docs/CICD.md) | GitHub Actions CI/CD
|
|
213
|
-
| [TESTING.md](docs/TESTING.md) |
|
|
232
|
+
| Doc | Content |
|
|
233
|
+
|-----|---------|
|
|
234
|
+
| [SETUP.md](docs/SETUP.md) | Detailed installation and usage guide |
|
|
235
|
+
| [CHANGELOG.md](docs/CHANGELOG.md) | Version history |
|
|
236
|
+
| [CICD.md](docs/CICD.md) | GitHub Actions CI/CD setup |
|
|
237
|
+
| [TESTING.md](docs/TESTING.md) | Testing guide |
|
|
214
238
|
|
|
215
239
|
---
|
|
216
240
|
|
|
217
|
-
##
|
|
241
|
+
## License
|
|
218
242
|
|
|
219
|
-
[MIT](LICENSE) —
|
|
243
|
+
[MIT](LICENSE) — Free to use, modify, and distribute.
|
package/README_KR.md
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<picture>
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/src/client/public/logo.svg">
|
|
5
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/src/client/public/logo.svg">
|
|
6
|
+
<img alt="CLITrigger" src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/src/client/public/logo.svg" width="360">
|
|
7
|
+
</picture>
|
|
8
|
+
|
|
9
|
+
**AI-Powered Parallel Worktree Automation**
|
|
10
|
+
|
|
11
|
+
*Write tasks. Let AI execute them in parallel. Review and merge.*
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://github.com/OSgoodYZ/CLITrigger/blob/main/README.md">English</a> ·
|
|
15
|
+
<a href="https://github.com/OSgoodYZ/CLITrigger/blob/main/README_KR.md">한국어</a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
[](LICENSE)
|
|
19
|
+
[](https://www.npmjs.com/package/clitrigger)
|
|
20
|
+
[](https://nodejs.org)
|
|
21
|
+
[](https://www.typescriptlang.org)
|
|
22
|
+
[](https://react.dev)
|
|
23
|
+
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
> AI가 코드를 짜는 시대, 개발자의 역할이 바뀌고 있다.
|
|
29
|
+
> 하지만 **이해 없는 바이브 코딩**은 결국 한계에 부딪힌다.
|
|
30
|
+
> CLITrigger는 AI를 병렬로 돌리면서도, 개발자가 맥락을 잃지 않도록 설계되었다.
|
|
31
|
+
|
|
32
|
+
<div align="center">
|
|
33
|
+
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-tasks.png" alt="Tasks — 병렬 워크트리 실행" width="800">
|
|
34
|
+
<p><em>병렬 워크트리에서 AI CLI가 동시에 작업을 처리하는 모습</em></p>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 왜 CLITrigger인가?
|
|
40
|
+
|
|
41
|
+
Claude Code 제작자 Boris Cherny는 **병렬 실행(Parallelism)** 을 강조한다. 터미널 하나에서 하나씩 기다리는 건 AI 시대의 병목이다.
|
|
42
|
+
|
|
43
|
+
동시에 많은 AI 서비스는 **시간당 토큰 한도**를 가지고 있다. 낮에 한도를 다 쓰면 밤에 아무것도 못 한다.
|
|
44
|
+
|
|
45
|
+
CLITrigger는 이 두 문제를 동시에 해결한다:
|
|
46
|
+
|
|
47
|
+
- **지금 당장** — 여러 작업을 격리된 worktree에서 Claude / Gemini / Codex가 병렬로 처리
|
|
48
|
+
- **한도 걱정 없이** — 새벽, 특정 시각에 예약 실행으로 토큰을 최대한 활용
|
|
49
|
+
- **더 나은 결과** — 여러 AI 에이전트가 서로 토론한 뒤 구현, 혼자 짠 코드보다 품질이 높아진다
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 어떻게 동작하나?
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
[브라우저에서 TODO 작성]
|
|
57
|
+
↓
|
|
58
|
+
┌────────────────────────────────────────────────────┐
|
|
59
|
+
│ TODO 1: 로그인 기능 구현 → worktree/feature-login → Claude CLI → 자동 커밋 │
|
|
60
|
+
│ TODO 2: 회원가입 페이지 → worktree/feature-signup → Gemini CLI → 자동 커밋 │
|
|
61
|
+
│ TODO 3: 대시보드 레이아웃 → worktree/feature-dashboard → Claude CLI → 자동 커밋 │
|
|
62
|
+
└────────────────────────────────────────────────────┘
|
|
63
|
+
↓
|
|
64
|
+
[실시간 로그 확인 → Diff 보기 → Main에 Merge]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
각 TODO는 **독립된 git worktree**에서 실행된다. 서로 충돌하지 않고, 각자의 브랜치에서 커밋이 쌓인다. 개발자는 결과를 검토하고 머지 여부를 결정한다.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 주요 기능
|
|
72
|
+
|
|
73
|
+
### 병렬 Worktree 실행
|
|
74
|
+
TODO를 작성하면 각 작업마다 격리된 git worktree가 자동 생성된다. Claude / Gemini / Codex CLI가 동시에 병렬로 실행되며, 의존성 체인을 설정하면 선행 작업 완료 후 자동으로 후속 작업이 실행되고 브랜치 병합까지 처리된다. 프로젝트별 워크트리 토글에 더해 TODO별 3단계 오버라이드(상속 / 강제 워크트리 / 강제 메인)로 세밀한 제어가 가능하고, 메인 브랜치 작업은 자동 직렬화되어 충돌을 막는다. 드래그 앤 드롭으로 순서를 바꾸고, iOS 스타일 스택 모드로 긴 목록도 깔끔하게 관리할 수 있다.
|
|
75
|
+
|
|
76
|
+
### 다중 AI 토론 (Discussion)
|
|
77
|
+
아키텍트, 개발자, 리뷰어 등 역할이 다른 AI 에이전트들이 라운드 방식으로 토론한 뒤, 합의된 내용을 바탕으로 자동 구현까지 이어진다. 단일 AI의 판단보다 훨씬 검증된 설계 결과물이 나온다. **구현자(Implementer, `can_implement`)** 로 표시된 에이전트는 일반 턴에서도 코드를 커밋할 수 있고, 마지막 구현 라운드가 남은 작업을 정리해 마무리한다. 자동 구현(Auto-implement) 옵션을 켜면 토론 완료 즉시 코드 작성 라운드가 자동 실행된다.
|
|
78
|
+
|
|
79
|
+
<div align="center">
|
|
80
|
+
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-discussions.png" alt="Discussions — 다중 AI 토론" width="800">
|
|
81
|
+
<p><em>여러 AI 에이전트가 역할별로 토론하는 Discussion 화면</em></p>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
### 예약 실행 (Scheduler)
|
|
85
|
+
토큰 한도를 피해 새벽이나 특정 시각에 작업을 예약 실행할 수 있다. cron 기반 반복 스케줄, 일회성 예약, 그리고 **한도 초과 자동 복구 예약**까지 지원한다 — CLI가 토큰 한도에 걸리면 CLITrigger가 리셋 시각을 파싱해 자동으로 재시도를 예약한다.
|
|
86
|
+
|
|
87
|
+
<div align="center">
|
|
88
|
+
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-schedules.png" alt="Schedules — 예약 실행" width="800">
|
|
89
|
+
<p><em>cron 기반 반복·일회성 예약 실행 설정 화면</em></p>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
### Planner (플래너)
|
|
93
|
+
TODO와는 별개인 경량 작업 플래너 — 아이디어를 빠르게 적고, 이미지를 첨부하고, 색상 태그로 분류하고, 열 단위로 정렬할 수 있다. 플래너 항목을 한 번의 클릭으로 TODO나 예약 스케줄로 변환할 수 있다. JSON Export / Import로 다른 머신에 옮기거나 팀원과 공유할 수 있다.
|
|
94
|
+
|
|
95
|
+
<div align="center">
|
|
96
|
+
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-planer.png" alt="Planner — 경량 작업 관리" width="800">
|
|
97
|
+
<p><em>인라인 편집, 컬러 태그, 이미지 첨부, 원클릭 TODO/스케줄 변환</em></p>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
### Analytics (분석)
|
|
101
|
+
프로젝트별 비용·실행 통계를 Recharts 기반 차트로 시각화 — CLI 도구별 누적 막대, 상태별 도넛, 시간에 따른 비용/토큰 라인 차트를 제공한다. DB에 비정규화된 비용 컬럼을 두어 긴 실행 이력에서도 집계가 빠르다.
|
|
102
|
+
|
|
103
|
+
<div align="center">
|
|
104
|
+
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-analytics.png" alt="Analytics — 실행 통계" width="800">
|
|
105
|
+
<p><em>CLI·상태·시간 축으로 나눠 보는 비용과 토큰 사용량</em></p>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
### 내장 Git 클라이언트
|
|
109
|
+
웹 UI 안에 풀 Git 클라이언트가 내장되어 있다 — 커밋 그래프, 액션 툴바, 파일 상태 사이드바, 워크트리 목록, 브랜치 컨텍스트 메뉴(체크아웃 / 머지 / 리베이스 / 페치 / 풀 / 푸시 / 이름 변경 / 삭제), 파일 단위 diff 뷰어가 붙은 커밋 상세 패널까지. 한글·CJK·이모지 등 비-ASCII 파일명도 diff / status 출력에 제대로 표시된다.
|
|
110
|
+
|
|
111
|
+
<div align="center">
|
|
112
|
+
<img src="https://raw.githubusercontent.com/HyperAITeam/CLITrigger/main/docs/images/screenshot-git.png" alt="Git — 내장 클라이언트" width="800">
|
|
113
|
+
<p><em>커밋 그래프, 브랜치 작업, 파일 diff까지 브라우저 안에서</em></p>
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
### 인터랙티브 세션 (Sessions)
|
|
117
|
+
긴 생애주기의 인터랙티브 CLI 세션을 1급 엔티티로 관리 — Claude / Gemini / Codex 세션을 내장 터미널로 띄우고, 세션별로 워크트리 격리 여부를 선택할 수 있다. PTY 출력에서 스피너 노이즈를 걸러내고 assistant / tool-use 블록으로 분류해, Chat 모드 로그 뷰어에서도 깔끔하게 읽힌다.
|
|
118
|
+
|
|
119
|
+
### 실시간 로그 (Chat & Raw)
|
|
120
|
+
WebSocket으로 실행 로그를 실시간 스트리밍하며 두 가지 뷰를 지원한다 — Chat 모드는 assistant 메시지를 마크다운으로 렌더링하고 tool-use 행을 접을 수 있으며, Raw 모드는 플랫 터미널 뷰다. 다중 라운드 Continue는 CLI의 네이티브 `--continue` 플래그를 사용해 동일 워크트리를 재사용한다.
|
|
121
|
+
|
|
122
|
+
### 멀티 CLI & 샌드박스
|
|
123
|
+
Claude / Gemini / Codex CLI를 프로젝트·TODO·토론 에이전트별로 선택한다. 엄격(strict) 샌드박스 모드에서는 각 CLI의 네이티브 샌드박싱(Claude `settings.json`, Codex `--full-auto`, Gemini 프롬프트 단 제한)을 사용해 파일 접근을 워크트리 디렉토리로 제한한다.
|
|
124
|
+
|
|
125
|
+
### 플러그인 시스템
|
|
126
|
+
Jira, GitHub, Notion 연동과 gstack 스킬 주입이 자가 완결형 플러그인으로 제공된다. `external-service`(REST 프록시 + 패널 탭)와 `execution-hook`(오케스트레이터 사전 실행 훅) 두 카테고리를 지원한다. 새 통합을 추가하려면 매니페스트와 `registerPlugin()` 호출만 있으면 되고, 코어 코드를 건드릴 필요가 없다.
|
|
127
|
+
|
|
128
|
+
### 외부 접속
|
|
129
|
+
Cloudflare Tunnel로 어디서든 폰·노트북으로 제어한다. 작업이나 토론이 완료되면 브라우저 알림이 울리므로, 자리를 비워도 상태를 놓치지 않는다.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 기술 스택
|
|
134
|
+
|
|
135
|
+
| 영역 | 기술 |
|
|
136
|
+
|------|------|
|
|
137
|
+
| Backend | Node.js · Express · TypeScript · SQLite · WebSocket |
|
|
138
|
+
| Frontend | React 18 · Vite · Tailwind CSS · Recharts |
|
|
139
|
+
| AI CLI | Claude · Gemini · Codex (Adapter Pattern) |
|
|
140
|
+
| Git | simple-git (worktree 관리) |
|
|
141
|
+
| 스케줄링 | node-cron |
|
|
142
|
+
| 터미널 | node-pty (TTY 지원) |
|
|
143
|
+
| 외부 접속 | Cloudflare Tunnel (선택) |
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## 빠른 시작
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
npm i -g clitrigger
|
|
151
|
+
clitrigger
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
첫 실행 시 비밀번호 설정 여부를 물어보고, 바로 서버가 시작된다.
|
|
155
|
+
브라우저에서 `http://localhost:3000` 접속 → 프로젝트 등록 → TODO 작성 → Start.
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
# 설정 변경
|
|
159
|
+
clitrigger config port 8080 # 포트 변경
|
|
160
|
+
clitrigger config password # 비밀번호 변경
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
> **사전 요구사항**: Node.js 20+, Git, 사용할 AI CLI (Claude / Gemini / Codex 중 하나 이상)
|
|
164
|
+
>
|
|
165
|
+
> **지원 플랫폼**: Windows · macOS · Linux — 모든 핵심 코드가 크로스 플랫폼 대응되어 있다.
|
|
166
|
+
> macOS에서는 네이티브 모듈 빌드를 위해 `xcode-select --install`이 필요할 수 있다.
|
|
167
|
+
|
|
168
|
+
### 소스에서 직접 실행 (개발용)
|
|
169
|
+
|
|
170
|
+
<details>
|
|
171
|
+
<summary>클릭하여 펼치기</summary>
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# 1. 클론 & 설치
|
|
175
|
+
git clone https://github.com/OSgoodYZ/CLITrigger.git
|
|
176
|
+
cd CLITrigger
|
|
177
|
+
npm install
|
|
178
|
+
cd src/client && npm install && cd ../..
|
|
179
|
+
|
|
180
|
+
# 2. 환경 설정
|
|
181
|
+
cp .env.example .env
|
|
182
|
+
# .env 열어서 AUTH_PASSWORD 설정
|
|
183
|
+
|
|
184
|
+
# 3. 실행
|
|
185
|
+
npm run dev
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
브라우저에서 `http://localhost:5173` 접속.
|
|
189
|
+
|
|
190
|
+
#### Windows 원클릭 실행
|
|
191
|
+
|
|
192
|
+
`scripts/` 폴더의 bat 파일을 더블클릭하면 명령어 입력 없이 바로 실행된다.
|
|
193
|
+
|
|
194
|
+
| 파일 | 기능 |
|
|
195
|
+
|------|------|
|
|
196
|
+
| `install.bat` | 의존성 설치 (처음 한 번) |
|
|
197
|
+
| `dev.bat` | 개발 모드 실행 |
|
|
198
|
+
| `build.bat` | 빌드 |
|
|
199
|
+
| `start.bat` | 프로덕션 서버 실행 |
|
|
200
|
+
| `start-tunnel.bat` | 터널 모드 실행 |
|
|
201
|
+
| `test.bat` | 전체 테스트 |
|
|
202
|
+
|
|
203
|
+
#### macOS / Linux
|
|
204
|
+
|
|
205
|
+
`npm run` 명령어가 모든 플랫폼에서 동일하게 동작한다. `.bat` 스크립트 대신 터미널에서 직접 실행하면 된다.
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
npm run dev # 개발 모드
|
|
209
|
+
npm run build # 빌드
|
|
210
|
+
npm run start # 프로덕션 실행
|
|
211
|
+
npm test # 테스트
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
</details>
|
|
215
|
+
|
|
216
|
+
### 외부 접속 (Cloudflare Tunnel)
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
# cloudflared 설치
|
|
220
|
+
winget install cloudflare.cloudflared # Windows
|
|
221
|
+
brew install cloudflared # macOS
|
|
222
|
+
|
|
223
|
+
# .env에서 TUNNEL_ENABLED=true 설정 후
|
|
224
|
+
npm run start:tunnel
|
|
225
|
+
# → 콘솔에 https://xxxx.trycloudflare.com 출력
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 문서
|
|
231
|
+
|
|
232
|
+
| 문서 | 내용 |
|
|
233
|
+
|------|------|
|
|
234
|
+
| [SETUP.md](docs/SETUP.md) | 상세 설치 및 사용 가이드 |
|
|
235
|
+
| [CHANGELOG.md](docs/CHANGELOG.md) | 버전별 변경 이력 |
|
|
236
|
+
| [CICD.md](docs/CICD.md) | GitHub Actions CI/CD 설정 |
|
|
237
|
+
| [TESTING.md](docs/TESTING.md) | 테스트 가이드 |
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 라이선스
|
|
242
|
+
|
|
243
|
+
[MIT](LICENSE) — 자유롭게 사용, 수정, 배포하세요.
|