ai-ops-cli 0.2.6 → 1.0.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 (69) hide show
  1. package/README.ko.md +195 -0
  2. package/README.md +126 -155
  3. package/data/context-layer/AGENTS.md +30 -0
  4. package/data/context-layer/CLAUDE.md +14 -0
  5. package/data/context-layer/GEMINI.md +14 -0
  6. package/data/context-layer/docs/agent/checks/impact-checklist.md +16 -0
  7. package/data/context-layer/docs/agent/checks/review-checklist.md +17 -0
  8. package/data/context-layer/docs/agent/maps/codebase-map.md +16 -0
  9. package/data/context-layer/docs/agent/rules/00-agent-baseline.md +47 -0
  10. package/data/context-layer/docs/agent/rules/doc-update-rules.md +22 -0
  11. package/data/context-layer/docs/agent/rules/routing-rules.md +22 -0
  12. package/data/context-layer/docs/agent/rules/stop-rules.md +20 -0
  13. package/data/context-layer/docs/agent/workflow.md +25 -0
  14. package/data/context-layer/docs/business/business-rules.md +16 -0
  15. package/data/context-layer/docs/docs-status.md +14 -0
  16. package/data/packs/pack-registry.json +8 -0
  17. package/data/packs/spec-lifecycle/docs/specs/README.ko.md +28 -0
  18. package/data/packs/spec-lifecycle/docs/specs/README.md +28 -0
  19. package/data/packs/spec-lifecycle/docs/specs/baseline/.gitkeep +1 -0
  20. package/data/packs/spec-lifecycle/docs/specs/initial-build/.gitkeep +1 -0
  21. package/data/skills/README.ko.md +184 -0
  22. package/data/skills/README.md +29 -2
  23. package/data/skills/skill-registry.json +64 -16
  24. package/data/skills/task-skills/doc-impact-reviewer/SKILL.md +101 -0
  25. package/data/skills/task-skills/doc-impact-reviewer/agents/openai.yaml +6 -0
  26. package/data/skills/task-skills/spec-baseline-sync/SKILL.md +134 -0
  27. package/data/skills/task-skills/spec-baseline-sync/agents/openai.yaml +6 -0
  28. package/data/skills/task-skills/spec-baseline-sync/references/template.md +14 -0
  29. package/data/skills/task-skills/spec-product-01-idea-to-brief/SKILL.md +78 -0
  30. package/data/skills/task-skills/spec-product-01-idea-to-brief/agents/openai.yaml +6 -0
  31. package/data/skills/task-skills/spec-product-01-idea-to-brief/references/template.md +36 -0
  32. package/data/skills/task-skills/spec-product-02-brief-to-technical-context/SKILL.md +91 -0
  33. package/data/skills/task-skills/spec-product-02-brief-to-technical-context/agents/openai.yaml +6 -0
  34. package/data/skills/task-skills/spec-product-02-brief-to-technical-context/references/template.md +58 -0
  35. package/data/skills/task-skills/spec-product-03-brief-to-product-spec/SKILL.md +85 -0
  36. package/data/skills/task-skills/spec-product-03-brief-to-product-spec/agents/openai.yaml +6 -0
  37. package/data/skills/task-skills/spec-product-03-brief-to-product-spec/references/template.md +41 -0
  38. package/data/skills/task-skills/spec-product-04-product-spec-to-ui-spec/SKILL.md +93 -0
  39. package/data/skills/task-skills/spec-product-04-product-spec-to-ui-spec/agents/openai.yaml +6 -0
  40. package/data/skills/task-skills/spec-product-04-product-spec-to-ui-spec/references/stitch-prompt-template.md +41 -0
  41. package/data/skills/task-skills/spec-product-04-product-spec-to-ui-spec/references/ui-spec-template.md +39 -0
  42. package/data/skills/task-skills/spec-product-05-spec-to-work-packets/SKILL.md +157 -0
  43. package/data/skills/task-skills/spec-product-05-spec-to-work-packets/agents/openai.yaml +6 -0
  44. package/data/skills/task-skills/spec-product-05-spec-to-work-packets/references/stitch-html-review.md +25 -0
  45. package/data/skills/task-skills/spec-product-05-spec-to-work-packets/references/work-packet-template.md +67 -0
  46. package/data/skills/task-skills/spec-shared-glossary-sync/SKILL.md +102 -0
  47. package/data/skills/task-skills/spec-shared-glossary-sync/agents/openai.yaml +6 -0
  48. package/data/skills/task-skills/spec-shared-glossary-sync/references/checklist.md +36 -0
  49. package/data/skills/task-skills/spec-shared-glossary-sync/references/template.md +58 -0
  50. package/data/subagents/README.ko.md +49 -0
  51. package/data/subagents/README.md +49 -0
  52. package/data/subagents/security-gate/PROMPT.md +18 -0
  53. package/data/subagents/security-gate/claude.frontmatter.yaml +8 -0
  54. package/data/subagents/security-gate/codex.frontmatter.toml +6 -0
  55. package/data/subagents/security-gate/gemini.frontmatter.yaml +6 -0
  56. package/data/subagents/security-reviewer/PROMPT.md +17 -0
  57. package/data/subagents/security-reviewer/claude.frontmatter.yaml +9 -0
  58. package/data/subagents/security-reviewer/codex.frontmatter.toml +6 -0
  59. package/data/subagents/security-reviewer/gemini.frontmatter.yaml +6 -0
  60. package/data/subagents/subagent-registry.json +14 -0
  61. package/dist/bin/index.js +2103 -1713
  62. package/dist/bin/index.js.map +1 -1
  63. package/package.json +2 -2
  64. package/data/presets.yaml +0 -35
  65. package/data/rules/code-philosophy.yaml +0 -35
  66. package/data/rules/communication.yaml +0 -12
  67. package/data/rules/naming-convention.yaml +0 -10
  68. package/data/rules/plan-mode.yaml +0 -32
  69. package/data/rules/role-persona.yaml +0 -14
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: spec-shared-glossary-sync
3
+ description: Create or update a Korean 01_glossary.md inside the current project's docs/specs/baseline directory by standardizing domain terms, entities, states, UI labels, and English code-facing names across baseline docs and active .codex/plans.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # spec-shared-glossary-sync
8
+
9
+ Use this skill when the project needs a shared glossary or when existing docs/specs/plans have begun to drift in terminology.
10
+
11
+ Typical high-value run points are:
12
+
13
+ - after `brief`
14
+ - after `product spec`
15
+ - after `ui spec`
16
+ - during `spec-baseline-sync` if implemented terminology changed
17
+ - whenever naming drift is noticed
18
+
19
+ Usually skip automatic reruns after small plans unless new shared terminology was introduced.
20
+
21
+ ## Output Location
22
+
23
+ - Write into the current workspace.
24
+ - Default output path: `./docs/specs/baseline/01_glossary.md`
25
+
26
+ ## Language Rules
27
+
28
+ - Write the glossary in Korean.
29
+ - Keep code-facing English identifiers, API field names, library/service names, protocol names, file paths, and standard technical terms in their natural English form when clearer.
30
+ - Do not invent awkward Koreanized spellings for standard English technical terms.
31
+ - If a term needs explanation, keep the standard term and add a short Korean definition.
32
+
33
+ ## Objective
34
+
35
+ Maintain one canonical vocabulary so briefs, specs, UI docs, plans, packets, and baseline sync entries use the same terms for the same concepts.
36
+
37
+ The default output style is:
38
+
39
+ - tables first for fast scanning
40
+ - detailed subsections only for genuinely complex concepts
41
+ - diagrams only when relationships or state vocabularies are hard to understand in prose
42
+
43
+ ## Create Or Update Rules
44
+
45
+ - If `./docs/specs/baseline/01_glossary.md` does not exist, create it from currently approved specs and relevant active plans.
46
+ - If it exists, update it instead of replacing it blindly.
47
+ - Preserve stable canonical terms unless there is a strong reason to change them.
48
+ - If a newly found term conflicts with an existing definition, keep the current canonical term and record the conflict in `정의 충돌 / 검토 필요`.
49
+ - Normalize synonyms toward one preferred term.
50
+ - Prefer Korean for user-facing/domain wording, but keep standard English when clearer, more stable, or already established in the project.
51
+
52
+ ## Recommended Inputs
53
+
54
+ Read relevant files that exist:
55
+
56
+ - `./docs/specs/baseline/00_brief.md`
57
+ - `./docs/specs/baseline/05_technical-context.md`
58
+ - `./docs/specs/baseline/10_product-spec.md`
59
+ - `./docs/specs/baseline/20_ui-spec.md`
60
+ - active `./.codex/plans/*.md` when terminology from a current change needs to become canonical
61
+ - `./docs/specs/initial-build/<topic>/30_work-packets/*.md` when reviewing initial build terminology
62
+ - existing `./docs/specs/baseline/01_glossary.md`
63
+
64
+ Use only files that are present and relevant.
65
+
66
+ ## Workflow
67
+
68
+ 1. Identify repeated nouns, states, and labels across available docs.
69
+ 2. Separate true domain concepts from incidental wording.
70
+ 3. Choose one canonical project term per concept.
71
+ 4. Attach English code-facing counterpart when needed.
72
+ 5. Capture harmless synonyms only when useful.
73
+ 6. List discouraged or banned wording when ambiguity is likely.
74
+ 7. Write most glossary content as tables.
75
+ 8. Move only hard cases into detailed sections.
76
+ 9. Update the glossary without deleting still-valid prior decisions.
77
+
78
+ Use these references while drafting:
79
+
80
+ - [references/template.md](references/template.md)
81
+ - [references/checklist.md](references/checklist.md)
82
+
83
+ ## Required Sections
84
+
85
+ - `핵심 용어`
86
+ - `엔티티 용어`
87
+ - `상태 용어`
88
+ - `UI 용어`
89
+ - `금지하거나 피할 표현`
90
+ - `복잡한 개념 상세 설명`
91
+ - `정의 충돌 / 검토 필요`
92
+
93
+ ## Quality Bar
94
+
95
+ The glossary is not ready if:
96
+
97
+ - simple vocabulary that should be in tables is expanded into unnecessary prose
98
+ - the same concept still appears under multiple primary names
99
+ - terms are listed without definitions
100
+ - code-facing English names and canonical project terms conflict without explanation
101
+ - banned or confusing wording is omitted despite clear ambiguity
102
+ - existing approved terminology is overwritten without explanation
@@ -0,0 +1,6 @@
1
+ interface:
2
+ display_name: "spec-shared-glossary-sync"
3
+ short_description: "Standardize Korean spec terms into a shared baseline glossary."
4
+ default_prompt: "Use $spec-shared-glossary-sync to create or update a Korean 01_glossary.md that standardizes terms across baseline docs and active .codex/plans."
5
+ policy:
6
+ allow_implicit_invocation: false
@@ -0,0 +1,36 @@
1
+ # Glossary Sync Checklist
2
+
3
+ Use this checklist before finalizing `01_glossary.md`.
4
+
5
+ ## Look For
6
+
7
+ - one concept described with multiple Korean names
8
+ - one Korean term mapped to multiple English code names
9
+ - UI copy that conflicts with domain terms
10
+ - product docs and change docs using different names for the same thing
11
+ - states that appear in packets but were never defined centrally
12
+
13
+ ## Prefer
14
+
15
+ - a table-first structure for most vocabulary
16
+ - one canonical project term per concept
17
+ - prefer Korean for user-facing/domain nouns, but keep standard English when that is clearer or already the stable norm
18
+ - one code-facing English name per canonical concept when possible
19
+ - short definitions that explain scope, not implementation
20
+ - explicit “do not use” wording for risky ambiguities
21
+ - detailed prose only for genuinely complex concepts
22
+
23
+ ## 대표 예시
24
+
25
+ - 플랜 / 루틴 / 프로그램
26
+ - 운동 세션 / 운동 기록 / workout
27
+ - 세트 템플릿 / 세트 기록
28
+ - 저장 / 완료 / 확정
29
+ - 초안 / 진행 중 / 임시 저장
30
+
31
+ ## Update Rule
32
+
33
+ - merge new terms into the existing glossary
34
+ - do not delete stable terms unless they are clearly wrong
35
+ - when uncertain, add the conflict to `정의 충돌 / 검토 필요`
36
+ - keep simple terms in tables; avoid turning the whole glossary into long prose
@@ -0,0 +1,58 @@
1
+ # 01_glossary.md Template
2
+
3
+ ```md
4
+ # 01 Glossary
5
+
6
+ 용어 표기 원칙:
7
+
8
+ - `용어` 칼럼은 한국어 우선이지만, 업계 표준 영어가 더 명확하면 영어 원형을 그대로 쓴다.
9
+ - `소스 오브 트루스` 같은 어색한 음역 대신 `source of truth` 또는 한국어 설명형 표현을 사용한다.
10
+
11
+ ## 핵심 용어
12
+
13
+ | 용어 | 영문 / 코드명 | 정의 | 사용 범위 | 허용 별칭 | 금지 표현 | 관련 문서 |
14
+ |---|---|---|---|---|---|---|
15
+ | 용어 1 | `termName` | 짧은 정의 | brief / spec / ui | 별칭 1 | 금지 표현 1 | `10_product-spec.md` |
16
+
17
+ ## 엔티티 용어
18
+
19
+ | 용어 | 영문 / 코드명 | 정의 | 사용 범위 | 허용 별칭 | 금지 표현 | 관련 문서 |
20
+ |---|---|---|---|---|---|---|
21
+ | 엔티티 1 | `entityName` | 짧은 정의 | spec / packet | 별칭 1 | 금지 표현 1 | `10_product-spec.md` |
22
+
23
+ ## 상태 용어
24
+
25
+ | 용어 | 영문 / 코드명 | 정의 | 사용 범위 | 허용 별칭 | 금지 표현 | 관련 문서 |
26
+ |---|---|---|---|---|---|---|
27
+ | 상태 1 | `draft` | 짧은 정의 | spec / ui / packet | 별칭 1 | 금지 표현 1 | `10_product-spec.md` |
28
+
29
+ ## UI 용어
30
+
31
+ | 용어 | 영문 / 코드명 | 정의 | 사용 범위 | 허용 별칭 | 금지 표현 | 관련 문서 |
32
+ |---|---|---|---|---|---|---|
33
+ | UI 용어 1 | `labelName` | 짧은 정의 | ui / packet | 별칭 1 | 금지 표현 1 | `20_ui-spec.md` |
34
+
35
+ ## 금지하거나 피할 표현
36
+
37
+ | 표현 | 이유 | 대신 사용할 표현 |
38
+ |---|---|---|
39
+ | 표현 1 | 왜 피해야 하는지 | 표준 표현 |
40
+
41
+ ## 복잡한 개념 상세 설명
42
+
43
+ ### 개념 1
44
+
45
+ - 왜 이 개념이 표만으로는 충분하지 않은지 설명
46
+ - 어떤 문맥에서 다른 표현과 충돌하는지 설명
47
+
48
+ ```mermaid
49
+ flowchart TD
50
+ A["개념 A"] --> B["개념 B"]
51
+ ```
52
+
53
+ ## 정의 충돌 / 검토 필요
54
+
55
+ | 항목 | 현재 표준 | 충돌 표현 | 판단 메모 |
56
+ |---|---|---|---|
57
+ | 충돌 항목 | 현재 표준 표현 | 새로 발견된 표현 | 판단 메모 |
58
+ ```
@@ -0,0 +1,49 @@
1
+ # Subagent 작성 가이드
2
+
3
+ [English](./README.md)
4
+
5
+ 이 디렉터리는 global agent subagent의 source of truth입니다.
6
+
7
+ ## 디렉터리 구조
8
+
9
+ ```text
10
+ apps/cli/data/subagents/
11
+ README.md
12
+ README.ko.md
13
+ subagent-registry.json
14
+ <subagent-id>/
15
+ PROMPT.md
16
+ claude.frontmatter.yaml
17
+ codex.frontmatter.toml
18
+ gemini.frontmatter.yaml
19
+ ```
20
+
21
+ ## 작성 규칙
22
+
23
+ 1. `subagent-registry.json`만 catalog 노출 여부를 결정합니다.
24
+ 2. `id`와 세 frontmatter의 `name`은 모두 같은 kebab-case 값이어야 합니다.
25
+ 3. `supported_tools`는 `claude-code`, `codex`, `gemini` 중 하나 이상이어야 합니다.
26
+ 4. `PROMPT.md`는 도구 공통 developer instruction 본문입니다.
27
+ 5. Claude/Gemini는 YAML frontmatter와 `PROMPT.md`를 합친 Markdown 파일로 렌더링됩니다.
28
+ 6. Codex는 TOML metadata, `developer_instructions`, `[[skills.config]]`로 렌더링됩니다.
29
+ 7. Codex `skill_names`는 최종 파일에 그대로 남기지 않고 `AI_OPS_HOME/.agents/skills/<skill>/SKILL.md` 절대 경로로 변환합니다.
30
+ 8. 필요한 skill이 없어도 설치는 실패하지 않습니다. CLI는 경고만 출력합니다.
31
+ 9. subagent는 항상 global tool home에만 설치합니다. project repo에는 `.codex/agents`, `.claude/agents`, `.gemini/agents`, `.ai-ops/subagents-manifest.json`을 만들지 않습니다.
32
+
33
+ ## Registry 필드
34
+
35
+ | 필드 | 필수 | 예시 | 의미 |
36
+ | --- | --- | --- | --- |
37
+ | `id` | 예 | `security-gate` | canonical subagent id |
38
+ | `supported_tools` | 예 | `["claude-code", "codex", "gemini"]` | 설치 가능한 도구 목록 |
39
+ | `source_path` | 예 | `security-gate` | 상대 source 디렉터리 |
40
+
41
+ ## 출력 경로
42
+
43
+ | 도구 | 출력 경로 |
44
+ | --- | --- |
45
+ | Codex | `.codex/agents/<id>.toml` |
46
+ | Claude Code | `.claude/agents/<id>.md` |
47
+ | Gemini CLI | `.gemini/agents/<id>.md` |
48
+
49
+ 상태 파일은 `.ai-ops/subagents-manifest.json`입니다. Skill 상태 파일인 `.ai-ops/skills-manifest.json`과 서로 읽거나 쓰지 않습니다.
@@ -0,0 +1,49 @@
1
+ # Subagent Authoring Guide
2
+
3
+ [Korean](./README.ko.md)
4
+
5
+ This directory is the source of truth for global agent subagents.
6
+
7
+ ## Directory Shape
8
+
9
+ ```text
10
+ apps/cli/data/subagents/
11
+ README.md
12
+ README.ko.md
13
+ subagent-registry.json
14
+ <subagent-id>/
15
+ PROMPT.md
16
+ claude.frontmatter.yaml
17
+ codex.frontmatter.toml
18
+ gemini.frontmatter.yaml
19
+ ```
20
+
21
+ ## Authoring Rules
22
+
23
+ 1. Only `subagent-registry.json` decides whether a subagent is exposed in the catalog.
24
+ 2. `id` and the `name` in all three frontmatter files must be the same kebab-case value.
25
+ 3. `supported_tools` must contain at least one of `claude-code`, `codex`, or `gemini`.
26
+ 4. `PROMPT.md` is the shared developer instruction body for all tools.
27
+ 5. Claude/Gemini render as Markdown files that combine YAML frontmatter with `PROMPT.md`.
28
+ 6. Codex renders as TOML metadata, `developer_instructions`, and `[[skills.config]]`.
29
+ 7. Codex `skill_names` are not kept verbatim in the final file; they are converted to absolute `AI_OPS_HOME/.agents/skills/<skill>/SKILL.md` paths.
30
+ 8. Installation does not fail when required skills are missing. The CLI only prints a warning.
31
+ 9. Subagents are always installed only in the global tool home. The project repo must not receive `.codex/agents`, `.claude/agents`, `.gemini/agents`, or `.ai-ops/subagents-manifest.json`.
32
+
33
+ ## Registry Fields
34
+
35
+ | Field | Required | Example | Meaning |
36
+ | ----------------- | -------- | ------------------------------------ | ------------------------- |
37
+ | `id` | Yes | `security-gate` | Canonical subagent id |
38
+ | `supported_tools` | Yes | `["claude-code", "codex", "gemini"]` | Tools that can install it |
39
+ | `source_path` | Yes | `security-gate` | Relative source directory |
40
+
41
+ ## Output Paths
42
+
43
+ | Tool | Output path |
44
+ | ----------- | ------------------------- |
45
+ | Codex | `.codex/agents/<id>.toml` |
46
+ | Claude Code | `.claude/agents/<id>.md` |
47
+ | Gemini CLI | `.gemini/agents/<id>.md` |
48
+
49
+ The state file is `.ai-ops/subagents-manifest.json`. It is separate from the skill state file, `.ai-ops/skills-manifest.json`; neither lifecycle reads or writes the other.
@@ -0,0 +1,18 @@
1
+ You are `security-gate`, a lightweight security triage subagent.
2
+
3
+ Your job is to decide whether the provided spec artifact or code change needs deeper security review.
4
+
5
+ Use the loaded `spec-security-01-triage` skill as the source of truth. Prefer compact Korean output and fail closed:
6
+
7
+ - if a clear high-risk trigger exists, require review
8
+ - if the change is obviously low-risk, allow no-review
9
+ - if anything is ambiguous, return `UNSURE` and treat it as review-required
10
+
11
+ Do not perform a full security review unless the parent explicitly asks for one. Focus on triage only:
12
+
13
+ - decide `mode=spec` or `mode=code` from the parent request
14
+ - identify the concrete triggers
15
+ - list required controls briefly
16
+ - say whether follow-up review is required
17
+
18
+ Output should stay short and structured around the triage contract.
@@ -0,0 +1,8 @@
1
+ name: security-gate
2
+ description: Decide whether a spec artifact or code change needs deeper security review.
3
+ tools: Read, Glob, Grep
4
+ model: haiku
5
+ permissionMode: plan
6
+ maxTurns: 6
7
+ skills:
8
+ - spec-security-01-triage
@@ -0,0 +1,6 @@
1
+ name = "security-gate"
2
+ description = "Decide whether a spec artifact or code change needs deeper security review."
3
+ model = "gpt-5.4-mini"
4
+ model_reasoning_effort = "low"
5
+ sandbox_mode = "read-only"
6
+ skill_names = ["spec-security-01-triage"]
@@ -0,0 +1,6 @@
1
+ name: security-gate
2
+ description: Decide whether a spec artifact or code change needs deeper security review.
3
+ kind: local
4
+ model: gemini-3-flash-preview
5
+ temperature: 0
6
+ max_turns: 6
@@ -0,0 +1,17 @@
1
+ You are `security-reviewer`, a focused security review subagent.
2
+
3
+ Use the loaded security skills as the source of truth. Start by checking whether the change is truly review-worthy. If the request is explicitly for security review, or if triage is `REVIEW_REQUIRED` or `UNSURE`, perform the full review.
4
+
5
+ Your review must stay findings-first, severity-first, and in Korean.
6
+
7
+ Focus on material security risks such as:
8
+
9
+ - authentication and authorization gaps
10
+ - sensitive data exposure
11
+ - unsafe input handling, injection, or template/rendering issues
12
+ - SSRF or unsafe external fetch behavior
13
+ - file upload/download risks
14
+ - tenant isolation and destructive action safety
15
+ - missing security-relevant validation, auditability, or regression coverage
16
+
17
+ Do not spend time on style or general cleanup unless no material issue exists. If no deep review is needed, say that briefly and explain why.
@@ -0,0 +1,9 @@
1
+ name: security-reviewer
2
+ description: Review a code or contract change for material security risks and missing controls.
3
+ tools: Read, Glob, Grep
4
+ model: sonnet
5
+ permissionMode: plan
6
+ maxTurns: 10
7
+ skills:
8
+ - spec-security-01-triage
9
+ - spec-security-02-review
@@ -0,0 +1,6 @@
1
+ name = "security-reviewer"
2
+ description = "Review a code or contract change for material security risks and missing controls."
3
+ model = "gpt-5.4"
4
+ model_reasoning_effort = "high"
5
+ sandbox_mode = "read-only"
6
+ skill_names = ["spec-security-01-triage", "spec-security-02-review"]
@@ -0,0 +1,6 @@
1
+ name: security-reviewer
2
+ description: Review a code or contract change for material security risks and missing controls.
3
+ kind: local
4
+ model: gemini-3-pro-preview
5
+ temperature: 0
6
+ max_turns: 10
@@ -0,0 +1,14 @@
1
+ {
2
+ "subagents": [
3
+ {
4
+ "id": "security-gate",
5
+ "supported_tools": ["claude-code", "codex", "gemini"],
6
+ "source_path": "security-gate"
7
+ },
8
+ {
9
+ "id": "security-reviewer",
10
+ "supported_tools": ["claude-code", "codex", "gemini"],
11
+ "source_path": "security-reviewer"
12
+ }
13
+ ]
14
+ }