triflux 10.20.0 → 10.20.2
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.ko.md +34 -42
- package/README.md +30 -36
- package/bin/triflux.mjs +13 -4
- package/hooks/hook-orchestrator.mjs +1 -1
- package/hooks/hook-registry.json +76 -2
- package/hooks/hooks.json +49 -1
- package/hooks/permission-safe-allow.mjs +233 -0
- package/hooks/pipeline-stop.mjs +355 -16
- package/hooks/post-tool-tips.mjs +306 -0
- package/hooks/pre-compact-snapshot.mjs +181 -0
- package/hooks/session-end-cleanup.mjs +201 -0
- package/hooks/subagent-tracker.mjs +267 -0
- package/hooks/subagent-verifier.mjs +4 -0
- package/hub/account-broker.mjs +297 -8
- package/hub/codex-adapter.mjs +62 -2
- package/hub/server.mjs +51 -4
- package/hub/team/cli/services/native-control.mjs +1 -0
- package/hub/team/conductor.mjs +94 -29
- package/hub/team/native-supervisor.mjs +20 -7
- package/hub/team/swarm-cli.mjs +98 -4
- package/hub/team/swarm-hypervisor.mjs +112 -10
- package/hub/team/swarm-locks.mjs +7 -2
- package/hub/team/swarm-preflight.mjs +317 -0
- package/hub/team/synapse-cli.mjs +243 -6
- package/hub/team/worker-sandbox.mjs +93 -0
- package/hub/team/worktree-lifecycle.mjs +49 -8
- package/hub/workers/delegator-mcp.mjs +14 -1
- package/package.json +1 -1
- package/scripts/__tests__/gen-skill-docs.test.mjs +4 -0
- package/scripts/__tests__/skill-surface.test.mjs +61 -0
- package/scripts/gen-skill-manifest.mjs +3 -0
- package/scripts/lib/skill-template.mjs +2 -0
- package/scripts/session-stale-cleanup.mjs +111 -2
- package/skills/star-prompt/skill.json +1 -1
- package/skills/tfx-analysis/skill.json +11 -3
- package/skills/tfx-auto/skill.json +2 -2
- package/skills/tfx-autopilot/skill.json +9 -4
- package/skills/tfx-consensus/skill.json +4 -3
- package/skills/tfx-debate/skill.json +11 -4
- package/skills/tfx-doctor/skill.json +3 -1
- package/skills/tfx-fullcycle/skill.json +10 -4
- package/skills/tfx-hooks/skill.json +3 -1
- package/skills/tfx-hub/skill.json +5 -3
- package/skills/tfx-index/skill.json +6 -1
- package/skills/tfx-interview/skill.json +6 -1
- package/skills/tfx-multi/skill.json +7 -3
- package/skills/tfx-panel/skill.json +11 -4
- package/skills/tfx-persist/skill.json +11 -4
- package/skills/tfx-plan/skill.json +13 -3
- package/skills/tfx-profile/skill.json +3 -1
- package/skills/tfx-prune/skill.json +7 -1
- package/skills/tfx-psmux-rules/SKILL.md +2 -0
- package/skills/tfx-psmux-rules/SKILL.md.tmpl +22 -307
- package/skills/tfx-psmux-rules/skill.json +7 -2
- package/skills/tfx-qa/skill.json +12 -3
- package/skills/tfx-ralph/skill.json +4 -1
- package/skills/tfx-remote/skill.json +8 -0
- package/skills/tfx-remote-setup/SKILL.md +2 -0
- package/skills/tfx-remote-setup/SKILL.md.tmpl +23 -570
- package/skills/tfx-remote-setup/skill.json +7 -3
- package/skills/tfx-remote-spawn/SKILL.md +2 -0
- package/skills/tfx-remote-spawn/SKILL.md.tmpl +31 -242
- package/skills/tfx-remote-spawn/skill.json +7 -3
- package/skills/tfx-research/skill.json +11 -4
- package/skills/tfx-review/skill.json +12 -3
- package/skills/tfx-setup/skill.json +3 -1
- package/skills/tfx-ship/skill.json +13 -0
- package/skills/tfx-swarm/skill.json +13 -0
- package/skills/tfx-wt/skill.json +12 -0
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* 새 세션 시작 시 이전 세션의 stale 상태를 정리한다:
|
|
6
6
|
* 1. tfx-multi-state.json — 세션 간 상태 누수 방지 (#62)
|
|
7
7
|
* 2. tfx-route-*-pids — 고아 워커 프로세스 정리 (#62 후속)
|
|
8
|
+
* 3. git fsmonitor--daemon 누적 감시 — threshold 초과 시 증거 기록 (#214)
|
|
8
9
|
*
|
|
9
10
|
* @see scripts/headless-guard.mjs — 상태 소비자
|
|
10
11
|
* @see scripts/tfx-gate-activate.mjs — 상태 생산자 (ownerPid 기록)
|
|
@@ -13,14 +14,17 @@
|
|
|
13
14
|
|
|
14
15
|
import { execSync } from "node:child_process";
|
|
15
16
|
import {
|
|
17
|
+
appendFileSync,
|
|
16
18
|
existsSync,
|
|
19
|
+
mkdirSync,
|
|
17
20
|
readdirSync,
|
|
18
21
|
readFileSync,
|
|
19
22
|
statSync,
|
|
20
23
|
unlinkSync,
|
|
21
24
|
} from "node:fs";
|
|
22
|
-
import { platform, tmpdir } from "node:os";
|
|
23
|
-
import { join } from "node:path";
|
|
25
|
+
import { homedir, platform, tmpdir } from "node:os";
|
|
26
|
+
import { dirname, join } from "node:path";
|
|
27
|
+
import { findFsmonitorDaemons } from "../hub/lib/process-utils.mjs";
|
|
24
28
|
import { isProcessAlive } from "./lib/process-utils.mjs";
|
|
25
29
|
|
|
26
30
|
const MULTI_STATE_FILE = join(tmpdir(), "tfx-multi-state.json");
|
|
@@ -32,6 +36,8 @@ const PROTECTED_ANCESTOR_NAMES = new Set([
|
|
|
32
36
|
"gemini.exe",
|
|
33
37
|
]);
|
|
34
38
|
const PID_REUSE_GRACE_MS = 1000;
|
|
39
|
+
const DEFAULT_FSMONITOR_ALERT_THRESHOLD = 50;
|
|
40
|
+
const FSMONITOR_STALE_MS = 24 * 60 * 60 * 1000;
|
|
35
41
|
|
|
36
42
|
function normalizeName(name) {
|
|
37
43
|
return String(name || "")
|
|
@@ -44,6 +50,33 @@ function parseCreationMs(value) {
|
|
|
44
50
|
return Number.isFinite(ms) ? ms : null;
|
|
45
51
|
}
|
|
46
52
|
|
|
53
|
+
function parsePositiveInteger(value, fallback) {
|
|
54
|
+
const n = Number.parseInt(String(value ?? ""), 10);
|
|
55
|
+
return Number.isInteger(n) && n > 0 ? n : fallback;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function resolveHomeDir() {
|
|
59
|
+
return (
|
|
60
|
+
process.env.TRIFLUX_TEST_HOME ||
|
|
61
|
+
process.env.USERPROFILE ||
|
|
62
|
+
process.env.HOME ||
|
|
63
|
+
homedir()
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function defaultFsmonitorAlertLogPath() {
|
|
68
|
+
return join(resolveHomeDir(), ".omc", "state", "fsmonitor-alert.log");
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function summarizeFsmonitorDaemon(proc) {
|
|
72
|
+
return {
|
|
73
|
+
pid: proc.pid,
|
|
74
|
+
parentPid: proc.parentPid,
|
|
75
|
+
ageMs: Number.isFinite(proc.ageMs) ? proc.ageMs : null,
|
|
76
|
+
commandLine: String(proc.commandLine || "").slice(0, 200),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
47
80
|
function collectWindowsProcessTable() {
|
|
48
81
|
if (platform() !== "win32") return new Map();
|
|
49
82
|
try {
|
|
@@ -243,9 +276,85 @@ function cleanupOrphanPidFiles() {
|
|
|
243
276
|
}
|
|
244
277
|
}
|
|
245
278
|
|
|
279
|
+
export function monitorFsmonitorDaemons({
|
|
280
|
+
threshold = parsePositiveInteger(
|
|
281
|
+
process.env.TFX_FSMONITOR_ALERT_THRESHOLD,
|
|
282
|
+
DEFAULT_FSMONITOR_ALERT_THRESHOLD,
|
|
283
|
+
),
|
|
284
|
+
logPath = process.env.TFX_FSMONITOR_ALERT_LOG ||
|
|
285
|
+
defaultFsmonitorAlertLogPath(),
|
|
286
|
+
findFn = findFsmonitorDaemons,
|
|
287
|
+
now = new Date(),
|
|
288
|
+
isWindows = platform() === "win32",
|
|
289
|
+
} = {}) {
|
|
290
|
+
if (process.env.TFX_FSMONITOR_MONITOR === "0") {
|
|
291
|
+
return { checked: false, reason: "disabled" };
|
|
292
|
+
}
|
|
293
|
+
if (!isWindows) return { checked: false, reason: "non-windows" };
|
|
294
|
+
|
|
295
|
+
const effectiveThreshold = parsePositiveInteger(
|
|
296
|
+
threshold,
|
|
297
|
+
DEFAULT_FSMONITOR_ALERT_THRESHOLD,
|
|
298
|
+
);
|
|
299
|
+
|
|
300
|
+
try {
|
|
301
|
+
const daemons = findFn({
|
|
302
|
+
minAgeMs: 0,
|
|
303
|
+
nowMs: now.getTime(),
|
|
304
|
+
isWindows,
|
|
305
|
+
});
|
|
306
|
+
const total = daemons.length;
|
|
307
|
+
if (total < effectiveThreshold) {
|
|
308
|
+
return {
|
|
309
|
+
checked: true,
|
|
310
|
+
alert: false,
|
|
311
|
+
total,
|
|
312
|
+
threshold: effectiveThreshold,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
const record = {
|
|
317
|
+
ts: now.toISOString(),
|
|
318
|
+
source: "session-start",
|
|
319
|
+
total,
|
|
320
|
+
threshold: effectiveThreshold,
|
|
321
|
+
stale24h: daemons.filter(
|
|
322
|
+
(proc) =>
|
|
323
|
+
Number.isFinite(proc.ageMs) && proc.ageMs >= FSMONITOR_STALE_MS,
|
|
324
|
+
).length,
|
|
325
|
+
pids: daemons.slice(0, 20).map(summarizeFsmonitorDaemon),
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
mkdirSync(dirname(logPath), { recursive: true });
|
|
329
|
+
appendFileSync(logPath, `${JSON.stringify(record)}\n`, "utf8");
|
|
330
|
+
console.error(
|
|
331
|
+
`[session-stale-cleanup] git fsmonitor daemon threshold exceeded: total=${total} threshold=${effectiveThreshold} log=${logPath}`,
|
|
332
|
+
);
|
|
333
|
+
|
|
334
|
+
return {
|
|
335
|
+
checked: true,
|
|
336
|
+
alert: true,
|
|
337
|
+
total,
|
|
338
|
+
threshold: effectiveThreshold,
|
|
339
|
+
stale24h: record.stale24h,
|
|
340
|
+
logPath,
|
|
341
|
+
};
|
|
342
|
+
} catch (error) {
|
|
343
|
+
console.error(
|
|
344
|
+
`[session-stale-cleanup] fsmonitor monitor failed: ${error?.message || error}`,
|
|
345
|
+
);
|
|
346
|
+
return {
|
|
347
|
+
checked: false,
|
|
348
|
+
reason: "error",
|
|
349
|
+
error: error?.message || String(error),
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
246
354
|
export function main() {
|
|
247
355
|
cleanupMultiState();
|
|
248
356
|
cleanupOrphanPidFiles();
|
|
357
|
+
monitorFsmonitorDaemons();
|
|
249
358
|
}
|
|
250
359
|
|
|
251
360
|
const isDirectRun =
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "star-prompt",
|
|
3
|
-
"description": "CLI 프로젝트의 setup/postinstall 흐름에 GitHub 스타
|
|
3
|
+
"description": "CLI 프로젝트의 setup/postinstall 흐름에 GitHub 스타 요청을 추가한다. 기본: 모달 차단형 (AskUserQuestion). --soft: 부드러운 confirm 모드. gh CLI 인증 확인 → 이미 스타 여부 감지 → 선택 강제 → gh API로 자동 스타. 'star prompt', '스타 요청', '리포 스타', 'star request', '깃헙 스타 넣어줘', 'star 눌러달라고', '응원 요청' 같은 요청에 사용한다."
|
|
4
4
|
}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-analysis",
|
|
3
|
-
"description": "코드나 아키텍처를 분석해야 할 때 사용한다. '코드 분석', 'code analysis', '아키텍처 분석', '이 코드 어떻게 돌아가?', '구조 파악' 같은 요청에 반드시 사용.
|
|
4
|
-
"triggers": [
|
|
5
|
-
|
|
3
|
+
"description": "코드나 아키텍처를 분석해야 할 때 사용한다. '코드 분석', 'code analysis', '아키텍처 분석', '이 코드 어떻게 돌아가?', '구조 파악', '심층 분석', '제대로 분석', '3관점 분석', '편향 없이 분석' 같은 요청에 반드시 사용. 기본값은 3-CLI 합의 딥 분석. 빠른 단일 CLI 분석은 --quick 파라미터.",
|
|
4
|
+
"triggers": [
|
|
5
|
+
"코드 분석",
|
|
6
|
+
"code analysis",
|
|
7
|
+
"아키텍처 분석",
|
|
8
|
+
"analysis",
|
|
9
|
+
"deep analyze",
|
|
10
|
+
"심층 분석",
|
|
11
|
+
"deep-analysis"
|
|
12
|
+
],
|
|
13
|
+
"argument_hint": "<분석 대상> [--quick]",
|
|
6
14
|
"internal": true
|
|
7
15
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-auto",
|
|
3
|
-
"description": "통합 CLI
|
|
3
|
+
"description": "통합 CLI 오케스트레이터 + 실행 스킬 front door. 커맨드 숏컷(단일) + 자동 분류/분해(병렬) + 수동 병렬 + 명시 플래그 오버라이드. tfx-route.sh 기반. `--cli`, `--mode`, `--parallel`, `--retry`, `--isolation`, `--remote`, `--shape`, `--cli-set`, `--risk-tier` 플래그로 legacy tfx-codex/gemini/ multi/swarm/fullcycle/persist/autopilot/autoroute/auto-codex 와 consensus/debate/panel 동작을 직접 제어. legacy 스킬은 thin alias (Phase 5 v11 삭제 예정). '코드 짜줘', '구현해줘', '만들어줘', '수정해줘', '고쳐줘', 'implement', 'build', 'fix' 같은 구현/수정 요청에 사용.",
|
|
4
4
|
"triggers": [
|
|
5
5
|
"tfx-auto",
|
|
6
6
|
"implement",
|
|
@@ -22,5 +22,5 @@
|
|
|
22
22
|
"business-panel",
|
|
23
23
|
"index-repo"
|
|
24
24
|
],
|
|
25
|
-
"argument_hint": "<command|task> [args...]"
|
|
25
|
+
"argument_hint": "<command|task> [args...] [--cli auto|codex|gemini|claude] [--mode quick|deep|consensus] [--risk-tier auto|low|medium|high] [--shape consensus|debate|panel] [--cli-set triad|no-gemini|custom] [--parallel 1|N|swarm] [--retry 0|1|ralph] [--isolation none|worktree] [--remote <host>|none]"
|
|
26
26
|
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-autopilot",
|
|
3
|
-
"description": "
|
|
4
|
-
"triggers": [
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
"description": "DEPRECATED — tfx-auto 로 통합됨. `/tfx-auto` 로 리다이렉트 (플래그 없음, 기본 동작 동일). Phase 5 (v11) 에 물리 삭제 예정. tfx-autopilot 은 tfx-auto 복제본이었으므로 플래그 없이 그대로 리다이렉트.",
|
|
4
|
+
"triggers": [
|
|
5
|
+
"autopilot",
|
|
6
|
+
"자동",
|
|
7
|
+
"알아서 해"
|
|
8
|
+
],
|
|
9
|
+
"argument_hint": "<작업 설명 — tfx-auto 로 passthrough>",
|
|
10
|
+
"deprecated": true,
|
|
11
|
+
"superseded_by": "tfx-auto"
|
|
7
12
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-consensus",
|
|
3
|
-
"description": "
|
|
3
|
+
"description": "DEPRECATED — tfx-auto consensus root 로 통합됨. `/tfx-auto --mode consensus` 가 canonical entrypoint 다. Phase 4a 부터 consensus/debate/panel 은 같은 엔진 family 를 공유하고, 차이는 `--shape` 와 renderer 에만 남긴다. Phase 5 (v11) 에 물리 삭제 예정.",
|
|
4
4
|
"triggers": "[consensus, 합의]",
|
|
5
|
-
"argument_hint": "<분석 주제 또는
|
|
6
|
-
"
|
|
5
|
+
"argument_hint": "<분석 주제 또는 컨텍스트 — tfx-auto 로 passthrough>",
|
|
6
|
+
"deprecated": true,
|
|
7
|
+
"superseded_by": "tfx-auto"
|
|
7
8
|
}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-debate",
|
|
3
|
-
"description": "
|
|
4
|
-
"triggers": [
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
"description": "DEPRECATED — tfx-auto consensus shape 로 통합됨. `/tfx-auto --mode consensus --shape debate` 로 리다이렉트. Phase 4a 부터 debate 는 별도 엔진이 아니라 consensus family 내부의 옵션 비교 shape 다. Phase 5 (v11) 에 물리 삭제 예정.",
|
|
4
|
+
"triggers": [
|
|
5
|
+
"debate",
|
|
6
|
+
"토론",
|
|
7
|
+
"3자 토론",
|
|
8
|
+
"tri-debate",
|
|
9
|
+
"멀티모델 토론"
|
|
10
|
+
],
|
|
11
|
+
"argument_hint": "<토론 주제 또는 질문 — tfx-auto 로 passthrough>",
|
|
12
|
+
"deprecated": true,
|
|
13
|
+
"superseded_by": "tfx-auto"
|
|
7
14
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-doctor",
|
|
3
3
|
"description": "triflux 진단 및 수리 도구. AskUserQuestion 기반 인터랙티브 선택지로 CLI 미발견, HUD 미표시, 캐시 오류, 스킬 미설치 등을 진단하고 자동 수정합니다. Use when: not working, broken, error, 안 돼, 이상해, 에러, 캐시, reset, doctor",
|
|
4
|
-
"triggers": [
|
|
4
|
+
"triggers": [
|
|
5
|
+
"tfx-doctor"
|
|
6
|
+
],
|
|
5
7
|
"argument_hint": "[--fix|--reset]"
|
|
6
8
|
}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-fullcycle",
|
|
3
|
-
"description": "
|
|
4
|
-
"triggers": [
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
"description": "DEPRECATED — tfx-auto 로 통합됨. `/tfx-auto --mode deep --parallel 1` 로 리다이렉트. Phase 5 (v11) 에 물리 삭제 예정. \"pipeline-thorough 단일 실행\" 의미는 플래그로 동일 표현.",
|
|
4
|
+
"triggers": [
|
|
5
|
+
"deep autopilot",
|
|
6
|
+
"풀 오토",
|
|
7
|
+
"처음부터 끝까지",
|
|
8
|
+
"full auto"
|
|
9
|
+
],
|
|
10
|
+
"argument_hint": "<작업 설명 — tfx-auto 로 passthrough>",
|
|
11
|
+
"deprecated": true,
|
|
12
|
+
"superseded_by": "tfx-auto"
|
|
7
13
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-hooks",
|
|
3
3
|
"description": "Claude Code 훅 우선순위 관리자. AskUserQuestion 기반 인터랙티브 UI로 훅 스캔, 우선순위 조정, 오케스트레이터 적용/복원, 개별 훅 토글을 수행합니다. 사용자가 훅, hooks, 훅 관리, hook priority, 훅 우선순위, 오케스트레이터, orchestrator, 훅 설정, hook 설정, 훅 순서, hook order를 언급할 때마다 반드시 이 스킬을 사용하세요. Use when: hooks, 훅, hook priority, 훅 관리, orchestrator, 오케스트레이터, 훅 설정, 훅 순서",
|
|
4
|
-
"triggers": [
|
|
4
|
+
"triggers": [
|
|
5
|
+
"tfx-hooks"
|
|
6
|
+
],
|
|
5
7
|
"argument_hint": "[scan|apply|restore]"
|
|
6
8
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-hub",
|
|
3
|
-
"description": "tfx-hub MCP 메시지 버스 관리.
|
|
4
|
-
"triggers": [
|
|
5
|
-
|
|
3
|
+
"description": "tfx-hub MCP 메시지 버스 관리. CLI 에이전트 간 실시간 통신 허브를 시작/중지/상태확인하고, hub 도메인의 자유형 작업도 처리합니다. Use when: hub, 허브, 메시지 버스, message bus, 브릿지, bridge, MCP 서버 관리, 에이전트 통신",
|
|
4
|
+
"triggers": [
|
|
5
|
+
"tfx-hub"
|
|
6
|
+
],
|
|
7
|
+
"argument_hint": "<start|stop|status|자유형 작업 설명>"
|
|
6
8
|
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-index",
|
|
3
3
|
"description": "프로젝트 구조를 빠르게 파악하거나 토큰을 절약할 때 사용한다. '인덱싱', '프로젝트 구조', '인덱스 만들어', '코드베이스 맵', '프로젝트 개요' 같은 요청에 사용. 새 프로젝트 온보딩, 세션 시작 시 컨텍스트 효율화에 적극 활용.",
|
|
4
|
-
"triggers": [
|
|
4
|
+
"triggers": [
|
|
5
|
+
"인덱싱",
|
|
6
|
+
"프로젝트 인덱스",
|
|
7
|
+
"인덱스",
|
|
8
|
+
"tfx-index"
|
|
9
|
+
],
|
|
5
10
|
"argument_hint": "[--update] [경로]"
|
|
6
11
|
}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-interview",
|
|
3
|
-
"description": "요구사항이 모호하거나 구현 전 명확화가 필요할 때 사용한다. 'interview', '인터뷰', '요구사항 정리', '뭘 만들어야 하는지 모르겠어', '명확하게 해줘' 같은 요청에 반드시 사용. 구현 시작 전 스펙을 확정하고 싶을 때 적극 활용.",
|
|
3
|
+
"description": "요구사항이 모호하거나 구현 전 명확화가 필요할 때 사용한다. 'interview', 'deep-interview', '딥인터뷰', '소크라테스', '깊이 탐색', '요구사항 분석', '인터뷰', '요구사항 정리', '뭘 만들어야 하는지 모르겠어', '명확하게 해줘' 같은 요청에 반드시 사용. 구현 시작 전 스펙을 확정하고 싶을 때 적극 활용.",
|
|
4
4
|
"triggers": [
|
|
5
5
|
"interview",
|
|
6
|
+
"deep-interview",
|
|
7
|
+
"딥인터뷰",
|
|
8
|
+
"소크라테스",
|
|
9
|
+
"깊이 탐색",
|
|
10
|
+
"요구사항 분석",
|
|
6
11
|
"인터뷰",
|
|
7
12
|
"요구사항 탐색",
|
|
8
13
|
"tfx-interview",
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-multi",
|
|
3
|
-
"description": "
|
|
4
|
-
"triggers": [
|
|
5
|
-
|
|
3
|
+
"description": "DEPRECATED — tfx-auto 로 통합됨. `/tfx-auto --parallel N --mode deep` 로 리다이렉트. tfx-auto 가 이 플래그 조합을 받으면 내부적으로 `tfx multi --teammate-mode headless` 를 호출한다. Phase 5 (v11) 에 물리 삭제 예정.",
|
|
4
|
+
"triggers": [
|
|
5
|
+
"tfx-multi"
|
|
6
|
+
],
|
|
7
|
+
"argument_hint": "<작업 설명 — tfx-auto 로 passthrough>",
|
|
8
|
+
"deprecated": true,
|
|
9
|
+
"superseded_by": "tfx-auto"
|
|
6
10
|
}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-panel",
|
|
3
|
-
"description": "
|
|
4
|
-
"triggers": [
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
"description": "DEPRECATED — tfx-auto consensus shape 로 통합됨. `/tfx-auto --mode consensus --shape panel` 로 리다이렉트. Phase 4a 부터 panel 은 별도 패널 엔진이 아니라 consensus family 내부의 전문가 시뮬레이션 shape 다. Phase 5 (v11) 에 물리 삭제 예정.",
|
|
4
|
+
"triggers": [
|
|
5
|
+
"panel",
|
|
6
|
+
"패널",
|
|
7
|
+
"전문가 토론",
|
|
8
|
+
"expert panel",
|
|
9
|
+
"전문가 패널"
|
|
10
|
+
],
|
|
11
|
+
"argument_hint": "<토론 주제 — tfx-auto 로 passthrough>",
|
|
12
|
+
"deprecated": true,
|
|
13
|
+
"superseded_by": "tfx-auto"
|
|
7
14
|
}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-persist",
|
|
3
|
-
"description": "
|
|
4
|
-
"triggers": [
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
"description": "DEPRECATED — tfx-auto 로 통합됨. `/tfx-auto --retry ralph` 로 리다이렉트. Phase 3 부터 true ralph state machine (unlimited, stuck detector 3회 중단, state file 복원) 이 동작한다. Phase 5 (v11) 에 물리 삭제 예정.",
|
|
4
|
+
"triggers": [
|
|
5
|
+
"ralph",
|
|
6
|
+
"don't stop",
|
|
7
|
+
"끝까지",
|
|
8
|
+
"until done",
|
|
9
|
+
"멈추지 마"
|
|
10
|
+
],
|
|
11
|
+
"argument_hint": "<작업 설명 — tfx-auto 로 passthrough>",
|
|
12
|
+
"deprecated": true,
|
|
13
|
+
"superseded_by": "tfx-auto"
|
|
7
14
|
}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-plan",
|
|
3
|
-
"description": "구현 계획이 필요할 때 사용한다. '계획 세워줘', 'plan', '플랜', '어떻게 구현하지', '태스크 분해', '작업 순서'
|
|
4
|
-
"triggers": [
|
|
5
|
-
|
|
3
|
+
"description": "구현 계획이 필요할 때 사용한다. '계획 세워줘', 'plan', '플랜', '어떻게 구현하지', '태스크 분해', '작업 순서', '합의 계획', 'ralplan', '철저한 계획' 같은 요청에 반드시 사용. 기본값은 3자 합의(Opus+Codex+Gemini) 딥 계획. 빠른 단일 CLI 계획은 --quick 파라미터.",
|
|
4
|
+
"triggers": [
|
|
5
|
+
"plan",
|
|
6
|
+
"계획",
|
|
7
|
+
"플랜",
|
|
8
|
+
"설계",
|
|
9
|
+
"deep plan",
|
|
10
|
+
"합의 계획",
|
|
11
|
+
"consensus plan",
|
|
12
|
+
"deep-plan",
|
|
13
|
+
"ralplan"
|
|
14
|
+
],
|
|
15
|
+
"argument_hint": "<구현할 기능> [--quick]",
|
|
6
16
|
"internal": true
|
|
7
17
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-profile",
|
|
3
3
|
"description": "Codex/Gemini CLI 프로파일·모델 관리 인터랙티브 UI. tfx-route가 사용하는 프로파일 목록 조회, 모델 변경, effort 조정, 추가/삭제를 AskUserQuestion 기반 인터랙티브 선택지로 수행합니다. Use when: codex profile, codex model, gemini profile, gemini model, 프로파일 변경, 모델 변경, effort 변경, codex 설정, gemini 설정, profile manager, 프로파일 관리, 어떤 모델, tfx profile",
|
|
4
|
-
"triggers": [
|
|
4
|
+
"triggers": [
|
|
5
|
+
"tfx-profile"
|
|
6
|
+
],
|
|
5
7
|
"argument_hint": "[--list] [--codex | --gemini]"
|
|
6
8
|
}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-prune",
|
|
3
3
|
"description": "AI가 생성한 불필요한 코드(슬롭)를 제거할 때 사용한다. 'deslop', '슬롭 제거', 'anti-slop', '코드 정리', '불필요한 코드 제거', '과잉 추상화 정리' 같은 요청에 반드시 사용. AI 생성 코드의 중복, 불필요 추상화, 과잉 에러 핸들링을 정리할 때 적극 활용.",
|
|
4
|
-
"triggers": [
|
|
4
|
+
"triggers": [
|
|
5
|
+
"deslop",
|
|
6
|
+
"슬롭 제거",
|
|
7
|
+
"anti-slop",
|
|
8
|
+
"정리",
|
|
9
|
+
"slop"
|
|
10
|
+
],
|
|
5
11
|
"argument_hint": "[파일 경로 또는 git diff 범위]",
|
|
6
12
|
"internal": true
|
|
7
13
|
}
|
|
@@ -3,6 +3,8 @@ name: tfx-psmux-rules
|
|
|
3
3
|
description: >
|
|
4
4
|
legacy alias. Phase 4b부터 psmux 규칙의 source of truth는 skill이 아니라
|
|
5
5
|
.claude/rules/tfx-psmux.md 와 AGENTS.md 의 always-on policy 이다.
|
|
6
|
+
deprecated: true
|
|
7
|
+
superseded-by: .claude/rules/tfx-psmux.md
|
|
6
8
|
triggers:
|
|
7
9
|
- tfx-psmux-rules
|
|
8
10
|
- psmux-rules
|