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.
Files changed (71) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.ko.md +34 -42
  4. package/README.md +30 -36
  5. package/bin/triflux.mjs +13 -4
  6. package/hooks/hook-orchestrator.mjs +1 -1
  7. package/hooks/hook-registry.json +76 -2
  8. package/hooks/hooks.json +49 -1
  9. package/hooks/permission-safe-allow.mjs +233 -0
  10. package/hooks/pipeline-stop.mjs +355 -16
  11. package/hooks/post-tool-tips.mjs +306 -0
  12. package/hooks/pre-compact-snapshot.mjs +181 -0
  13. package/hooks/session-end-cleanup.mjs +201 -0
  14. package/hooks/subagent-tracker.mjs +267 -0
  15. package/hooks/subagent-verifier.mjs +4 -0
  16. package/hub/account-broker.mjs +297 -8
  17. package/hub/codex-adapter.mjs +62 -2
  18. package/hub/server.mjs +51 -4
  19. package/hub/team/cli/services/native-control.mjs +1 -0
  20. package/hub/team/conductor.mjs +94 -29
  21. package/hub/team/native-supervisor.mjs +20 -7
  22. package/hub/team/swarm-cli.mjs +98 -4
  23. package/hub/team/swarm-hypervisor.mjs +112 -10
  24. package/hub/team/swarm-locks.mjs +7 -2
  25. package/hub/team/swarm-preflight.mjs +317 -0
  26. package/hub/team/synapse-cli.mjs +243 -6
  27. package/hub/team/worker-sandbox.mjs +93 -0
  28. package/hub/team/worktree-lifecycle.mjs +49 -8
  29. package/hub/workers/delegator-mcp.mjs +14 -1
  30. package/package.json +1 -1
  31. package/scripts/__tests__/gen-skill-docs.test.mjs +4 -0
  32. package/scripts/__tests__/skill-surface.test.mjs +61 -0
  33. package/scripts/gen-skill-manifest.mjs +3 -0
  34. package/scripts/lib/skill-template.mjs +2 -0
  35. package/scripts/session-stale-cleanup.mjs +111 -2
  36. package/skills/star-prompt/skill.json +1 -1
  37. package/skills/tfx-analysis/skill.json +11 -3
  38. package/skills/tfx-auto/skill.json +2 -2
  39. package/skills/tfx-autopilot/skill.json +9 -4
  40. package/skills/tfx-consensus/skill.json +4 -3
  41. package/skills/tfx-debate/skill.json +11 -4
  42. package/skills/tfx-doctor/skill.json +3 -1
  43. package/skills/tfx-fullcycle/skill.json +10 -4
  44. package/skills/tfx-hooks/skill.json +3 -1
  45. package/skills/tfx-hub/skill.json +5 -3
  46. package/skills/tfx-index/skill.json +6 -1
  47. package/skills/tfx-interview/skill.json +6 -1
  48. package/skills/tfx-multi/skill.json +7 -3
  49. package/skills/tfx-panel/skill.json +11 -4
  50. package/skills/tfx-persist/skill.json +11 -4
  51. package/skills/tfx-plan/skill.json +13 -3
  52. package/skills/tfx-profile/skill.json +3 -1
  53. package/skills/tfx-prune/skill.json +7 -1
  54. package/skills/tfx-psmux-rules/SKILL.md +2 -0
  55. package/skills/tfx-psmux-rules/SKILL.md.tmpl +22 -307
  56. package/skills/tfx-psmux-rules/skill.json +7 -2
  57. package/skills/tfx-qa/skill.json +12 -3
  58. package/skills/tfx-ralph/skill.json +4 -1
  59. package/skills/tfx-remote/skill.json +8 -0
  60. package/skills/tfx-remote-setup/SKILL.md +2 -0
  61. package/skills/tfx-remote-setup/SKILL.md.tmpl +23 -570
  62. package/skills/tfx-remote-setup/skill.json +7 -3
  63. package/skills/tfx-remote-spawn/SKILL.md +2 -0
  64. package/skills/tfx-remote-spawn/SKILL.md.tmpl +31 -242
  65. package/skills/tfx-remote-spawn/skill.json +7 -3
  66. package/skills/tfx-research/skill.json +11 -4
  67. package/skills/tfx-review/skill.json +12 -3
  68. package/skills/tfx-setup/skill.json +3 -1
  69. package/skills/tfx-ship/skill.json +13 -0
  70. package/skills/tfx-swarm/skill.json +13 -0
  71. 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 스타 요청 프롬프트를 추가한다. gh CLI 인증 확인 → 이미 스타 여부 감지 → 인터랙티브 confirm → gh API로 자동 스타. Apple 스타일 UX 카피 포함. 'star prompt', '스타 요청', '리포 스타', 'star request', '깃헙 스타 넣어줘', 'star 눌러달라고', '응원 요청' 같은 요청에 사용한다."
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": ["코드 분석", "code analysis", "아키텍처 분석", "analysis"],
5
- "argument_hint": "<분석 대상 — 파일, 디렉토리, 또는 주제>",
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 오케스트레이터. 커맨드 숏컷(단일) + 자동 분류/분해(병렬) + 수동 병렬. tfx-route.sh 기반. '코드 짜줘', '구현해줘', '만들어줘', '수정해줘', '고쳐줘', 'implement', 'build', 'fix' 같은 구현/수정 요청에 사용. 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": "단일 파일/모듈 수준의 간단한 작업을 자율 구현할 사용한다. 구현+검증까지 5분 이내 완료 가능한 작업, '간단히', '빠르게', '하나만', '자동으로', '알아서 해', '그냥 해줘' 같은 수식어가 있을 사용. 복잡한 멀티파일 작업은 tfx-fullcycle을 사용하세요.",
4
- "triggers": ["autopilot", "자동", "알아서 해"],
5
- "argument_hint": "<구현할 작업 설명>",
6
- "internal": true
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자 합의 엔진 모든 Deep 스킬의 핵심 인프라. Claude/Codex/Gemini 독립 분석 결과를 교차검증하여 편향 없는 합의를 도출한다. 독립 실행도 가능: '합의로 분석해', '3자 합의', 'consensus' 같은 요청 직접 호출 가능.",
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": "<분석 주제 또는 컨텍스트> (Deep 스킬 내부 자동 호출 또는 직접 사용 가능)",
6
- "internal": true
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": "기술 선택, 아키텍처 비교, 설계 결정에서 3-CLI 구조화 토론으로 최적 답을 도출한다. 'A vs B', '뭐가 나을까', '비교해줘', '어떤 쓸까', '장단점', 'tradeoff' 같은 비교/선택 요청에 반드시 사용한다. 단순 질문이 아닌 여러 옵션 사이의 결정이 필요할 때 적극 활용.",
4
- "triggers": ["debate", "토론", "3자 토론", "tri-debate", "멀티모델 토론"],
5
- "argument_hint": "<토론 주제 또는 질문>",
6
- "internal": true
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": ["tfx-doctor"],
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": "여러 파일/모듈에 걸친 복잡한 기능을 처음부터 끝까지 자율 개발할 사용한다. 설계→계획→구현→QA→검증 전체 파이프라인이 필요한 작업, '처음부터 끝까지', '전체', '완전히', '풀 오토', 'full auto', '전체 파이프라인으로' 같은 수식어가 있을 때 사용. 단순 단일 작업은 tfx-autopilot이 더 빠릅니다.",
4
- "triggers": ["deep autopilot", "풀 오토", "처음부터 끝까지", "full auto"],
5
- "argument_hint": "<구현할 기능 전체 설명>",
6
- "internal": true
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": ["tfx-hooks"],
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 메시지 버스 관리. AskUserQuestion 기반 인터랙티브 UI로 허브 시작/중지/상태확인, MCP 서버 관리, 에이전트 조회, 파이프라인 조회를 수행합니다. Use when: hub, 허브, 메시지 버스, message bus, 브릿지, bridge, MCP 서버 관리, 에이전트 통신",
4
- "triggers": ["tfx-hub"],
5
- "argument_hint": "<start|stop|status|mcp|자유형 작업 설명>"
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": ["인덱싱", "프로젝트 인덱스", "인덱스", "tfx-index"],
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": "멀티-CLI 모드. Claude Native Agent Teams + Codex/Gemini 멀티모델 오케스트레이션. '멀티로', '팀 모드', '다중 CLI', '3개 동원', 'multi' 같은 요청에 반드시 사용. Claude+Codex+Gemini 협업이 필요한 모든 상황에 적극 활용.",
4
- "triggers": ["tfx-multi"],
5
- "argument_hint": "\"작업 설명\" | --agents codex,gemini \"작업\" | --tmux \"작업\" | status | stop"
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": "여러 전문가의 의견이 필요한 복잡한 결정에 사용한다. 'panel', '패널', '전문가 의견', 'expert panel', '다양한 관점', '전문가한테 물어봐' 같은 요청에 반드시 사용. 아키텍처, 보안, 비즈니스 전략 전문가 시뮬레이션이 필요할 적극 활용.",
4
- "triggers": ["panel", "패널", "전문가 토론", "expert panel", "전문가 패널"],
5
- "argument_hint": "<토론 주제>",
6
- "internal": true
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": "작업이 완전히 끝날 때까지 멈추지 않고 반복 실행해야 사용한다. 'ralph', '끝까지 해', '멈추지 마', 'don't stop', '완료될 때까지', '다 때까지 계속' 같은 요청에 반드시 사용. 여러 기준을 모두 충족해야 하는 복잡한 구현 작업에 적극 활용.",
4
- "triggers": ["ralph", "don't stop", "끝까지", "until done", "멈추지 마"],
5
- "argument_hint": "<완료할 작업 설명>",
6
- "internal": true
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', '플랜', '어떻게 구현하지', '태스크 분해', '작업 순서' 같은 요청에 반드시 사용. 기능 구현 전 영향 범위 파악과 태스크 분해가 필요할 때 적극 활용. 작업 분해, 순서 정리, '어떤 순서로', '먼저 뭐 해야', 'breakdown', 'decompose', 'task list' 같은 요청에도 적극 활용. 단순 계획은 이 스킬, 3자 합의 계획은 tfx-deep-plan을 사용.",
4
- "triggers": ["plan", "계획", "플랜", "설계"],
5
- "argument_hint": "<구현할 기능 설명>",
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": ["tfx-profile"],
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": ["deslop", "슬롭 제거", "anti-slop", "정리", "slop"],
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