@kaydash9999/banker-plugins 0.14.0 → 0.15.1

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 (80) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +66 -0
  4. package/README.md +23 -11
  5. package/codex/manifest.json +5 -5
  6. package/codex/transform-matrix.md +5 -5
  7. package/commands/front-qa.md +2 -2
  8. package/commands/setup.md +13 -4
  9. package/hooks/graceful-pause.mjs +222 -0
  10. package/hooks/hooks.json +2 -1
  11. package/hooks/register.mjs +12 -0
  12. package/package.json +4 -1
  13. package/skills/3d-intro-build/SKILL.md +1 -1
  14. package/skills/3d-intro-setup/SKILL.md +1 -1
  15. package/skills/all-in-one/SKILL.md +1 -1
  16. package/skills/append_wiki/SKILL.md +1 -1
  17. package/skills/arch-diagram/SKILL.md +1 -1
  18. package/skills/audit-mock/SKILL.md +1 -1
  19. package/skills/audit-security/SKILL.md +1 -1
  20. package/skills/audit-web-page/SKILL.md +1 -1
  21. package/skills/cleansing-memory/SKILL.md +1 -1
  22. package/skills/compact-copy/SKILL.md +1 -1
  23. package/skills/compact-wiki/SKILL.md +1 -1
  24. package/skills/curation/SKILL.md +1 -1
  25. package/skills/deep-init/SKILL.md +1 -1
  26. package/skills/deep-research/SKILL.md +1 -1
  27. package/skills/docs-setup/SKILL.md +1 -1
  28. package/skills/humanizer/SKILL.md +1 -1
  29. package/skills/interval-report/SKILL.md +1 -1
  30. package/skills/lineage/SKILL.md +152 -16
  31. package/skills/lineage/lineage.py +1210 -108
  32. package/skills/make-notion-guide/SKILL.md +1 -1
  33. package/skills/motion-graphic-make/SKILL.md +1 -1
  34. package/skills/motion-graphic-setup/SKILL.md +1 -1
  35. package/skills/nothing-design/SKILL.md +1 -1
  36. package/skills/obsidizer/SKILL.md +1 -1
  37. package/skills/omc-reference/SKILL.md +1 -1
  38. package/skills/payload-mon/SKILL.md +1 -1
  39. package/skills/pdf-vision-extract/SKILL.md +1 -1
  40. package/skills/play-qa/SKILL.md +1 -1
  41. package/skills/ralph-qa/SKILL.md +304 -112
  42. package/skills/ralph-qa/references/gemini-read-only.toml +9 -0
  43. package/skills/ralph-qa/references/gemini-seat.mjs +207 -0
  44. package/skills/ralph-qa/references/payload-scan.mjs +154 -0
  45. package/skills/ralph-qa/references/verifier-probe.mjs +881 -780
  46. package/skills/ready-compact/SKILL.md +1 -1
  47. package/skills/refresh-git-ignore/SKILL.md +1 -1
  48. package/skills/refresh-readme/SKILL.md +1 -1
  49. package/skills/rfp-author/SKILL.md +1 -1
  50. package/skills/setup-bypass-permissions/SKILL.md +123 -0
  51. package/skills/setup-bypass-permissions/agents/openai.yaml +4 -0
  52. package/skills/setup-bypass-permissions/scripts/bypass-permissions.mjs +381 -0
  53. package/skills/setup-bypass-permissions/scripts/fallback/bypass-permissions.ps1 +247 -0
  54. package/skills/setup-bypass-permissions/scripts/fallback/bypass-permissions.py +241 -0
  55. package/skills/{harness-factory → setup-harness-factory}/SKILL.md +3 -3
  56. package/skills/setup-insane-search/SKILL.md +1 -1
  57. package/skills/setup-java/SKILL.md +1 -1
  58. package/skills/setup-lsp/SKILL.md +1 -1
  59. package/skills/setup-mcp/SKILL.md +1 -1
  60. package/skills/setup-node/SKILL.md +1 -1
  61. package/skills/setup-omc/SKILL.md +1 -1
  62. package/skills/setup-omc-hud/SKILL.md +15 -1
  63. package/skills/setup-omc-hud/scripts/claude-update-last.mjs +247 -0
  64. package/skills/setup-playwright/SKILL.md +1 -1
  65. package/skills/setup-pwsh/SKILL.md +1 -1
  66. package/skills/setup-python/SKILL.md +1 -1
  67. package/skills/setup-sandbox/SKILL.md +1 -1
  68. package/skills/setup-stitch/SKILL.md +1 -1
  69. package/skills/setup-tmux/SKILL.md +1 -1
  70. package/skills/smart-compact/SKILL.md +1 -1
  71. package/skills/summary-wiki/SKILL.md +1 -1
  72. package/skills/tone-compact/SKILL.md +1 -1
  73. package/skills/ultra-init/SKILL.md +1 -1
  74. package/skills/ultra-interview/SKILL.md +1 -1
  75. package/skills/ultra-ui-qa/SKILL.md +1 -1
  76. package/skills/update-banker/SKILL.md +1 -1
  77. package/skills/vertical-pptx/SKILL.md +1 -1
  78. package/skills/vertical-pptx-setup/SKILL.md +1 -1
  79. package/skills/visual-ralph/SKILL.md +1 -1
  80. package/skills/graceful_pause/SKILL.md +0 -95
