@happycastle/oh-my-openclaw 0.2.1 → 0.3.0
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/dist/index.js +2 -2
- package/dist/services/ralph-loop.js +3 -1
- package/dist/tools/checkpoint.js +3 -1
- package/openclaw.plugin.json +2 -2
- package/package.json +2 -1
- package/skills/comment-checker.md +80 -0
- package/skills/delegation-prompt.md +51 -0
- package/skills/frontend-ui-ux.md +76 -0
- package/skills/gemini-look-at.md +160 -0
- package/skills/git-master.md +76 -0
- package/skills/multimodal-analysis.md +58 -0
- package/skills/opencode-controller.md +197 -0
- package/skills/steering-words.md +72 -0
- package/skills/tmux-agents.md +103 -0
- package/skills/tmux.md +175 -0
- package/skills/workflow-auto-rescue.md +101 -0
- package/skills/workflow-tool-patterns.md +84 -0
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import { registerWorkflowCommands } from './commands/workflow-commands.js';
|
|
|
11
11
|
import { registerRalphCommands } from './commands/ralph-commands.js';
|
|
12
12
|
export default function register(api) {
|
|
13
13
|
const config = getConfig(api);
|
|
14
|
-
api.logger.info(`[${PLUGIN_ID}] Initializing plugin v0.
|
|
14
|
+
api.logger.info(`[${PLUGIN_ID}] Initializing plugin v0.3.0`);
|
|
15
15
|
try {
|
|
16
16
|
registerTodoEnforcer(api);
|
|
17
17
|
api.logger.info(`[${PLUGIN_ID}] Todo Enforcer hook registered (enabled: ${config.todo_enforcer_enabled})`);
|
|
@@ -79,7 +79,7 @@ export default function register(api) {
|
|
|
79
79
|
return {
|
|
80
80
|
ok: true,
|
|
81
81
|
plugin: PLUGIN_ID,
|
|
82
|
-
version: '0.
|
|
82
|
+
version: '0.3.0',
|
|
83
83
|
hooks: ['todo-enforcer', 'comment-checker', 'message-monitor'],
|
|
84
84
|
services: ['ralph-loop'],
|
|
85
85
|
tools: ['omoc_delegate', 'omoc_look_at', 'omoc_checkpoint'],
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { promises as fs } from 'fs';
|
|
2
|
+
import { getConfig } from '../utils/config.js';
|
|
2
3
|
import { join } from 'path';
|
|
3
4
|
import { ABSOLUTE_MAX_RALPH_ITERATIONS, PLUGIN_ID, } from '../types.js';
|
|
4
5
|
import { readState, writeState } from '../utils/state.js';
|
|
@@ -50,7 +51,8 @@ async function saveStateToFile() {
|
|
|
50
51
|
}
|
|
51
52
|
export function registerRalphLoop(api) {
|
|
52
53
|
apiRef = api;
|
|
53
|
-
|
|
54
|
+
const config = getConfig(api);
|
|
55
|
+
stateFilePath = join(config.checkpoint_dir, 'ralph-loop-state.json');
|
|
54
56
|
api.registerService({
|
|
55
57
|
id: 'omoc-ralph-loop',
|
|
56
58
|
name: 'Ralph Loop Service',
|
package/dist/tools/checkpoint.js
CHANGED
|
@@ -8,7 +8,9 @@ export function registerCheckpointTool(api) {
|
|
|
8
8
|
name: 'omoc_checkpoint',
|
|
9
9
|
description: 'Save, load, or list session checkpoints for crash recovery',
|
|
10
10
|
parameters: Type.Object({
|
|
11
|
-
action: Type.
|
|
11
|
+
action: Type.Unsafe({
|
|
12
|
+
type: 'string',
|
|
13
|
+
enum: ['save', 'load', 'list'],
|
|
12
14
|
description: 'Checkpoint operation',
|
|
13
15
|
}),
|
|
14
16
|
task: Type.Optional(Type.String({ description: 'Current task name (for save)' })),
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"id": "oh-my-openclaw",
|
|
3
3
|
"name": "Oh-My-OpenClaw",
|
|
4
4
|
"description": "Multi-agent orchestration plugin \u2014 10 agents, category-based model routing, todo enforcer, ralph loop, and custom tools",
|
|
5
|
-
"version": "0.
|
|
6
|
-
"skills": ["
|
|
5
|
+
"version": "0.3.0",
|
|
6
|
+
"skills": ["skills"],
|
|
7
7
|
"configSchema": {
|
|
8
8
|
"type": "object",
|
|
9
9
|
"additionalProperties": false,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happycastle/oh-my-openclaw",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Oh-My-OpenClaw plugin — multi-agent orchestration, todo enforcer, ralph loop, and custom tools for OpenClaw",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"files": [
|
|
36
36
|
"dist",
|
|
37
37
|
"bin",
|
|
38
|
+
"skills",
|
|
38
39
|
"openclaw.plugin.json"
|
|
39
40
|
],
|
|
40
41
|
"keywords": [
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: comment-checker
|
|
3
|
+
description: Code quality checker that prevents AI slop in comments. Ensures code reads like a senior developer wrote it.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Comment Checker - Anti-AI-Slop Guard
|
|
7
|
+
|
|
8
|
+
You are the **Comment Checker**, ensuring code quality by preventing AI-generated comment slop.
|
|
9
|
+
|
|
10
|
+
## What is AI Slop?
|
|
11
|
+
|
|
12
|
+
Comments that add no value, state the obvious, or sound robotic:
|
|
13
|
+
|
|
14
|
+
### BAD (AI Slop) ❌
|
|
15
|
+
```typescript
|
|
16
|
+
// Import the necessary modules
|
|
17
|
+
import { User } from './models';
|
|
18
|
+
|
|
19
|
+
// Define the function to get user
|
|
20
|
+
function getUser(id: string) {
|
|
21
|
+
// Get the user from the database
|
|
22
|
+
const user = await db.users.findOne({ id });
|
|
23
|
+
// Return the user
|
|
24
|
+
return user;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Export the function
|
|
28
|
+
export { getUser };
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### GOOD (Senior Developer) ✅
|
|
32
|
+
```typescript
|
|
33
|
+
import { User } from './models';
|
|
34
|
+
|
|
35
|
+
// Throws NotFoundError if user doesn't exist
|
|
36
|
+
function getUser(id: string) {
|
|
37
|
+
const user = await db.users.findOne({ id });
|
|
38
|
+
return user;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { getUser };
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Rules
|
|
45
|
+
|
|
46
|
+
1. **Delete obvious comments**: If the code says what the comment says, delete the comment
|
|
47
|
+
2. **Keep WHY comments**: Comments explaining *why* something is done a certain way are valuable
|
|
48
|
+
3. **Keep WARNING comments**: `// HACK:`, `// TODO:`, `// FIXME:`, `// WARNING:` are useful
|
|
49
|
+
4. **Keep API docs**: JSDoc/docstrings for public APIs are valuable
|
|
50
|
+
5. **No narration**: Don't narrate what the code does step by step
|
|
51
|
+
|
|
52
|
+
## Detection Patterns
|
|
53
|
+
|
|
54
|
+
Flag these patterns for removal:
|
|
55
|
+
- `// Import ...` before import statements
|
|
56
|
+
- `// Define ...` before function/class definitions
|
|
57
|
+
- `// Return ...` before return statements
|
|
58
|
+
- `// Export ...` before export statements
|
|
59
|
+
- `// Set ... to ...` before assignments
|
|
60
|
+
- `// Loop through ...` before loops
|
|
61
|
+
- `// Check if ...` before conditionals (unless explaining WHY)
|
|
62
|
+
- `// Initialize ...` before variable declarations
|
|
63
|
+
- `// Create ...` before object creation
|
|
64
|
+
|
|
65
|
+
## When to Run
|
|
66
|
+
|
|
67
|
+
- After any code generation or modification
|
|
68
|
+
- Before committing (pair with git-master skill)
|
|
69
|
+
- During code review
|
|
70
|
+
|
|
71
|
+
## Output
|
|
72
|
+
|
|
73
|
+
When checking code, report:
|
|
74
|
+
```
|
|
75
|
+
Comment Check Results:
|
|
76
|
+
- ✅ Clean: [number] files
|
|
77
|
+
- ⚠️ AI Slop Found: [number] files
|
|
78
|
+
- [file:line] "[offending comment]" → REMOVE (obvious)
|
|
79
|
+
- [file:line] "[offending comment]" → REWRITE: "[suggested replacement]"
|
|
80
|
+
```
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: delegation-prompt
|
|
3
|
+
description: Delegation prompt writing guide with 7 required elements for high-precision subagent execution.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Delegation Prompt - 7 Elements Guide
|
|
7
|
+
|
|
8
|
+
위임 품질은 프롬프트 품질에 의해 결정된다. 아래 7요소를 항상 포함한다.
|
|
9
|
+
|
|
10
|
+
## 7 Required Elements
|
|
11
|
+
|
|
12
|
+
1. **TASK**
|
|
13
|
+
- 단일 원자 작업을 명확히 지시
|
|
14
|
+
2. **EXPECTED OUTCOME**
|
|
15
|
+
- 산출물과 성공 기준을 구체화
|
|
16
|
+
3. **REQUIRED SKILLS**
|
|
17
|
+
- 필요한 스킬 목록 명시
|
|
18
|
+
4. **REQUIRED TOOLS**
|
|
19
|
+
- 사용 가능한 도구 화이트리스트
|
|
20
|
+
5. **MUST DO**
|
|
21
|
+
- 반드시 수행할 세부 요구사항
|
|
22
|
+
6. **MUST NOT DO**
|
|
23
|
+
- 금지사항(범위 확장, 파일 수정 금지 등)
|
|
24
|
+
7. **CONTEXT**
|
|
25
|
+
- 경로, 제약, 기존 패턴, 다운스트림 목적
|
|
26
|
+
|
|
27
|
+
## Canonical Template
|
|
28
|
+
|
|
29
|
+
```markdown
|
|
30
|
+
1) TASK: <one atomic goal>
|
|
31
|
+
2) EXPECTED OUTCOME: <deliverables + acceptance criteria>
|
|
32
|
+
3) REQUIRED SKILLS: <skill1, skill2>
|
|
33
|
+
4) REQUIRED TOOLS: <tool whitelist>
|
|
34
|
+
5) MUST DO: <exhaustive requirements>
|
|
35
|
+
6) MUST NOT DO: <explicit prohibitions>
|
|
36
|
+
7) CONTEXT: <paths, constraints, style references, downstream use>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Quality Checklist
|
|
40
|
+
|
|
41
|
+
- 결과 검증 기준이 측정 가능하다
|
|
42
|
+
- 입력 경로/범위가 명시되어 있다
|
|
43
|
+
- 금지사항이 모호하지 않다
|
|
44
|
+
- 실패 시 재시도/보고 방식이 정의되어 있다
|
|
45
|
+
|
|
46
|
+
## Anti-Patterns
|
|
47
|
+
|
|
48
|
+
- "적당히", "알아서" 같은 모호한 지시
|
|
49
|
+
- 도구 무제한 허용
|
|
50
|
+
- 컨텍스트 없는 대규모 요청
|
|
51
|
+
- 기대 산출물이 없는 위임
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-ui-ux
|
|
3
|
+
description: Designer-turned-developer skill for crafting stunning UI/UX. Emphasizes bold aesthetic direction, distinctive typography, cohesive color palettes, and premium feel.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Frontend UI/UX - Design-First Development
|
|
7
|
+
|
|
8
|
+
You are a **designer-turned-developer**. You craft stunning UI/UX even without design mockups.
|
|
9
|
+
|
|
10
|
+
## Design Process
|
|
11
|
+
|
|
12
|
+
Before writing any code, define:
|
|
13
|
+
1. **Purpose**: What is this interface for? Who uses it?
|
|
14
|
+
2. **Tone**: Professional? Playful? Minimal? Bold?
|
|
15
|
+
3. **Constraints**: Existing design system? Brand colors? Accessibility requirements?
|
|
16
|
+
4. **Differentiation**: What makes this NOT look like every other AI-generated UI?
|
|
17
|
+
|
|
18
|
+
## Aesthetic Direction
|
|
19
|
+
|
|
20
|
+
Choose an extreme. Generic is death:
|
|
21
|
+
- **Brutalist**: Raw, bold, intentionally rough
|
|
22
|
+
- **Maximalist**: Rich, layered, information-dense
|
|
23
|
+
- **Retro-futuristic**: Neon + dark, cyberpunk vibes
|
|
24
|
+
- **Luxury**: Minimal, spacious, premium materials
|
|
25
|
+
- **Playful**: Rounded, colorful, animated, fun
|
|
26
|
+
|
|
27
|
+
## Typography
|
|
28
|
+
|
|
29
|
+
- Use **distinctive** fonts, not defaults
|
|
30
|
+
- Avoid: Inter, Roboto, Arial (too generic)
|
|
31
|
+
- Try: Space Grotesk, Outfit, Clash Display, Satoshi, Cabinet Grotesk
|
|
32
|
+
- Establish clear hierarchy: display → heading → body → caption
|
|
33
|
+
- Use font-feature-settings for polish
|
|
34
|
+
|
|
35
|
+
## Color
|
|
36
|
+
|
|
37
|
+
- Build a **cohesive palette** with 3-5 colors
|
|
38
|
+
- Use HSL for precise control
|
|
39
|
+
- Sharp accents against muted backgrounds
|
|
40
|
+
- Avoid: purple-on-white AI slop, random gradients
|
|
41
|
+
- Dark mode: not just inverted colors, redesign the feel
|
|
42
|
+
|
|
43
|
+
## Motion & Interaction
|
|
44
|
+
|
|
45
|
+
- **High-impact**: Staggered reveals, scroll-triggered animations
|
|
46
|
+
- **Surprising**: Unexpected hover states, micro-interactions
|
|
47
|
+
- Use CSS transitions (200-400ms) for state changes
|
|
48
|
+
- Use CSS animations for attention-grabbing elements
|
|
49
|
+
- Avoid: gratuitous animation that slows down the experience
|
|
50
|
+
|
|
51
|
+
## Layout
|
|
52
|
+
|
|
53
|
+
- Break the grid intentionally
|
|
54
|
+
- Use negative space as a design element
|
|
55
|
+
- Asymmetric layouts > symmetric layouts
|
|
56
|
+
- Full-bleed sections for impact
|
|
57
|
+
- Card-based layouts with depth (shadows, borders)
|
|
58
|
+
|
|
59
|
+
## Anti-Patterns (NEVER DO)
|
|
60
|
+
|
|
61
|
+
- Generic fonts (Inter, Roboto, Arial)
|
|
62
|
+
- Predictable layouts (header-hero-cards-footer)
|
|
63
|
+
- Cookie-cutter design (looks like every SaaS landing page)
|
|
64
|
+
- Purple-on-white AI slop
|
|
65
|
+
- Placeholder content without styling
|
|
66
|
+
- Unstyled form elements
|
|
67
|
+
- Default browser scrollbars
|
|
68
|
+
|
|
69
|
+
## Verification
|
|
70
|
+
|
|
71
|
+
After implementation:
|
|
72
|
+
1. Take a screenshot and review it yourself
|
|
73
|
+
2. Check responsive behavior at 320px, 768px, 1024px, 1440px
|
|
74
|
+
3. Verify color contrast (WCAG AA minimum)
|
|
75
|
+
4. Test all interactive states (hover, focus, active, disabled)
|
|
76
|
+
5. Ensure animations don't cause layout shifts
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gemini-look-at
|
|
3
|
+
description: Gemini CLI 기반 멀티모달 분석 스킬. PDF, 이미지, 스크린샷, 다이어그램을 Gemini의 네이티브 멀티모달 능력으로 분석한다. tmux gemini 세션을 통해 실행.
|
|
4
|
+
---
|
|
5
|
+
# Gemini Look-At — Multimodal Analysis via Gemini CLI
|
|
6
|
+
|
|
7
|
+
OmO의 `look-at` 도구를 Gemini CLI + tmux로 재구현한 스킬.
|
|
8
|
+
OpenClaw의 `read` 도구는 이미지를 첨부로 보내줄 수 있지만, **PDF는 읽을 수 없고**, Gemini CLI는 PDF/이미지/비디오를 네이티브로 분석할 수 있다.
|
|
9
|
+
|
|
10
|
+
## 언제 사용하는가
|
|
11
|
+
|
|
12
|
+
- **PDF 분석** — 레이아웃, 디자인, 콘텐츠 품질 평가
|
|
13
|
+
- **이미지/스크린샷 분석** — UI 리뷰, 버그 확인, 디자인 피드백
|
|
14
|
+
- **다이어그램 해석** — 아키텍처, 플로우차트, ER 다이어그램 분석
|
|
15
|
+
- **멀티 파일 비교** — 두 PDF/이미지를 동시에 비교
|
|
16
|
+
- **OCR + 해석** — 스크린샷에서 텍스트 추출 + 의미 분석
|
|
17
|
+
|
|
18
|
+
## Gemini CLI 기본 사용법
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# 빠른 시작
|
|
22
|
+
gemini "질문..."
|
|
23
|
+
|
|
24
|
+
# 모델 지정
|
|
25
|
+
gemini --model <name> "프롬프트..."
|
|
26
|
+
|
|
27
|
+
# JSON 형식 출력
|
|
28
|
+
gemini --output-format json "JSON 반환"
|
|
29
|
+
|
|
30
|
+
# 확장(extensions) 목록 확인
|
|
31
|
+
gemini --list-extensions
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- 첫 실행 시 인터랙티브 로그인/인증이 필요하다.
|
|
35
|
+
- `--yolo` 플래그는 사용하지 않는다.
|
|
36
|
+
|
|
37
|
+
## 실행 방법
|
|
38
|
+
|
|
39
|
+
### 방법 1: tmux gemini 세션 (권장)
|
|
40
|
+
|
|
41
|
+
tmux `gemini` 세션이 이미 인증되어 있으므로 안정적.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
SOCKET="/tmp/openclaw-tmux-sockets/openclaw.sock"
|
|
45
|
+
SESSION="gemini"
|
|
46
|
+
|
|
47
|
+
# 단일 파일 분석
|
|
48
|
+
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -l -- \
|
|
49
|
+
"gemini -m gemini-2.5-flash --prompt '이 파일을 분석해줘. 레이아웃, 디자인, 콘텐츠 품질을 평가하고 개선점을 제안해.' -f /path/to/file.pdf -o text" \
|
|
50
|
+
&& sleep 0.1 && tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 Enter
|
|
51
|
+
|
|
52
|
+
# 결과 확인 (10-30초 대기 후)
|
|
53
|
+
sleep 15
|
|
54
|
+
tmux -S "$SOCKET" capture-pane -p -J -t "$SESSION":0.0 -S -200
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 방법 2: 결과를 파일로 저장
|
|
58
|
+
|
|
59
|
+
분석 결과가 길 때는 파일로 리다이렉트:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -l -- \
|
|
63
|
+
"gemini -m gemini-2.5-flash --prompt '상세 분석' -f /path/to/file.pdf -o text > /tmp/gemini-analysis.md 2>&1" \
|
|
64
|
+
&& sleep 0.1 && tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 Enter
|
|
65
|
+
|
|
66
|
+
# 결과 파일 읽기
|
|
67
|
+
sleep 20
|
|
68
|
+
cat /tmp/gemini-analysis.md
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 방법 3: 여러 파일 동시 분석
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -l -- \
|
|
75
|
+
"gemini -m gemini-2.5-flash --prompt '두 파일을 비교해줘' -f /path/to/before.png -f /path/to/after.png -o text" \
|
|
76
|
+
&& sleep 0.1 && tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 Enter
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## ���석 패턴별 프롬프트
|
|
80
|
+
|
|
81
|
+
### PDF 레이아웃/디자인 리뷰
|
|
82
|
+
```
|
|
83
|
+
이 PDF의 레이아웃, 줄넘김, 디자인을 평가해줘.
|
|
84
|
+
부자연스러운 부분이 있으면 구체적으로 알려줘.
|
|
85
|
+
특히: 여백, 폰트 크기, 줄간격, 페이지 나눔, 표/이미지 배치를 체크해.
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 스크린샷 UI 리뷰
|
|
89
|
+
```
|
|
90
|
+
이 웹 UI 스크린샷을 분석해줘.
|
|
91
|
+
1. 레이아웃 정렬과 간격 일관성
|
|
92
|
+
2. 타이포그래피 계층 구조
|
|
93
|
+
3. 색상 대비 및 접근성
|
|
94
|
+
4. 인터랙티브 요소의 가시성
|
|
95
|
+
5. 전체적인 디자인 품질 (1-10 점수)
|
|
96
|
+
개선 제안을 구체적으로 해줘.
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 아키텍처 다이어그램 해석
|
|
100
|
+
```
|
|
101
|
+
이 아키텍처 다이어그램을 분석해줘.
|
|
102
|
+
- 각 컴포넌트의 역할을 식별
|
|
103
|
+
- 데이터 흐름 방향을 설명
|
|
104
|
+
- 잠재적 병목점이나 단일 장애점을 식별
|
|
105
|
+
- 개선 제안
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Before/After 비교
|
|
109
|
+
```
|
|
110
|
+
이 두 이미지를 비교해줘.
|
|
111
|
+
- 바뀐 부분을 구체적으로 나열
|
|
112
|
+
- 개선된 점과 퇴보한 점을 구분
|
|
113
|
+
- 추가 개선 제안
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 에러 스크린샷 디버깅
|
|
117
|
+
```
|
|
118
|
+
이 에러 스크린샷을 분석해줘.
|
|
119
|
+
- 에러 메시지를 정확히 읽어줘
|
|
120
|
+
- 가능한 원인을 추정
|
|
121
|
+
- 해결 방법을 제안
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## 모델 선택 가이드
|
|
125
|
+
|
|
126
|
+
| ���도 | 추천 모델 | 이유 |
|
|
127
|
+
|------|-----------|------|
|
|
128
|
+
| 빠른 확인 | `gemini-2.5-flash` | 빠름, 충분한 멀티모달 능력 |
|
|
129
|
+
| 상세 분석 | `gemini-2.5-pro` | 더 깊은 분석, 긴 콘텐츠 |
|
|
130
|
+
| 최고 품질 | `gemini-3.1-pro` | 최신 모델, 최상의 멀티모달 |
|
|
131
|
+
|
|
132
|
+
## OpenClaw read vs Gemini CLI
|
|
133
|
+
|
|
134
|
+
| 기능 | OpenClaw `read` | Gemini CLI |
|
|
135
|
+
|------|----------------|------------|
|
|
136
|
+
| 이미지 (PNG/JPG) | ✅ 첨부로 전송 | ✅ 네이티브 분석 |
|
|
137
|
+
| PDF | ❌ 텍스트만 | ✅ 레이아웃 포함 분석 |
|
|
138
|
+
| 비디오 | ❌ | ✅ 프레임 분석 |
|
|
139
|
+
| 여러 파일 동시 | ❌ 하나씩 | ✅ `-f` 여러 개 |
|
|
140
|
+
| 인증 | 불필요 | tmux 세션 필요 |
|
|
141
|
+
|
|
142
|
+
## 워크플로우: OpenCode + Gemini CLI 연계
|
|
143
|
+
|
|
144
|
+
코딩 작업 중 시각적 확인이 필요할 때:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
1. OpenCode (tmux opencode 세션)에서 코드 작성/수정
|
|
148
|
+
2. 빌드/렌더링 결과물 생성 (PDF, 스크린샷 등)
|
|
149
|
+
3. Gemini CLI (tmux gemini 세션)로 결과물 시각적 품질 검증
|
|
150
|
+
4. 문제 발견 시 → 다시 OpenCode로 돌아가서 수정
|
|
151
|
+
5. 반복 (결과물 만족할 때까지)
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## 주의사항
|
|
155
|
+
|
|
156
|
+
- tmux `gemini` 세션이 반드시 실행 중이어야 함 (인증 상태 유지)
|
|
157
|
+
- `capture-pane`으로 결과 확인 시 출력이 잘리면 `-S -500` 등으로 줄 수 늘리기
|
|
158
|
+
- 파일 경로는 절대 경로 사용
|
|
159
|
+
- 응답 대기: PDF 크기에 따라 10-60초 소요 가능
|
|
160
|
+
- `--yolo` 플래그 사용 금지 (안전성)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-master
|
|
3
|
+
description: Git expert skill for atomic commits, rebase surgery, and history archaeology. Detects commit styles, splits changes into logical commits, and manages complex git operations.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git Master - Git Expert Skill
|
|
7
|
+
|
|
8
|
+
You are **Git Master**, a specialized git operations expert. You have three specializations:
|
|
9
|
+
|
|
10
|
+
## 1. Commit Architect
|
|
11
|
+
Create clean, atomic commits following the project's conventions.
|
|
12
|
+
|
|
13
|
+
### Rules
|
|
14
|
+
- **3+ files** → MUST be 2+ commits
|
|
15
|
+
- **5+ files** → MUST be 3+ commits
|
|
16
|
+
- **10+ files** → MUST be 5+ commits
|
|
17
|
+
|
|
18
|
+
### Automatic Style Detection
|
|
19
|
+
Before committing, analyze the last 30 commits:
|
|
20
|
+
```bash
|
|
21
|
+
git log --oneline -30
|
|
22
|
+
```
|
|
23
|
+
Detect:
|
|
24
|
+
- **Language**: Korean or English
|
|
25
|
+
- **Style**: semantic (feat:/fix:/chore:), plain, or short
|
|
26
|
+
- **Scope**: with scope (feat(auth):) or without
|
|
27
|
+
|
|
28
|
+
Match the detected style exactly.
|
|
29
|
+
|
|
30
|
+
### Commit Process
|
|
31
|
+
1. `git diff --stat` to see all changes
|
|
32
|
+
2. Group changes by logical unit (feature, fix, refactor, etc.)
|
|
33
|
+
3. Stage each group separately: `git add <specific-files>`
|
|
34
|
+
4. Commit with appropriate message matching detected style
|
|
35
|
+
5. Verify with `git log --oneline -5`
|
|
36
|
+
|
|
37
|
+
## 2. Rebase Surgeon
|
|
38
|
+
Handle complex rebase operations safely.
|
|
39
|
+
|
|
40
|
+
### Operations
|
|
41
|
+
- **Interactive rebase**: `git rebase -i HEAD~N`
|
|
42
|
+
- **Squash commits**: Combine related commits
|
|
43
|
+
- **Reorder commits**: Fix dependency ordering
|
|
44
|
+
- **Conflict resolution**: Systematic approach to merge conflicts
|
|
45
|
+
|
|
46
|
+
### Safety Rules
|
|
47
|
+
- Always create a backup branch before rebasing: `git branch backup-$(date +%s)`
|
|
48
|
+
- Never force-push to shared branches without explicit permission
|
|
49
|
+
- Document all rebase operations in commit messages
|
|
50
|
+
|
|
51
|
+
## 3. History Archaeologist
|
|
52
|
+
Find when and where specific changes were introduced.
|
|
53
|
+
|
|
54
|
+
### Tools
|
|
55
|
+
```bash
|
|
56
|
+
# Find who wrote specific code
|
|
57
|
+
git blame <file> -L <start>,<end>
|
|
58
|
+
|
|
59
|
+
# Find when a change was introduced
|
|
60
|
+
git log --all -S '<search-term>' --oneline
|
|
61
|
+
|
|
62
|
+
# Find commits touching a file
|
|
63
|
+
git log --follow --oneline -- <file>
|
|
64
|
+
|
|
65
|
+
# Find when a function was added
|
|
66
|
+
git log -p --all -S 'function_name' -- '*.ts'
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Trigger
|
|
70
|
+
Activate when user mentions: commit, rebase, squash, "who wrote", "when was X added", "git history", "blame"
|
|
71
|
+
|
|
72
|
+
## Anti-Patterns
|
|
73
|
+
- Do NOT create single monolithic commits for multi-file changes
|
|
74
|
+
- Do NOT use generic messages like "update files" or "fix stuff"
|
|
75
|
+
- Do NOT rebase without creating a backup branch first
|
|
76
|
+
- Do NOT force-push without explicit user consent
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: multimodal-analysis
|
|
3
|
+
description: Multimodal file analysis skill for PDFs, images, and technical diagrams using look-at style patterns.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Multimodal Analysis - File Analysis Skill
|
|
7
|
+
|
|
8
|
+
OmO `look-at` 도구 패턴을 기반으로, 문서/이미지/다이어그램 분석을 표준화한다.
|
|
9
|
+
|
|
10
|
+
## Source Pattern (OmO)
|
|
11
|
+
|
|
12
|
+
- `look-at`는 파일 경로 + 분석 목표(goal)를 받아 멀티모달 해석 수행
|
|
13
|
+
- 핵심 입력은 단순하다: **무엇을 볼지** + **무엇을 추출할지**
|
|
14
|
+
|
|
15
|
+
## Supported Inputs
|
|
16
|
+
|
|
17
|
+
- PDF 문서
|
|
18
|
+
- 일반 이미지(PNG/JPG/WebP)
|
|
19
|
+
- 기술 다이어그램(architecture/flow/UML/ER)
|
|
20
|
+
|
|
21
|
+
## Analysis Patterns
|
|
22
|
+
|
|
23
|
+
### 1) PDF Analysis
|
|
24
|
+
|
|
25
|
+
- 목표 예시: 요약, 정책/요건 추출, 변경점 비교
|
|
26
|
+
- 출력: 핵심 항목 bullet + 필요한 경우 구조화 목록
|
|
27
|
+
|
|
28
|
+
### 2) Image Analysis
|
|
29
|
+
|
|
30
|
+
- 목표 예시: 화면 구성요소 식별, 텍스트/라벨 추출, 상태 비교
|
|
31
|
+
- 출력: 영역별 관찰 + actionable insight
|
|
32
|
+
|
|
33
|
+
### 3) Diagram Analysis
|
|
34
|
+
|
|
35
|
+
- 목표 예시: 컴포넌트 관계, 데이터 흐름, 병목/리스크 파악
|
|
36
|
+
- 출력: 노드/엣지 해석 + 개선 포인트
|
|
37
|
+
|
|
38
|
+
## Prompt Template
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
Input: <file_path>
|
|
42
|
+
Goal: <what to extract / explain>
|
|
43
|
+
Constraints: <format, scope, language>
|
|
44
|
+
Output: <summary|table|checklist>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Recommended Workflow
|
|
48
|
+
|
|
49
|
+
1. 목표를 1문장으로 명확화
|
|
50
|
+
2. 파일 유형에 맞는 패턴 선택
|
|
51
|
+
3. 분석 결과를 실행 가능한 액션으로 변환
|
|
52
|
+
4. 불확실성은 "추정"으로 명시
|
|
53
|
+
|
|
54
|
+
## Guardrails
|
|
55
|
+
|
|
56
|
+
- 파일 내용이 불명확하면 단정하지 않는다
|
|
57
|
+
- OCR/시각 해석 결과는 근거와 함께 제시
|
|
58
|
+
- 원문 인용이 필요하면 짧게, 과도한 복붙 금지
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opencode-controller
|
|
3
|
+
description: tmux의 OpenCode 세션을 제어한다. 세션 관리, 모델 선택, 에이전트 전환(Plan/Build), OmO 위임 패턴을 포함.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# opencode-controller — OpenCode 세션 제어
|
|
7
|
+
|
|
8
|
+
OpenClaw는 직접 코드를 쓰는 실행기가 아니라, OpenCode에 작업을 위임해 결과를 수집/검증하는 오케스트레이터다.
|
|
9
|
+
|
|
10
|
+
## 핵심 원칙
|
|
11
|
+
|
|
12
|
+
- OpenClaw가 직접 코드를 작성하지 않는다
|
|
13
|
+
- 코딩 작업은 tmux `opencode` 세션으로 위임한다
|
|
14
|
+
- OpenClaw는 작업 분해, 지시, 모니터링, 결과 검증을 담당한다
|
|
15
|
+
|
|
16
|
+
## Pre-flight 체크
|
|
17
|
+
|
|
18
|
+
### 1) Provider/모델 선택
|
|
19
|
+
|
|
20
|
+
- 작업 난이도에 따라 OpenCode 모델 선택(quick/deep/ultrabrain)
|
|
21
|
+
- 고난도 작업은 고성능 모델 우선
|
|
22
|
+
|
|
23
|
+
### 2) 인증 상태
|
|
24
|
+
|
|
25
|
+
- OpenCode CLI 제공자 인증이 완료되어 있어야 함
|
|
26
|
+
- 인증 만료 시 세션 내에서 재로그인 후 재시도
|
|
27
|
+
|
|
28
|
+
### 3) tmux 세션 확인
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
SOCKET="/tmp/openclaw-tmux-sockets/openclaw.sock"
|
|
32
|
+
tmux -S "$SOCKET" has-session -t opencode
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 세션 관리
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
SOCKET="/tmp/openclaw-tmux-sockets/openclaw.sock"
|
|
39
|
+
|
|
40
|
+
# 세션 생성
|
|
41
|
+
tmux -S "$SOCKET" new -d -s opencode -n main
|
|
42
|
+
|
|
43
|
+
# 세션 상태
|
|
44
|
+
tmux -S "$SOCKET" list-sessions
|
|
45
|
+
|
|
46
|
+
# 세션 출력 확인
|
|
47
|
+
tmux -S "$SOCKET" capture-pane -p -J -t opencode:0.0 -S -200
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## 에이전트 제어
|
|
51
|
+
|
|
52
|
+
OpenCode 에이전트 전환은 Tab 기반으로 수행한다.
|
|
53
|
+
|
|
54
|
+
| 에이전트 | 용도 | 전환 |
|
|
55
|
+
|----------|------|------|
|
|
56
|
+
| Sisyphus | 기본 구현/수정 | 기본 상태 |
|
|
57
|
+
| Hephaestus | 깊은 구현/리팩토링 | Tab 1회 |
|
|
58
|
+
| Prometheus | 계획 수립/전략화 | Tab 2회 |
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 Tab
|
|
62
|
+
sleep 1
|
|
63
|
+
tmux -S "$SOCKET" capture-pane -p -J -t opencode:0.0 -S -20
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 모델 선택 가이드
|
|
67
|
+
|
|
68
|
+
- 빠른 수정: 속도 우선 모델
|
|
69
|
+
- 복잡한 리팩토링/설계: 심층 추론 모델
|
|
70
|
+
- 계획 전용 단계: 최고 추론 모델 우선
|
|
71
|
+
|
|
72
|
+
실행 시점에 프로젝트 표준 라우팅(quick/deep/ultrabrain)을 따른다.
|
|
73
|
+
|
|
74
|
+
## Plan -> Build 워크플로우
|
|
75
|
+
|
|
76
|
+
1) Prometheus로 계획 수립
|
|
77
|
+
2) 계획 승인/정리
|
|
78
|
+
3) Sisyphus 또는 Hephaestus로 구현 전환
|
|
79
|
+
4) 테스트/빌드/검증 실행
|
|
80
|
+
5) 결과를 OpenClaw가 수집해 최종 보고
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Plan 단계
|
|
84
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 Tab
|
|
85
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 Tab
|
|
86
|
+
sleep 0.2
|
|
87
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 -l -- '계획 수립: 인증 모듈 리팩토링 범위/리스크/검증전략 작성'
|
|
88
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 Enter
|
|
89
|
+
|
|
90
|
+
# Build 단계 전환(예: Sisyphus로 복귀 후 구현)
|
|
91
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 Escape
|
|
92
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 -l -- 'ultrawork 위 계획 기준으로 구현 시작, 테스트까지 완료'
|
|
93
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 Enter
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## OmO 위임 패턴
|
|
97
|
+
|
|
98
|
+
### 1) tmux 세션 검증
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
SOCKET="/tmp/openclaw-tmux-sockets/openclaw.sock"
|
|
102
|
+
tmux -S "$SOCKET" has-session -t opencode
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 2) 에이전트 선택표
|
|
106
|
+
|
|
107
|
+
| 목적 | 에이전트 | 전환 |
|
|
108
|
+
|------|----------|------|
|
|
109
|
+
| 기본 실행 | Sisyphus | 기본 |
|
|
110
|
+
| 깊은 구현 | Hephaestus | Tab 1회 |
|
|
111
|
+
| 계획 수립 | Prometheus | Tab 2회 |
|
|
112
|
+
|
|
113
|
+
### 3) 작업 전송 (`send-keys -l` + Enter 분리)
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
TASK='ultrawork 결제 실패 버그 수정. 재현, 원인 분석, 테스트 추가, 회귀 방지 포함.'
|
|
117
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 -l -- "$TASK"
|
|
118
|
+
sleep 0.1
|
|
119
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 Enter
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 4) 작업 템플릿
|
|
123
|
+
|
|
124
|
+
기능 구현:
|
|
125
|
+
```text
|
|
126
|
+
ultrawork [기능] 구현.
|
|
127
|
+
요구사항:
|
|
128
|
+
- [요구 1]
|
|
129
|
+
- [요구 2]
|
|
130
|
+
기존 [참조 파일] 패턴을 따르고 테스트까지 수행.
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
버그 수정:
|
|
134
|
+
```text
|
|
135
|
+
ultrawork [버그 설명] 수정.
|
|
136
|
+
재현 경로: [steps]
|
|
137
|
+
에러: [message]
|
|
138
|
+
기대 동작: [expected]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
리팩토링:
|
|
142
|
+
```text
|
|
143
|
+
ultrawork [모듈] 리팩토링.
|
|
144
|
+
목표:
|
|
145
|
+
- [목표 1]
|
|
146
|
+
- [목표 2]
|
|
147
|
+
제약:
|
|
148
|
+
- Public API 변경 금지
|
|
149
|
+
- 기존 테스트 통과
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
리서치 + 구현:
|
|
153
|
+
```text
|
|
154
|
+
[/path/to/research.md]를 먼저 읽고,
|
|
155
|
+
ultrawork 연구 결과 기준으로 [기능] 구현.
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 5) 진행 모니터링 (`capture-pane`)
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
tmux -S "$SOCKET" capture-pane -p -J -t opencode:0.0 -S -200
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
권장:
|
|
165
|
+
- 10-30초 주기로 진행 로그 확인
|
|
166
|
+
- 막힘 징후(동일 출력 반복, 프롬프트 대기) 즉시 개입
|
|
167
|
+
|
|
168
|
+
### 6) 결과 수집 (`git status`/`git diff`)
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
git status
|
|
172
|
+
git diff --stat
|
|
173
|
+
git diff
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
OpenClaw는 변경 파일/테스트 결과/리스크를 요약해 사용자에게 전달한다.
|
|
177
|
+
|
|
178
|
+
### 7) 에러 복구
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# 현재 동작 중단
|
|
182
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 Escape
|
|
183
|
+
|
|
184
|
+
# 수정 지시 재전송
|
|
185
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 -l -- '직전 단계에서 테스트 실패 원인만 먼저 해결해.'
|
|
186
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 Enter
|
|
187
|
+
|
|
188
|
+
# 세션 재시작
|
|
189
|
+
tmux -S "$SOCKET" kill-session -t opencode
|
|
190
|
+
tmux -S "$SOCKET" new -d -s opencode -n main
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## 운영 체크리스트
|
|
194
|
+
|
|
195
|
+
- 세션 alive 확인 -> 에이전트 선택 -> 작업 전송 -> 모니터링 -> 결과 수집
|
|
196
|
+
- 항상 `send-keys -l` + 별도 Enter
|
|
197
|
+
- 결과 보고 전에 `git status`/`git diff`로 변경 검증
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: steering-words
|
|
3
|
+
description: Detect ultrawork/search/analyze family keywords in multilingual prompts and recommend the best agent mode.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Steering Words - Keyword Detection Skill
|
|
7
|
+
|
|
8
|
+
키워드 기반으로 사용자 의도를 빠르게 분류하고 적절한 에이전트 모드를 추천한다.
|
|
9
|
+
|
|
10
|
+
## 목적
|
|
11
|
+
|
|
12
|
+
- 입력 프롬프트에서 **steering words**를 감지
|
|
13
|
+
- `ultrawork / search / analyze` 패밀리로 분류
|
|
14
|
+
- 한국어/일본어/중국어 키워드를 포함해 모드 추천
|
|
15
|
+
|
|
16
|
+
## Detection Families
|
|
17
|
+
|
|
18
|
+
### 1) Ultrawork Family
|
|
19
|
+
|
|
20
|
+
- English: `ultrawork`, `ulw`, `full throttle`, `maximum effort`, `deep think`
|
|
21
|
+
- 한국어: `울트라워크`, `풀가동`, `최대 노력`, `끝까지`, `전부 자동`
|
|
22
|
+
- 日本語: `ウルトラワーク`, `全力`, `最大努力`, `最後まで`, `自動実行`
|
|
23
|
+
- 中文: `超强模式`, `全力模式`, `最大努力`, `一路做完`, `全自动`
|
|
24
|
+
|
|
25
|
+
**추천 모드**
|
|
26
|
+
- 우선: `/ultrawork`
|
|
27
|
+
- 대안: 복잡 구현이면 `hephaestus`, 복잡 계획이면 `prometheus`
|
|
28
|
+
|
|
29
|
+
### 2) Search Family
|
|
30
|
+
|
|
31
|
+
- English: `search`, `find`, `locate`, `lookup`, `scan`, `trace`, `where is`, `list all`
|
|
32
|
+
- 한국어: `찾아`, `검색`, `어디`, `전부 보여`, `목록`
|
|
33
|
+
- 日本語: `探して`, `検索`, `どこ`, `一覧`, `全部見せて`
|
|
34
|
+
- 中文: `查找`, `搜索`, `哪里`, `列出`, `全部显示`
|
|
35
|
+
|
|
36
|
+
**추천 모드**
|
|
37
|
+
- 우선: `explore` (코드베이스 탐색)
|
|
38
|
+
- 외부 문서/OSS 필요 시: `librarian` 병행
|
|
39
|
+
|
|
40
|
+
### 3) Analyze Family
|
|
41
|
+
|
|
42
|
+
- English: `analyze`, `analyse`, `investigate`, `examine`, `research`, `audit`, `why`, `how does`
|
|
43
|
+
- 한국어: `분석`, `조사`, `검토`, `원인`, `왜`, `어떻게`
|
|
44
|
+
- 日本語: `分析`, `調査`, `検証`, `原因`, `なぜ`, `どうして`
|
|
45
|
+
- 中文: `分析`, `调查`, `排查`, `原因`, `为什么`, `怎么`
|
|
46
|
+
|
|
47
|
+
**추천 모드**
|
|
48
|
+
- 우선: `metis` (의도 분류/범위 정제)
|
|
49
|
+
- 아키텍처 트레이드오프 포함 시: `oracle`
|
|
50
|
+
|
|
51
|
+
## Scoring Rule
|
|
52
|
+
|
|
53
|
+
1. 패밀리별 키워드 매칭 수를 집계
|
|
54
|
+
2. 최다 점수 패밀리를 선택
|
|
55
|
+
3. 동점이면 우선순위: `ultrawork > analyze > search`
|
|
56
|
+
4. 모호하면 `metis` 추천 후 재분류
|
|
57
|
+
|
|
58
|
+
## Output Template
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
## Steering Detection
|
|
62
|
+
- Family: <ultrawork|search|analyze>
|
|
63
|
+
- Matched Keywords: <comma-separated>
|
|
64
|
+
- Recommended Mode: <mode/agent>
|
|
65
|
+
- Reason: <one sentence>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Guardrails
|
|
69
|
+
|
|
70
|
+
- 키워드 감지는 힌트이며 절대 규칙이 아니다.
|
|
71
|
+
- 명시적 사용자 지시가 있으면 키워드보다 우선한다.
|
|
72
|
+
- 다국어 혼합 입력은 단일 언어로 정규화하지 말고 그대로 매칭한다.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tmux-agents
|
|
3
|
+
description: tmux 세션에서 코딩 에이전트(Claude Code, Codex, Gemini, Ollama)를 스폰하고 모니터링한다.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# tmux-agents — 에이전트 스폰/모니터링 가이드
|
|
7
|
+
|
|
8
|
+
tmux 안에서 코딩 에이전트를 띄우고, 상태를 확인하고, 병렬로 운영하는 실행 패턴 모음.
|
|
9
|
+
|
|
10
|
+
## 에이전트 종류
|
|
11
|
+
|
|
12
|
+
| 구분 | 에이전트 ID | 실행 위치 | 특성 |
|
|
13
|
+
|------|-------------|----------|------|
|
|
14
|
+
| cloud | `claude` | 원격 API | 고품질 추론, 안정적 |
|
|
15
|
+
| cloud | `codex` | 원격 API | 코드 생성/수정 강점 |
|
|
16
|
+
| cloud | `gemini` | 원격 API | 멀티모달/긴 문맥 강점 |
|
|
17
|
+
| local | `ollama-claude` | 로컬 Ollama | 비용 절감, 오프라인 가능 |
|
|
18
|
+
| local | `ollama-codex` | 로컬 Ollama | 로컬 코드 작업 최적화 |
|
|
19
|
+
|
|
20
|
+
## 빠른 명령 모음
|
|
21
|
+
|
|
22
|
+
아래 명령은 tmux-agents 헬퍼 스크립트 인터페이스를 기준으로 한다.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# 1) 스폰
|
|
26
|
+
./spawn.sh --agent codex --session opencode-2 --cwd /path/to/project
|
|
27
|
+
|
|
28
|
+
# 2) 목록
|
|
29
|
+
./status.sh list
|
|
30
|
+
|
|
31
|
+
# 3) 헬스체크
|
|
32
|
+
./check.sh --session opencode-2
|
|
33
|
+
|
|
34
|
+
# 4) 붙기
|
|
35
|
+
tmux attach -t opencode-2
|
|
36
|
+
|
|
37
|
+
# 5) 지시 전송 (안전 입력)
|
|
38
|
+
tmux send-keys -t opencode-2:0.0 -l -- 'Fix failing tests in auth module'
|
|
39
|
+
tmux send-keys -t opencode-2:0.0 Enter
|
|
40
|
+
|
|
41
|
+
# 6) 종료
|
|
42
|
+
tmux kill-session -t opencode-2
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 병렬 에이전트 패턴
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# 병렬 스폰 예시
|
|
49
|
+
./spawn.sh --agent codex --session opencode --cwd /repo/a
|
|
50
|
+
./spawn.sh --agent claude --session opencode-2 --cwd /repo/b
|
|
51
|
+
./spawn.sh --agent gemini --session gemini --cwd /repo/a
|
|
52
|
+
|
|
53
|
+
# 병렬 진행 후 상태 점검
|
|
54
|
+
./status.sh list
|
|
55
|
+
./check.sh --session opencode
|
|
56
|
+
./check.sh --session opencode-2
|
|
57
|
+
./check.sh --session gemini
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
운영 원칙:
|
|
61
|
+
- 구현 세션과 검증 세션을 분리
|
|
62
|
+
- 긴 작업은 10-30초 간격으로 주기 점검
|
|
63
|
+
- 완료 후 세션별 결과를 순차 수집
|
|
64
|
+
|
|
65
|
+
## Local vs Cloud 선택 기준
|
|
66
|
+
|
|
67
|
+
| 상황 | 권장 | 이유 |
|
|
68
|
+
|------|------|------|
|
|
69
|
+
| 속도보다 품질이 중요 | cloud | 최신 모델 품질/추론 강점 |
|
|
70
|
+
| 장시간 반복 작업 | local | 비용 절감, 호출 제한 없음 |
|
|
71
|
+
| 외부 네트워크 제약 | local | 오프라인/폐쇄망 대응 |
|
|
72
|
+
| 멀티모달 분석 필요 | cloud(gemini) | 이미지/PDF 처리 품질 |
|
|
73
|
+
| 민감 코드 로컬 처리 | local | 데이터 외부 전송 최소화 |
|
|
74
|
+
|
|
75
|
+
## Ollama 준비
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Ollama 실행 확인
|
|
79
|
+
ollama list
|
|
80
|
+
|
|
81
|
+
# 필요한 모델 다운로드(예시)
|
|
82
|
+
ollama pull qwen2.5-coder:14b
|
|
83
|
+
ollama pull llama3.1:8b
|
|
84
|
+
|
|
85
|
+
# 로컬 응답 확인
|
|
86
|
+
curl http://127.0.0.1:11434/api/tags
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
권장:
|
|
90
|
+
- 코딩용 모델 + 범용 대화 모델 1개씩 준비
|
|
91
|
+
- RAM/VRAM 한계를 고려해 동시 실행 수 제한
|
|
92
|
+
|
|
93
|
+
## 팁
|
|
94
|
+
|
|
95
|
+
- 세션 타겟은 항상 `session:window.pane`으로 고정 (`opencode-2:0.0`)
|
|
96
|
+
- 텍스트 입력은 `send-keys -l` 후 Enter 분리
|
|
97
|
+
- 출력 확인은 `capture-pane -p -J -S -200` 기본 사용
|
|
98
|
+
- 실패 세션은 즉시 재생성하고 동일 프롬프트 재투입
|
|
99
|
+
|
|
100
|
+
## 헬퍼 스크립트 범위
|
|
101
|
+
|
|
102
|
+
`spawn.sh`, `status.sh`, `check.sh`는 공식 `openclaw/skills/tmux-agents` 패키지에서 제공되는 헬퍼 스크립트 인터페이스를 따른다.
|
|
103
|
+
이 문서는 스크립트 사용법 자체가 아니라, OpenClaw/OmO 운영 관점의 실행 지식을 제공한다.
|
package/skills/tmux.md
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tmux
|
|
3
|
+
description: tmux 세션 원격제어 + 멀티 세션 오케스트레이션. send-keys/capture-pane으로 인터랙티브 CLI를 제어하고 병렬 세션을 운영한다.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# tmux — 세션 제어와 병렬 오케스트레이션
|
|
7
|
+
|
|
8
|
+
OpenClaw에서 tmux를 제어할 때의 표준 패턴.
|
|
9
|
+
단일 세션 제어부터 OpenCode/Gemini 멀티 세션 병렬 운영까지 다룬다.
|
|
10
|
+
|
|
11
|
+
## 소켓 규칙
|
|
12
|
+
|
|
13
|
+
- OpenClaw 기본 소켓: `/tmp/openclaw-tmux-sockets/openclaw.sock`
|
|
14
|
+
- 기본 clawdbot 경로를 가정하지 말고 OpenClaw 소켓을 우선 사용
|
|
15
|
+
- 폴백 규칙: `CLAWDBOT_TMUX_SOCKET_DIR`가 있으면 해당 디렉토리의 소켓 사용
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
SOCKET="/tmp/openclaw-tmux-sockets/openclaw.sock"
|
|
19
|
+
if [ -n "${CLAWDBOT_TMUX_SOCKET_DIR:-}" ] && [ -S "$CLAWDBOT_TMUX_SOCKET_DIR/openclaw.sock" ]; then
|
|
20
|
+
SOCKET="$CLAWDBOT_TMUX_SOCKET_DIR/openclaw.sock"
|
|
21
|
+
fi
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Quickstart (OpenClaw 소켓)
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
SOCKET="/tmp/openclaw-tmux-sockets/openclaw.sock"
|
|
28
|
+
|
|
29
|
+
# 세션 목록
|
|
30
|
+
tmux -S "$SOCKET" list-sessions
|
|
31
|
+
|
|
32
|
+
# opencode 세션이 살아있는지 확인
|
|
33
|
+
tmux -S "$SOCKET" has-session -t opencode && echo READY || echo MISSING
|
|
34
|
+
|
|
35
|
+
# 출력 확인
|
|
36
|
+
tmux -S "$SOCKET" capture-pane -p -J -t opencode:0.0 -S -200
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 타겟 지정 규칙
|
|
40
|
+
|
|
41
|
+
- 타겟 형식: `session:window.pane`
|
|
42
|
+
- 예시: `opencode:0.0`, `gemini:0.0`, `opencode-2:1.0`
|
|
43
|
+
- 세션명만 주면 모호해질 수 있으므로 가능하면 pane까지 고정
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 -l -- 'pwd'
|
|
47
|
+
sleep 0.1
|
|
48
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 Enter
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 안전한 입력 전송
|
|
52
|
+
|
|
53
|
+
원칙: `send-keys -l`로 문자열 전송 후 `Enter`를 별도 호출.
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
TARGET="opencode:0.0"
|
|
57
|
+
CMD='git status --short'
|
|
58
|
+
|
|
59
|
+
tmux -S "$SOCKET" send-keys -t "$TARGET" -l -- "$CMD"
|
|
60
|
+
sleep 0.1
|
|
61
|
+
tmux -S "$SOCKET" send-keys -t "$TARGET" Enter
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 출력 수집 표준
|
|
65
|
+
|
|
66
|
+
최근 출력은 아래 명령을 기본으로 사용:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
tmux -S "$SOCKET" capture-pane -p -J -t opencode:0.0 -S -200
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
- 긴 작업은 `-S -500` 이상으로 확장
|
|
73
|
+
- `-J`로 줄바꿈 연결해 파싱 안정성 확보
|
|
74
|
+
|
|
75
|
+
## 코딩 에이전트 오케스트레이션
|
|
76
|
+
|
|
77
|
+
여러 코딩 세션을 병렬 실행하고 완료를 폴링한다.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
SOCKET="/tmp/openclaw-tmux-sockets/openclaw.sock"
|
|
81
|
+
|
|
82
|
+
# 병렬 지시
|
|
83
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 -l -- 'ultrawork auth 버그 수정'
|
|
84
|
+
tmux -S "$SOCKET" send-keys -t opencode:0.0 Enter
|
|
85
|
+
|
|
86
|
+
tmux -S "$SOCKET" send-keys -t opencode-2:0.0 -l -- 'ultrawork 결제 모듈 테스트 보강'
|
|
87
|
+
tmux -S "$SOCKET" send-keys -t opencode-2:0.0 Enter
|
|
88
|
+
|
|
89
|
+
# 완료 폴링
|
|
90
|
+
for i in $(seq 1 20); do
|
|
91
|
+
echo "[poll:$i] opencode"
|
|
92
|
+
tmux -S "$SOCKET" capture-pane -p -J -t opencode:0.0 -S -30
|
|
93
|
+
echo "[poll:$i] opencode-2"
|
|
94
|
+
tmux -S "$SOCKET" capture-pane -p -J -t opencode-2:0.0 -S -30
|
|
95
|
+
sleep 15
|
|
96
|
+
done
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
권장 운영 방식:
|
|
100
|
+
- 시작은 병렬, 결과 수집은 순차
|
|
101
|
+
- 폴링 간격은 10-30초
|
|
102
|
+
- 완료 신호(작업 요약/테스트 결과) 확인 후 다음 단계 진행
|
|
103
|
+
|
|
104
|
+
## 멀티 세션 오케스트레이션 패턴
|
|
105
|
+
|
|
106
|
+
### 세션 네이밍
|
|
107
|
+
|
|
108
|
+
- 기본: `opencode`, `gemini`
|
|
109
|
+
- 확장: `opencode-2`, `gemini-2`, `opencode-3`, `research`, `build`
|
|
110
|
+
- 규칙: 역할 또는 프로젝트 단위로 명명
|
|
111
|
+
|
|
112
|
+
### 병렬 시나리오
|
|
113
|
+
|
|
114
|
+
1) 두 프로젝트 동시 진행
|
|
115
|
+
- `opencode`: 프로젝트 A
|
|
116
|
+
- `opencode-2`: 프로젝트 B
|
|
117
|
+
|
|
118
|
+
2) 코딩 + 검증 동시 진행
|
|
119
|
+
- `opencode`: 구현/수정
|
|
120
|
+
- `gemini`, `gemini-2`: 결과물 시각 검증
|
|
121
|
+
|
|
122
|
+
3) 리서치 + 구현 + 빌드
|
|
123
|
+
- `research` 또는 `gemini`: 문서/레퍼런스 분석
|
|
124
|
+
- `opencode`: 구현
|
|
125
|
+
- `build`: 테스트/빌드 감시
|
|
126
|
+
|
|
127
|
+
### 에이전트 선택표 (OpenCode)
|
|
128
|
+
|
|
129
|
+
| 작업 성격 | 권장 에이전트 | 전환 |
|
|
130
|
+
|-----------|----------------|------|
|
|
131
|
+
| 빠른 수정/구현 | Sisyphus (기본) | 기본 상태 |
|
|
132
|
+
| 복잡한 자율 구현 | Hephaestus | Tab 1회 |
|
|
133
|
+
| 계획/전략 수립 | Prometheus | Tab 2회 |
|
|
134
|
+
|
|
135
|
+
## 운영 템플릿
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
SOCKET="/tmp/openclaw-tmux-sockets/openclaw.sock"
|
|
139
|
+
|
|
140
|
+
# 세션 생성
|
|
141
|
+
tmux -S "$SOCKET" new -d -s opencode-2 -n main
|
|
142
|
+
tmux -S "$SOCKET" new -d -s gemini-2 -n main
|
|
143
|
+
|
|
144
|
+
# 작업 전송
|
|
145
|
+
tmux -S "$SOCKET" send-keys -t opencode-2:0.0 -l -- 'ultrawork 리팩토링 실행'
|
|
146
|
+
sleep 0.1
|
|
147
|
+
tmux -S "$SOCKET" send-keys -t opencode-2:0.0 Enter
|
|
148
|
+
|
|
149
|
+
# 결과 캡처
|
|
150
|
+
tmux -S "$SOCKET" capture-pane -p -J -t opencode-2:0.0 -S -200
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 정리(클린업)
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
SOCKET="/tmp/openclaw-tmux-sockets/openclaw.sock"
|
|
157
|
+
|
|
158
|
+
# 단일 세션 종료
|
|
159
|
+
tmux -S "$SOCKET" kill-session -t opencode-2
|
|
160
|
+
|
|
161
|
+
# 기본 세션(opencode, gemini) 제외 전체 종료
|
|
162
|
+
for s in $(tmux -S "$SOCKET" list-sessions -F '#{session_name}' 2>/dev/null); do
|
|
163
|
+
case "$s" in
|
|
164
|
+
opencode|gemini) ;;
|
|
165
|
+
*) tmux -S "$SOCKET" kill-session -t "$s" ;;
|
|
166
|
+
esac
|
|
167
|
+
done
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## 주의사항
|
|
171
|
+
|
|
172
|
+
- Enter를 명령 문자열에 섞지 말고 반드시 분리
|
|
173
|
+
- 경로/인용부호가 복잡한 명령은 스크립트 파일로 실행
|
|
174
|
+
- pane 캡처만으로 부족하면 로그 파일 리다이렉트 병행
|
|
175
|
+
- 세션 수를 늘릴수록 메모리 사용량이 급증하므로 동시성 제한 필요
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Session recovery workflow with checkpointing, failure detection, and automatic restore using file-based checkpoints + memory_search.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Auto-Rescue Workflow
|
|
6
|
+
|
|
7
|
+
장시간 작업 중 실패/중단 상황에서 세션을 자동 복구한다.
|
|
8
|
+
|
|
9
|
+
## When to Use
|
|
10
|
+
|
|
11
|
+
- 긴 구현/리팩터링 세션
|
|
12
|
+
- 다중 단계 작업(5+ step)
|
|
13
|
+
- 반복 실패 가능성이 높은 디버깅/빌드 복구 작업
|
|
14
|
+
|
|
15
|
+
## Core Mechanism
|
|
16
|
+
|
|
17
|
+
- **Checkpoint 저장**: 주요 단계마다 `write` 도구로 파일 저장 (`workspace/checkpoints/`)
|
|
18
|
+
- **Checkpoint 조회**: 복구 시 `read` 도구 + `memory_search` (OpenClaw 네이티브)
|
|
19
|
+
- **자동 복원**: 가장 최근 정상 상태부터 재시작
|
|
20
|
+
|
|
21
|
+
> **Note**: OpenClaw의 `group:memory`에는 `memory_search`/`memory_get`만 존재하고
|
|
22
|
+
> `memory_store`는 없다. 저장은 반드시 파일 기반(`write`)으로 수행한다.
|
|
23
|
+
|
|
24
|
+
## Checkpoint Schema
|
|
25
|
+
|
|
26
|
+
`workspace/checkpoints/checkpoint-<timestamp>.json`에 다음 형태로 저장한다:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"type": "session-checkpoint",
|
|
31
|
+
"session_id": "<id>",
|
|
32
|
+
"task": "<current task>",
|
|
33
|
+
"step": "<current step>",
|
|
34
|
+
"changed_files": ["path/a", "path/b"],
|
|
35
|
+
"verification": {
|
|
36
|
+
"diagnostics": "pass|fail|not-run",
|
|
37
|
+
"tests": "pass|fail|not-run",
|
|
38
|
+
"build": "pass|fail|not-run"
|
|
39
|
+
},
|
|
40
|
+
"next_action": "<what to do next>",
|
|
41
|
+
"timestamp": "<iso8601>"
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Workflow Steps
|
|
46
|
+
|
|
47
|
+
### 1) Start Monitoring
|
|
48
|
+
|
|
49
|
+
1. 세션 시작 시 checkpoint baseline 저장 (`write` → `workspace/checkpoints/`)
|
|
50
|
+
2. todo 기준으로 단계 전환마다 checkpoint 갱신
|
|
51
|
+
3. 실패 가능 작업 전(대규모 edit/build/test) 선저장
|
|
52
|
+
|
|
53
|
+
### 2) Failure Detection
|
|
54
|
+
|
|
55
|
+
다음 중 하나면 rescue 트리거:
|
|
56
|
+
|
|
57
|
+
- 동일 오류 3회 연속 발생
|
|
58
|
+
- 빌드/테스트가 연속 실패하고 진행 불가
|
|
59
|
+
- 세션 중단(타임아웃/강제 인터럽트/에이전트 중지)
|
|
60
|
+
|
|
61
|
+
### 3) Recovery Procedure
|
|
62
|
+
|
|
63
|
+
1. `read` 도구로 `workspace/checkpoints/` 내 최근 checkpoint 파일 읽기
|
|
64
|
+
2. 가장 최신 `verification`이 정상(pass)인 지점 선택
|
|
65
|
+
3. 해당 시점의 `next_action`부터 재개
|
|
66
|
+
4. 동일 실패 재발 시 한 단계 이전 checkpoint로 롤백
|
|
67
|
+
|
|
68
|
+
### 4) Post-Recovery
|
|
69
|
+
|
|
70
|
+
1. 복구 성공 상태를 새 checkpoint 파일로 저장 (`write`)
|
|
71
|
+
2. 실패 원인/해결을 `workspace/notepads/issues.md`에 기록
|
|
72
|
+
3. 남은 단계 계속 진행
|
|
73
|
+
|
|
74
|
+
## OpenClaw Tool Mapping
|
|
75
|
+
|
|
76
|
+
| 동작 | 사용할 도구 | 비고 |
|
|
77
|
+
| --------------- | --------------- | -------------------------------------------- |
|
|
78
|
+
| Checkpoint 저장 | `write` | `workspace/checkpoints/checkpoint-<ts>.json` |
|
|
79
|
+
| Checkpoint 읽기 | `read` | 직접 파일 경로 지정 |
|
|
80
|
+
| 과거 기억 검색 | `memory_search` | OpenClaw `group:memory` |
|
|
81
|
+
| 특정 기억 조회 | `memory_get` | key 기반 |
|
|
82
|
+
| 파일 목록 확인 | `exec` (ls) | checkpoint 디렉토리 스캔 |
|
|
83
|
+
|
|
84
|
+
## Example
|
|
85
|
+
|
|
86
|
+
```text
|
|
87
|
+
# 저장
|
|
88
|
+
write({ path: "workspace/checkpoints/checkpoint-2026-02-22T13-00.json", content: "{ ... }" })
|
|
89
|
+
|
|
90
|
+
# 복구 시 읽기
|
|
91
|
+
read({ path: "workspace/checkpoints/checkpoint-2026-02-22T13-00.json" })
|
|
92
|
+
|
|
93
|
+
# 세션 기억에서 관련 컨텍스트 검색
|
|
94
|
+
memory_search({ query: "session-checkpoint auth refactor" })
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Completion Criteria
|
|
98
|
+
|
|
99
|
+
- 복구 후 작업이 실제로 재개됨
|
|
100
|
+
- 최신 checkpoint 파일이 저장됨
|
|
101
|
+
- 동일 실패 루프가 차단됨
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: OmO src/tools 패턴을 OpenClaw에서 재사용 가능한 실행 패턴으로 매핑하는 워크플로우
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Tool Patterns Workflow (OmO → OpenClaw)
|
|
6
|
+
|
|
7
|
+
OmO의 `src/tools/` 구조를 기준으로, OpenClaw에서 실사용 가능한 도구 패턴을 표준화한다.
|
|
8
|
+
|
|
9
|
+
## 목적
|
|
10
|
+
|
|
11
|
+
- 도구 선택 실수를 줄이고
|
|
12
|
+
- 반복 가능한 실행 루틴을 만들며
|
|
13
|
+
- 계획/실행/검증 단계를 일관되게 유지한다.
|
|
14
|
+
|
|
15
|
+
## 패턴 매핑
|
|
16
|
+
|
|
17
|
+
> **중요**: 아래 테이블의 "OpenClaw 도구"는 모두 OpenClaw 공식 도구 인벤토리에 실제 존재하는 도구들이다.
|
|
18
|
+
|
|
19
|
+
| OmO Tool Pattern | 의도 | OpenClaw 도구 & 사용 패턴 |
|
|
20
|
+
| ------------------------- | -------------------- | ------------------------------------------------------------------ |
|
|
21
|
+
| `task/*` (todo-sync) | 작업 상태 추적 | 파일 기반 할 일 관리: `write`로 `workspace/todos.md` 갱신 |
|
|
22
|
+
| `lsp/*` (goto/references) | 코드 탐색/검증 | `exec` 도구로 린터/타입체커 실행 → 결과로 검증 |
|
|
23
|
+
| `interactive-bash` | 장시간/상호작용 셸 | `exec`(`pty: true`) 또는 tmux 연동 |
|
|
24
|
+
| `bash` | 원샷 명령 | `exec`(동기), `exec`(`background: true`) → `process`(`poll`) |
|
|
25
|
+
| `slashcommand` | 명령 워크플로우 구동 | OpenClaw 스킬 `/ultrawork`, `/plan`, `/start-work` (슬래시 커맨드) |
|
|
26
|
+
| `session-manager` | 세션 탐색/재개 | `sessions_list`, `sessions_history`, `session_status` |
|
|
27
|
+
| `skill-mcp` | 스킬 기반 도구 호출 | OpenClaw 스킬 시스템 (`read` → SKILL.md 참조) |
|
|
28
|
+
| `look-at` | 멀티모달 분석 | `image` 도구 + Gemini CLI tmux 연동 |
|
|
29
|
+
| `background-task` | 병렬 작업 | `exec`(`background: true`) → `process`(`poll`/`log`/`kill`) |
|
|
30
|
+
| `file-read/write/edit` | 파일 조작 | `read`, `write`, `edit`, `apply_patch` (`group:fs`) |
|
|
31
|
+
| `web-search` | 웹 검색 | `web_search`, `web_fetch` (`group:web`) |
|
|
32
|
+
| `memory` | 지식 축적 | `memory_search`, `memory_get` (`group:memory`) |
|
|
33
|
+
| `delegation` | 서브에이전트 위임 | `sessions_spawn`(`task`, `agentId`, `model`) |
|
|
34
|
+
|
|
35
|
+
## OpenClaw Tool Groups 정리
|
|
36
|
+
|
|
37
|
+
| Group | 포함 도구 | 활용 |
|
|
38
|
+
| ---------------- | ------------------------------------------------ | ---------------------------- |
|
|
39
|
+
| `group:fs` | read, write, edit, apply_patch | 파일 조작 전반 |
|
|
40
|
+
| `group:runtime` | exec, bash, process | 명령 실행 + 백그라운드 관리 |
|
|
41
|
+
| `group:sessions` | sessions_list/history/send/spawn, session_status | 멀티 에이전트 |
|
|
42
|
+
| `group:memory` | memory_search, memory_get | 지식 검색 (저장은 파일 기반) |
|
|
43
|
+
| `group:web` | web_search, web_fetch | 웹 검색/페치 |
|
|
44
|
+
| `group:ui` | browser, canvas | 브라우저/UI |
|
|
45
|
+
|
|
46
|
+
## 실행 절차
|
|
47
|
+
|
|
48
|
+
### 1) 계획 단계
|
|
49
|
+
|
|
50
|
+
1. 복잡 작업이면 `write`로 `workspace/todos.md` 생성
|
|
51
|
+
2. 탐색은 `exec` + grep/find 우선
|
|
52
|
+
3. 외부 의존성은 `web_search`/`web_fetch` 또는 librarian 에이전트 병행
|
|
53
|
+
|
|
54
|
+
### 2) 구현 단계
|
|
55
|
+
|
|
56
|
+
1. 변경 전 `read` + `exec`(grep)로 영향도 파악
|
|
57
|
+
2. 작은 단위로 `edit`/`apply_patch` 수정
|
|
58
|
+
3. 필요 시 `sessions_spawn`로 전문 에이전트 위임
|
|
59
|
+
|
|
60
|
+
### 3) 검증 단계
|
|
61
|
+
|
|
62
|
+
1. `exec`로 린터/타입체커 실행
|
|
63
|
+
2. `exec`로 관련 테스트/빌드 실행
|
|
64
|
+
3. 실패 시 원인-기반 `edit` 후 재검증
|
|
65
|
+
|
|
66
|
+
### 4) 병렬 작업 관리
|
|
67
|
+
|
|
68
|
+
1. 독립 탐색/리서치는 `exec`(`background: true`)로 병렬 실행
|
|
69
|
+
2. `process`(`poll`/`log`)로 결과 수집
|
|
70
|
+
3. 최종 응답 전 `process`(`kill`)로 정리
|
|
71
|
+
|
|
72
|
+
## 금지/주의 사항
|
|
73
|
+
|
|
74
|
+
- 구현 미요청 상태에서 코드 변경 금지
|
|
75
|
+
- 검증 없는 완료 보고 금지
|
|
76
|
+
- 장시간 TUI 작업은 `exec`(`pty: true`) 사용
|
|
77
|
+
- 수동 추정으로 API/패턴 확정하지 않기 (검색/근거 필수)
|
|
78
|
+
|
|
79
|
+
## 체크리스트
|
|
80
|
+
|
|
81
|
+
- [ ] Todo 상태가 `workspace/todos.md`에 실시간 반영되었는가
|
|
82
|
+
- [ ] 사용한 도구가 OpenClaw 공식 도구 인벤토리에 존재하는가
|
|
83
|
+
- [ ] 변경 후 `exec`로 test/build 근거가 있는가
|
|
84
|
+
- [ ] 백그라운드 작업이 `process`(`kill`)로 정리되었는가
|