@@ -0,0 +1,222 @@
1
+ /**
2
+ * /graceful-pause [memo]: ask the running work to finish only its current step, stop,
3
+ * report and wait for instructions, without cutting it off the way Esc does.
4
+ *
5
+ * A skill or plugin command typed while a turn runs waits until the turn ends. This one
6
+ * is registered `immediate`, so it runs at once, mid-turn. It appends one user-role row
7
+ * the person does not see (`$.session.append`); the running turn reads it from its next
8
+ * model request on, that is once the tool call in flight returns.
9
+ *
10
+ * Two ways the note could land wrong are closed here:
11
+ * - typed during the turn's last answer, no later request reads it, and the next
12
+ * prompt's turn would read a stale pause first: when the turn ends unread and no
13
+ * background work is left, a second row voids it;
14
+ * - typed while idle with background work or a scheduled wake-up still pending, the
15
+ * next notification or scheduled prompt would start the next step: the note goes out
16
+ * as a prompt of its own instead, read as the person's (`asUser`), from a timer,
17
+ * since the engine refuses a submission made inside the command's own hook (the
18
+ * submission would wait on the dispatch that hook holds).
19
+ *
20
+ * The background count (tasks in flight plus scheduled wake-ups) is what the last Stop
21
+ * or SubagentStop reported. A turn cut off
22
+ * by Esc reports none, so the count can stay high until the next one: the note's last
23
+ * line covers that, as it tells the model to follow a newer prompt. The module's
24
+ * variables start over when the plugin reloads; a turn already running then reads as
25
+ * idle until the next one starts.
26
+ *
27
+ * Function hooks run inside the engine with no Node and no DOM: everything goes
28
+ * through `$`. `immediate` is checked on Claude Code 2.1.289; an older engine gets no
29
+ * command (it would wait for the turn to end, then answer "nothing to stop"). Codex
30
+ * has no function hooks.
31
+ */
32
+ export const COMMAND = 'graceful-pause';
33
+ export const MIN_ENGINE = [2, 1, 289];
34
+
35
+ const SPEC = {
36
+ name: COMMAND,
37
+ description: '지금 단계만 끝내고 멈춘 뒤 보고하고 지시를 기다림. 작업 중에 입력해도 바로 전달',
38
+ argumentHint: '[멈춘 뒤 다룰 지시나 메모]',
39
+ immediate: true,
40
+ };
41
+
42
+ const IDLE = '진행 중인 작업이 없어 멈출 것이 없습니다. 지시를 바로 입력하면 됩니다.';
43
+ const SENT = '정지 요청을 진행 중인 작업에 전달했습니다. 지금 실행 중인 도구 호출이 끝나면 그 단계까지만 마무리하고 멈춥니다.';
44
+ const AGAIN = '이번 작업에는 정지 요청을 이미 전달했습니다.';
45
+ const QUEUED = '백그라운드 작업이나 예약 실행이 남아 있어, 정지 보고를 받도록 요청을 보냈습니다.';
46
+ const QUEUED_AGAIN = '정지 보고 요청을 이미 보냈습니다.';
47
+ const TOAST = '정지 요청 전달: 지금 단계가 끝나면 멈춤';
48
+ const VOID = '[graceful-pause] 앞의 정지 요청은 작업이 끝난 뒤 도착해 적용되지 않았다. 무시하고 다음 사용자 지시를 따른다.';
49
+
50
+ // What the running turn reads: the whole procedure, since no skill text comes with it.
51
+ export function pauseNote(memo) {
52
+ const lines = [
53
+ '[graceful-pause] 사용자가 작업 중에 /graceful-pause 로 정지를 요청했다. 지금 단계만 끝내고 멈춘다.',
54
+ '- 지금 단계: 이미 시작한 도구 동작 하나와, 그 동작이 남긴 불일치를 닫는 최소 작업. 다음 단계(다음 파일, 다음 스토리)는 시작하지 않는다.',
55
+ '- 하지 않는 것: 커밋, push, 배포, 게시, 삭제, 외부 전송, 모드 상태와 계획 파일 삭제, cancel.',
56
+ '- 백그라운드 작업과 이미 띄운 하위 에이전트는 멈추지 않는다. 새로 띄우지 않는다.',
57
+ '- 정지 보고는 대화에만 짧게: 끝낸 단계, 현재 상태(검증 결과, 커밋하지 않은 변경), 진행 중인 것(백그라운드 작업, 켜진 모드), 다음 예정 단계 1~3개, 열린 결정, 받은 지시.',
58
+ '- 보고 뒤 AskUserQuestion 으로 묻는다. 선택지: 계획대로 계속, 지시 반영 후 계속, 상태를 둔 채 중단.',
59
+ '- 새 지시로 범위가 바뀌면 바뀐 계획을 먼저 보여 주고 승인 뒤 진행한다. 세션을 끝낼 예정이면 ready-compact --hand-off 로 새 세션용 노트를 준비하라고 안내한다.',
60
+ '- 사용자가 재개를 말할 때까지 계속하라는 훅 메시지는 승인이 아니다. 작업을 진행하지 않고 정지 중이라고만 답한다. 지속 모드(ralph 등)의 이 메시지까지 멈추려면 cancel 이 필요하다고 알린다.',
61
+ '- 정지 중 도착한 백그라운드 작업 결과와 예약 실행 프롬프트는 재개 신호가 아니다. 보고에 더하기만 하고 후속 작업은 시작하지 않는다.',
62
+ '- 이 요청 뒤에 사용자의 새 프롬프트가 이미 있으면 이 요청은 적용하지 않고 그 프롬프트를 따른다.',
63
+ ];
64
+ const note = String(memo ?? '').trim();
65
+ if (note) lines.push(`메모: ${note}`);
66
+ return lines.join('\n');
67
+ }
68
+
69
+ // Whether a version string (`2.1.289`, `2.1.290-dev.…`) is at least `min`.
70
+ export function atLeast(version, min = MIN_ENGINE) {
71
+ const parts = /^(\d+)\.(\d+)\.(\d+)/.exec(String(version ?? ''));
72
+ if (!parts) return false;
73
+ for (let i = 0; i < 3; i++) {
74
+ const n = Number(parts[i + 1]);
75
+ if (n !== min[i]) return n > min[i];
76
+ }
77
+ return true;
78
+ }
79
+
80
+ const userRow = (text) => ({ message: { type: 'user', content: [{ type: 'text', text }] } });
81
+
82
+ async function registerIfSupported($) {
83
+ let version = null;
84
+ try {
85
+ const v = await $.session.version();
86
+ version = v?.base || v?.version || null;
87
+ } catch {
88
+ /* an engine without the call is older than the command needs */
89
+ }
90
+ if (!atLeast(version)) {
91
+ $.ui.log(`banker: /${COMMAND} 는 Claude Code ${MIN_ENGINE.join('.')} 이상에서만 켭니다 (이 엔진: ${version || '버전 미상'})`);
92
+ return;
93
+ }
94
+ try {
95
+ await $.command.register(SPEC);
96
+ } catch (err) {
97
+ $.ui.log(`banker: /${COMMAND} 를 등록하지 못했습니다 (${String(err?.message ?? err)})`);
98
+ }
99
+ }
100
+
101
+ // Appends the note to the running turn; the answer the command shows. The note counts
102
+ // as sent before the call returns: a model request starting meanwhile reads the stored
103
+ // row, and a second /graceful-pause meanwhile must not append another.
104
+ async function deliver($, state, memo) {
105
+ if (state.pending?.turnId === state.main) return { text: AGAIN };
106
+ const pending = { turnId: state.main, afterStep: state.step, read: false };
107
+ state.pending = pending;
108
+ let res;
109
+ try {
110
+ res = await $.session.append(userRow(pauseNote(memo)));
111
+ } catch (err) {
112
+ res = { deny: String(err?.message ?? err) };
113
+ }
114
+ if (res?.deny) {
115
+ if (state.pending === pending) state.pending = null;
116
+ return { text: `정지 요청을 전달하지 못했습니다: ${res.deny}` };
117
+ }
118
+ $.ui.toast(TOAST);
119
+ return { text: SENT };
120
+ }
121
+
122
+ // Idle with background work or a scheduled wake-up pending: the note as a prompt of its
123
+ // own, sent from a timer once the command has answered. A hook that drops the prompt
124
+ // resolves `{ drop }` rather than rejecting.
125
+ function queueReport($, state, memo) {
126
+ if (state.queued) return { text: QUEUED_AGAIN };
127
+ state.queued = true;
128
+ const failed = (why) => {
129
+ state.queued = false;
130
+ $.ui.log(`banker: /${COMMAND} 정지 보고 요청을 보내지 못했습니다 (${why})`);
131
+ };
132
+ $.clock.after(1, () => {
133
+ $.prompt.submit({ text: pauseNote(memo), asUser: true }).then(
134
+ (res) => res?.drop && failed(String(res.drop)),
135
+ (err) => failed(String(err?.message ?? err)),
136
+ );
137
+ });
138
+ return { text: QUEUED };
139
+ }
140
+
141
+ // At the main turn's end: a note no later request read is voided unless background
142
+ // work will wake the session (the turn it starts reads the note then).
143
+ async function settlePending($, state) {
144
+ const { pending } = state;
145
+ state.pending = null;
146
+ if (!pending || pending.read || state.background > 0) return;
147
+ try {
148
+ await $.session.append(userRow(VOID));
149
+ } catch {
150
+ /* nothing more to do: the log line below still tells the person */
151
+ }
152
+ $.ui.log('banker: /graceful-pause 요청이 작업 끝에 도착해 적용되지 않았습니다.');
153
+ }
154
+
155
+ // Nothing in flight: the state a fresh session, or one after /clear, starts from.
156
+ const fresh = () => ({ main: null, step: -1, pending: null, background: 0, queued: false });
157
+ const listed = (v) => (Array.isArray(v) ? v.length : 0);
158
+ const backgroundCount = (e) => listed(e.background_tasks) + listed(e.session_crons);
159
+
160
+ export function registerGracefulPause(on) {
161
+ // The main turn in flight and its latest model request; subagent loops raise no
162
+ // turn.start and end with an agentId. `queued`: a report prompt not started yet.
163
+ const state = fresh();
164
+ watchSession(on, state);
165
+ watchTurns(on, state);
166
+
167
+ on('command.run', { command: COMMAND }, async ($, e) => {
168
+ if (state.main) return deliver($, state, e.args);
169
+ if (state.background > 0) return queueReport($, state, e.args);
170
+ return { text: IDLE };
171
+ });
172
+ }
173
+
174
+ // The command's registration, a fresh state after /clear, and the background count the
175
+ // stop events report.
176
+ function watchSession(on, state) {
177
+ on('session.start', async ($, e, next) => {
178
+ await registerIfSupported($);
179
+ return next(e);
180
+ });
181
+
182
+ // `/clear` ends the conversation and raises no session.start for the next one.
183
+ on('session.end', async ($, e, next) => {
184
+ Object.assign(state, fresh());
185
+ return next(e);
186
+ });
187
+
188
+ on('classic.Stop', async ($, e, next) => {
189
+ state.background = backgroundCount(e);
190
+ return next(e);
191
+ });
192
+
193
+ on('classic.SubagentStop', async ($, e, next) => {
194
+ state.background = backgroundCount(e);
195
+ return next(e);
196
+ });
197
+ }
198
+
199
+ // The main turn in flight and the model requests it makes. turn.step wraps every
200
+ // request's stream, subagents' too: in the engine's kit that cost 25 to 45 µs a chunk,
201
+ // well under 1% of a request.
202
+ function watchTurns(on, state) {
203
+ on('turn.start', async ($, e, next) => {
204
+ Object.assign(state, { main: e.turnId, step: -1, queued: false });
205
+ return next(e);
206
+ });
207
+
208
+ on('turn.step', async function* ($, e, next) {
209
+ if (e.turnId === state.main) {
210
+ state.step = e.index;
211
+ if (state.pending?.turnId === e.turnId && e.index > state.pending.afterStep) state.pending.read = true;
212
+ }
213
+ return yield* next(e);
214
+ });
215
+
216
+ on('turn.complete', async ($, e, next) => {
217
+ if (e.agentId || e.turnId !== state.main) return next(e);
218
+ state.main = null;
219
+ await settlePending($, state);
220
+ return next(e);
221
+ });
222
+ }
package/hooks/hooks.json CHANGED
@@ -1,5 +1,6 @@
1
1
  {
2
- "description": "banker hooks: obsidizer wiki canonicalization (PostToolUse, inert until `obsidizer --enable`) + anonymous usage counting (PostToolUse Skill / UserPromptExpansion, count-default-on, opt-out BANKER_NO_TELEMETRY, no-op without endpoint) + update-check notification (SessionStart, opt-out BANKER_NO_UPDATE_CHECK).",
2
+ "description": "banker hooks: obsidizer wiki canonicalization (PostToolUse, inert until `obsidizer --enable`) + anonymous usage counting (PostToolUse Skill / UserPromptExpansion, count-default-on, opt-out BANKER_NO_TELEMETRY, no-op without endpoint) + update-check notification (SessionStart, opt-out BANKER_NO_UPDATE_CHECK). modules: function hooks (Claude Code 2.1.289+) serving /graceful-pause, which runs at once even mid-turn.",
3
+ "modules": ["./register.mjs"],
3
4
  "hooks": {
4
5
  "PostToolUse": [
5
6
  {
@@ -0,0 +1,12 @@
1
+ /**
2
+ * banker's function-hooks module: the one file hooks/hooks.json names under
3
+ * `modules`. Claude Code loads it beside the classic hooks in the same file;
4
+ * builds without function hooks, and Codex, leave it alone.
5
+ *
6
+ * Each feature registers its own hooks; this file only gathers them.
7
+ */
8
+ import { registerGracefulPause } from './graceful-pause.mjs';
9
+
10
+ export const register = (on) => {
11
+ registerGracefulPause(on);
12
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaydash9999/banker-plugins",
3
- "version": "0.14.0",
3
+ "version": "0.15.1",
4
4
  "description": "banker — Claude Code + Codex CLI plugin (QA, audit, docs, architecture, wiki skills). Install via Claude Code marketplace, or `npm i -g @kaydash9999/banker-plugins` then `banker setup`.",
5
5
  "bin": {
6
6
  "banker": "bin/banker.js"
@@ -15,10 +15,13 @@
15
15
  "!skills/ultra-init-workspace/**",
16
16
  "commands",
17
17
  ".claude-plugin",
18
+ "!.claude-plugin/types",
19
+ "!.claude-plugin/types/**",
18
20
  "codex",
19
21
  "hooks",
20
22
  "bin",
21
23
  "!**/*.test.mjs",
24
+ "!**/*.test.ts",
22
25
  "!**/test_*.py",
23
26
  "!**/__pycache__",
24
27
  "!**/__pycache__/**",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: 3d-intro-build
3
- description: "(banker) 브랜드 인트로용 스크롤-스크럽 3D fly-through 사이트를 Azure(gpt-image-2 스틸 + Sora-2 forward-chaining)로 제작: 인터뷰 → 비용 승인 게이트 → 스틸 → fly-through → 로컬 프리뷰. '3d-intro-build'/'3D 인트로'/'스크롤 fly-through'/'인트로 영상 사이트' 시 사용."
3
+ description: "스크롤 위치에 맞춰 3D 플라이스루 영상이 움직이는 브랜드 인트로 사이트를 만듦. Azure 의 gpt-image-2 로 스틸을, Sora-2 로 영상을 생성. 인터뷰 뒤에 비용 승인 게이트에서 사용자가 승인해야만 유료 생성을 시작하고, 스틸, 영상, 로컬 프리뷰 순서로 진행. '3d-intro-build'/'3D 인트로'/'스크롤 fly-through'/'인트로 영상 사이트' 시 사용."
4
4
  ---
5
5
 
6
6
  # 3d-intro-build — 스크롤-스크럽 3D 인트로 제작 (Azure 파이프라인)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: 3d-intro-setup
3
- description: "(banker) Azure Sora-2/gpt-image-2 3D 인트로 제작용 크레덴셜·의존성 설치: Node≥18·ffmpeg 확보 + apikey/엔드포인트/배포명 직접입력 또는 콘솔 샘플 코드 붙여넣기로 크레덴셜 저장 + 무과금 프리플라이트(listVideos·images badreq)로 검증. 'setup-3d-intro'/'3d-intro-setup'/'3D 인트로 설정'/'Azure Sora 크레덴셜' 또는 /banker:setup 시 사용."
3
+ description: "`3d-intro-build` 에 필요한 Node 18 이상과 ffmpeg 를 갖추고 Azure 크레덴셜을 저장함. 크레덴셜은 직접 입력하거나 Azure 콘솔의 샘플 코드를 붙여 넣어 받고, 무과금 프리플라이트로 확인. 'setup-3d-intro'/'3d-intro-setup'/'3D 인트로 설정'/'Azure Sora 크레덴셜' 또는 `/banker:setup` 시 사용."
4
4
  ---
5
5
 
6
6
  # 3d-intro-setup — Azure Sora-2 / gpt-image-2 3D 인트로 제작 전제조건 설치
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: all-in-one
3
- description: "(banker) 한 명령으로 합의 계획→검증 구현→독립 QA 게이트를 연쇄(ralplan→ralph→QA 게이트: Claude Code는 verify 순환, Codex는 ultraqa). 코딩 작업을 계획부터 통과까지 최대 rigor로 한 번에. 'all-in-one'/'all in one' 시 사용(한 줄 수정은 ralph, 아이디어 확장은 autopilot)."
3
+ description: "코딩 작업을 한 명령으로 계획부터 QA 통과까지 엄격하게 진행. `ralplan` 으로 합의 계획, `ralph` 로 검증 구현을 하고 독립 QA 게이트(Claude Code 는 `verify` 순환, Codex 는 `ultraqa`)로 마무리. 'all-in-one'/'all in one' 시 사용. 한 줄 수정은 이 스킬 대신 `ralph`, 아이디어 확장은 `autopilot`."
4
4
  argument-hint: "[--short] [--checkpoint] [--critic=critic|architect|codex] [--qa=tests|build|lint|typecheck] [--no-deslop] <task description>"
5
5
  level: 4
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: append_wiki
3
- description: "(banker) 새로 배운 비자명 지식을 .omc/wiki에 구조화 적재·병합. 'append_wiki'/'위키 기록'/'wiki에 정리'/'알게 된 내용 기록' 시 사용."
3
+ description: "새로 알게 된 비자명한 지식을 `.omc/wiki` 에 구조화해 넣고 기존 페이지와 병합. 'append_wiki'/'위키 기록'/'wiki에 정리'/'알게 된 내용 기록' 시 사용."
4
4
  ---
5
5
 
6
6
  # append_wiki — 작업 지식을 wiki에 적재
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: arch-diagram
3
- description: "(banker) 시스템 아키텍처 구성도를 PlantUML과 편집 가능 PPTX로 산출. '아키텍처 다이어그램'/'plantuml'/'pptx 다이어그램'/'구성도' 시 사용."
3
+ description: "시스템 아키텍처 구성도를 PlantUML과 편집 가능 PPTX로 산출. '아키텍처 다이어그램'/'plantuml'/'pptx 다이어그램'/'구성도' 시 사용."
4
4
  ---
5
5
 
6
6
  # arch-diagram — PlantUML + PPTX 아키텍처 다이어그램 산출
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: audit-mock
3
- description: "(banker) 하드코딩·mock/stub·열거형을 read-only 정적 감사로 검출. 'audit-mock'/'하드코딩 검출'/'mock·stub 감사'/'SQL 없이 하드코딩 반환' 시 사용."
3
+ description: "하드코딩된 값, mock, stub, 열거형을 정적 감사로 검출. 코드는 읽기만 함. 'audit-mock'/'하드코딩 검출'/'mock 감사'/'stub 감사'/'SQL 없이 하드코딩 반환' 시 사용."
4
4
  ---
5
5
 
6
6
  # audit-mock — 하드코딩 / mock·stub / 열거형 read-only 정적 감사
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: audit-security
3
- description: "(banker) 의존성 CVE(SCA)·SAST·시크릿을 멀티툴 교차검증으로 read-only 보안 진단. 'audit-security'/'보안 진단'/'CVE 스캔'/'SCA·SAST·secret 스캔' 시 사용."
3
+ description: "의존성 CVE(SCA), 코드 정적 분석(SAST), 시크릿 노출을 여러 도구로 교차 검증해 보안을 진단. 코드는 읽기만 함. 'audit-security'/'보안 진단'/'CVE 스캔'/'SCA 스캔'/'SAST 스캔'/'secret 스캔' 시 사용."
4
4
  ---
5
5
 
6
6
  # audit-security — CVE / SAST / Secrets read-only 보안 진단 (no-root)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: audit-web-page
3
- description: "(banker) 가동 중 웹페이지를 playwright로 라이브 점검(버튼·DOM·콘솔 + WebGL/Canvas 스크린샷 판정). 'audit-web-page'/'라이브 웹 검증'/'playwright로 페이지 점검'/'캔버스·WebGL 렌더 확인' 시 사용."
3
+ description: "가동 중인 웹 페이지를 Playwright 로 열어 버튼, DOM, 콘솔을 라이브 점검하고, WebGL 과 Canvas 는 스크린샷으로 판정. 'audit-web-page'/'라이브 웹 검증'/'playwright로 페이지 점검'/'캔버스 렌더 확인'/'WebGL 렌더 확인' 시 사용."
4
4
  ---
5
5
 
6
6
  # audit-web-page — 라이브 웹 페이지 점검 (playwright)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: cleansing-memory
3
- description: "(banker) 에이전트 메모리 파일(MEMORY.md·CLAUDE.md·AGENTS.md)을 문서화된 threshold 안으로 정리: 중복 최신본화, 무손실 간결화, append→replace 판별. 'cleansing-memory'/'메모리 정리'/'MEMORY.md 정리'/'CLAUDE.md 압축'/'AGENTS.md 용량' 시 사용."
3
+ description: "에이전트 메모리 파일(`MEMORY.md`, `CLAUDE.md`, `AGENTS.md`)을 문서화된 기준치 안으로 정리. 중복은 최신본만 남기고, 무손실로 압축하고, 덧붙이지 말고 바꿔 써야 할 정보를 가려냄. 'cleansing-memory'/'메모리 정리'/'MEMORY.md 정리'/'CLAUDE.md 압축'/'AGENTS.md 용량' 시 사용."
4
4
  ---
5
5
 
6
6
  # cleansing-memory: 메모리 파일 정리 (중복 최신본화·무손실 압축·replace 판별)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: compact-copy
3
- description: "(banker) 코드펜스로 감싼 resume 프롬프트(이전 형식 ready-compact 출력 등)에서 본문만 뽑아 최종 메시지를 '프롬프트-only'로 출력(response.md 기록 → /copy로 클립보드에 담김). 지금의 ready-compact 는 처음부터 프롬프트만 출력하므로 보통은 필요 없음. 'compact-copy'/'프롬프트만 복사'/'resume 프롬프트만' 시 사용."
3
+ description: "코드펜스로 감싼 resume 프롬프트에서 본문만 뽑아 최종 메시지로 출력. `/copy` 한 번으로 클립보드에 담김. 지금의 `ready-compact` 는 처음부터 프롬프트만 출력하므로 보통은 필요 없음. 'compact-copy'/'프롬프트만 복사'/'resume 프롬프트만' 시 사용."
4
4
  ---
5
5
 
6
6
  # compact-copy — resume 프롬프트만 추출 복사
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: compact-wiki
3
- description: "(banker) .omc/wiki 페이지를 무손실로 중복 제거·supersede·병합 정리. 'compact-wiki'/'위키 정리·압축'/'wiki 중복 제거'/'위키 병합' 시 사용."
3
+ description: "`.omc/wiki` 페이지를 무손실로 정리. 중복은 지우고, 낡은 내용은 새 내용으로 대체하고, 겹치는 페이지는 병합. 'compact-wiki'/'위키 정리'/'위키 압축'/'wiki 중복 제거'/'위키 병합' 시 사용."
4
4
  ---
5
5
 
6
6
  # compact-wiki — wiki 정리·압축 (무손실)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: curation
3
- description: "(banker) 의사결정을 {선택지·권고안·근거·확신수준(0.00~1.00)·확신근거}로 구조화해 제시. --perf는 결과물 품질·완성도를 효율보다 우선. --deep은 --perf에 더해 확신 0.80 이하 결정을 추가 조사·검토해 0.80 초과로 끌어올린 뒤 제시(끝내 못 넘으면 확신 미달로 표시하고 사용자 질문으로 전환). 'curation'/'큐레이션'/'결정 정리'/'선택지 정리' 시 사용."
3
+ description: "의사결정을 선택지, 권고안, 근거, 확신 수준(0.00~1.00), 확신 근거로 정리해 제시. `--perf` 는 효율보다 결과물의 품질과 완성도를 우선. `--deep` 은 `--perf` 에 더해 확신 0.80 이하인 결정을 더 조사하고 검토해 0.80 을 넘긴 뒤 제시. 끝내 못 넘으면 확신 미달로 표시하고 사용자에게 물음. 'curation'/'큐레이션'/'결정 정리'/'선택지 정리' 시 사용."
4
4
  ---
5
5
 
6
6
  # curation — 결정 큐레이션 (선택지·권고·확신)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: deep-init
3
- description: "(banker) 코드베이스 전체에 계층형 AGENTS.md 문서를 생성·갱신(부모 역참조·MANUAL 섹션 보존). 'deep-init'/'deepinit'/'AGENTS.md 생성'/'코드베이스 문서화' 시 사용."
3
+ description: "코드베이스 전체에 계층형 `AGENTS.md` 문서를 만들거나 갱신. 상위 문서 참조와 `MANUAL` 섹션은 보존. 'deep-init'/'deepinit'/'AGENTS.md 생성'/'코드베이스 문서화' 시 사용."
4
4
  ---
5
5
 
6
6
  # deep-init — 계층형 AGENTS.md 초기화
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: deep-research
3
- description: "(banker) 다중 소스 웹 리서치를 팬아웃해 주장을 적대적으로 팩트체크하고 확신순 인용 리포트로 합성. 'deep-research'/'딥리서치'/'심층 조사'/'출처 검증 리서치' 시 사용."
3
+ description: "여러 출처를 병렬로 웹 리서치해 주장을 적대적으로 팩트체크하고, 확신 순으로 인용한 리포트로 합성. 'deep-research'/'딥리서치'/'심층 조사'/'출처 검증 리서치' 시 사용."
4
4
  ---
5
5
 
6
6
  # deep-research — 팬아웃 + 적대적 검증 리서치
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: docs-setup
3
- description: "(banker) arch-diagram·pdf-vision-extract 의존성(python-pptx·pymupdf·plantuml)을 python 환경 감지/선택 후 설치. 'docs-setup'/'문서 툴 설치'/'pptx·pymupdf·plantuml 설치' 또는 /banker:setup 시 사용."
3
+ description: "`arch-diagram` 과 `pdf-vision-extract` 의 의존성(python-pptx, pymupdf, plantuml)을 설치. Python 환경을 감지하거나 고른 뒤 그 환경에 설치. 'docs-setup'/'문서 툴 설치'/'pptx 설치'/'pymupdf 설치'/'plantuml 설치' 또는 `/banker:setup` 시 사용."
4
4
  ---
5
5
 
6
6
  # docs-setup — 문서 생성 툴 설치 (python-pptx·pymupdf·plantuml)
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: humanizer
3
3
  version: 2.8.0
4
- description: "(banker) AI가 쓴 듯한 영문 글의 흔적을 제거해 자연스러운 문체로 윤문. 'humanizer'/'remove AI writing'/'sound more human'/'natural' 시 사용."
4
+ description: "AI가 쓴 듯한 영문 글의 흔적을 제거해 자연스러운 문체로 윤문. 'humanizer'/'remove AI writing'/'sound more human'/'natural' 시 사용."
5
5
  license: MIT
6
6
  compatibility: claude-code opencode
7
7
  allowed-tools:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: interval-report
3
- description: "(banker) 장기 수행의 중간 보고를 docs/intermission.md 로 만들고 계획된 작업이 끝날 때까지 갱신. 시작 시각은 date 로 실측해 파일에 영속하고, ETA 는 단일 숫자 대신 범위+확신 라벨로 낸다. 'interval-report'/'중간 보고'/'진행 상황 보고'/'intermission' 시 사용."
3
+ description: "오래 걸리는 작업의 중간 보고를 `docs/intermission.md` 로 만들고 계획한 작업이 끝날 때까지 갱신. 시작 시각은 `date` 로 재서 파일에 남기고, ETA 는 단일 숫자 대신 범위와 확신 라벨로 냄. 'interval-report'/'중간 보고'/'진행 상황 보고'/'intermission' 시 사용."
4
4
  ---
5
5
 
6
6
  # interval-report: 장기 수행 중간 보고 (docs/intermission.md)