@ryuenn3123/agentic-senior-core 5.8.19 → 5.8.21
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/.agents/plugins/agentic-senior-core/hooks.json +12 -12
- package/.agents/plugins/agentic-senior-core/plugin.json +1 -1
- package/.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md +8 -0
- package/.agents/rules/agentic-senior-core.md +8 -0
- package/.claude-plugin/plugin.json +1 -1
- package/.clinerules/agentic-senior-core.md +8 -0
- package/.codex-plugin/plugin.json +1 -1
- package/.continue/rules/agentic-senior-core.md +8 -0
- package/.cursor/rules/agentic-senior-core.mdc +8 -0
- package/.devin/rules/agentic-senior-core.md +8 -0
- package/.devin-plugin/plugin.json +1 -1
- package/.github/copilot-instructions.md +8 -0
- package/.github/plugin/plugin.json +1 -1
- package/.kilocode/rules/agentic-senior-core.md +8 -0
- package/.kiro/steering/agentic-senior-core.md +8 -0
- package/.openclaw/skills/asc/SKILL.md +6 -0
- package/.openclaw/skills/asc-adapter/SKILL.md +6 -0
- package/.openclaw/skills/asc-add-feature/SKILL.md +14 -7
- package/.openclaw/skills/asc-audit/SKILL.md +6 -0
- package/.openclaw/skills/asc-debt/SKILL.md +6 -0
- package/.openclaw/skills/asc-new-project/SKILL.md +21 -8
- package/.openclaw/skills/asc-refactor/SKILL.md +6 -0
- package/.openclaw/skills/asc-reference/SKILL.md +6 -0
- package/.openclaw/skills/asc-review/SKILL.md +6 -0
- package/.openhands/microagents/agentic-senior-core.md +8 -0
- package/.roo/rules/agentic-senior-core.md +8 -0
- package/.windsurf/rules/agentic-senior-core.md +8 -0
- package/.zed/rules/agentic-senior-core.md +8 -0
- package/AGENTS.md +8 -0
- package/CONVENTIONS.md +8 -0
- package/README.md +8 -0
- package/gemini-extension.json +1 -1
- package/hooks/hooks.json +12 -12
- package/lib/cli/commands/global.mjs +7 -0
- package/package.json +1 -1
- package/plugin.yaml +1 -1
- package/skills/asc/SKILL.md +1 -1
- package/skills/asc-adapter/SKILL.md +1 -1
- package/skills/asc-audit/SKILL.md +1 -1
- package/skills/asc-debt/SKILL.md +1 -1
- package/skills/asc-refactor/SKILL.md +1 -1
- package/skills/asc-reference/SKILL.md +1 -1
- package/skills/asc-review/SKILL.md +1 -1
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
"hooks": [
|
|
7
7
|
{
|
|
8
8
|
"type": "command",
|
|
9
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/session-start.js\"; exit 0",
|
|
10
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) {
|
|
9
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/session-start.js\"; exit 0",
|
|
10
|
+
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\session-start.js\" }",
|
|
11
11
|
"timeout": 5,
|
|
12
12
|
"statusMessage": "Loading ASC rules..."
|
|
13
13
|
}
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"hooks": [
|
|
20
20
|
{
|
|
21
21
|
"type": "command",
|
|
22
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/subagent-start.js\"; exit 0",
|
|
23
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) {
|
|
22
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/subagent-start.js\"; exit 0",
|
|
23
|
+
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\subagent-start.js\" }",
|
|
24
24
|
"timeout": 5,
|
|
25
25
|
"statusMessage": "Loading ASC rules..."
|
|
26
26
|
}
|
|
@@ -34,16 +34,16 @@
|
|
|
34
34
|
{
|
|
35
35
|
"type": "command",
|
|
36
36
|
"if": "Edit(**/package.json)",
|
|
37
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/pre-tool-dependency-gate.js\"; exit 0",
|
|
38
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) {
|
|
37
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/pre-tool-dependency-gate.js\"; exit 0",
|
|
38
|
+
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\pre-tool-dependency-gate.js\" }",
|
|
39
39
|
"timeout": 5,
|
|
40
40
|
"statusMessage": "ASC Pre-tool dependency check (Edit)..."
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"type": "command",
|
|
44
44
|
"if": "Write(**/package.json)",
|
|
45
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/pre-tool-dependency-gate.js\"; exit 0",
|
|
46
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) {
|
|
45
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/pre-tool-dependency-gate.js\"; exit 0",
|
|
46
|
+
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\pre-tool-dependency-gate.js\" }",
|
|
47
47
|
"timeout": 5,
|
|
48
48
|
"statusMessage": "ASC Pre-tool dependency check (Write)..."
|
|
49
49
|
}
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"hooks": [
|
|
55
55
|
{
|
|
56
56
|
"type": "command",
|
|
57
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/pre-tool-dependency-gate.js\"; exit 0",
|
|
58
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) {
|
|
57
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/pre-tool-dependency-gate.js\"; exit 0",
|
|
58
|
+
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\pre-tool-dependency-gate.js\" }",
|
|
59
59
|
"timeout": 5,
|
|
60
60
|
"statusMessage": "ASC Pre-tool dependency check (Terminal)..."
|
|
61
61
|
}
|
|
@@ -68,8 +68,8 @@
|
|
|
68
68
|
"hooks": [
|
|
69
69
|
{
|
|
70
70
|
"type": "command",
|
|
71
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/post-edit-enforce.js\"; exit 0",
|
|
72
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) {
|
|
71
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/post-edit-enforce.js\"; exit 0",
|
|
72
|
+
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\post-edit-enforce.js\" }",
|
|
73
73
|
"timeout": 5,
|
|
74
74
|
"statusMessage": "ASC ladder & spec gate check..."
|
|
75
75
|
},
|
|
@@ -19,6 +19,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
19
19
|
5. Can this be one straightforward function? Write it.
|
|
20
20
|
6. Only then: write the minimum code that works.
|
|
21
21
|
|
|
22
|
+
## Marking Simplification
|
|
23
|
+
|
|
24
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
25
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
26
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
27
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
28
|
+
Skip only for genuinely trivial one-liners.
|
|
29
|
+
|
|
22
30
|
## Code Quality
|
|
23
31
|
|
|
24
32
|
- Descriptive variable and function names. No cryptic abbreviations.
|
|
@@ -19,6 +19,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
19
19
|
5. Can this be one straightforward function? Write it.
|
|
20
20
|
6. Only then: write the minimum code that works.
|
|
21
21
|
|
|
22
|
+
## Marking Simplification
|
|
23
|
+
|
|
24
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
25
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
26
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
27
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
28
|
+
Skip only for genuinely trivial one-liners.
|
|
29
|
+
|
|
22
30
|
## Code Quality
|
|
23
31
|
|
|
24
32
|
- Descriptive variable and function names. No cryptic abbreviations.
|
|
@@ -14,6 +14,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
14
14
|
5. Can this be one straightforward function? Write it.
|
|
15
15
|
6. Only then: write the minimum code that works.
|
|
16
16
|
|
|
17
|
+
## Marking Simplification
|
|
18
|
+
|
|
19
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
20
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
21
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
22
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
23
|
+
Skip only for genuinely trivial one-liners.
|
|
24
|
+
|
|
17
25
|
## Code Quality
|
|
18
26
|
|
|
19
27
|
- Descriptive variable and function names. No cryptic abbreviations.
|
|
@@ -14,6 +14,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
14
14
|
5. Can this be one straightforward function? Write it.
|
|
15
15
|
6. Only then: write the minimum code that works.
|
|
16
16
|
|
|
17
|
+
## Marking Simplification
|
|
18
|
+
|
|
19
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
20
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
21
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
22
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
23
|
+
Skip only for genuinely trivial one-liners.
|
|
24
|
+
|
|
17
25
|
## Code Quality
|
|
18
26
|
|
|
19
27
|
- Descriptive variable and function names. No cryptic abbreviations.
|
|
@@ -19,6 +19,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
19
19
|
5. Can this be one straightforward function? Write it.
|
|
20
20
|
6. Only then: write the minimum code that works.
|
|
21
21
|
|
|
22
|
+
## Marking Simplification
|
|
23
|
+
|
|
24
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
25
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
26
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
27
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
28
|
+
Skip only for genuinely trivial one-liners.
|
|
29
|
+
|
|
22
30
|
## Code Quality
|
|
23
31
|
|
|
24
32
|
- Descriptive variable and function names. No cryptic abbreviations.
|
|
@@ -14,6 +14,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
14
14
|
5. Can this be one straightforward function? Write it.
|
|
15
15
|
6. Only then: write the minimum code that works.
|
|
16
16
|
|
|
17
|
+
## Marking Simplification
|
|
18
|
+
|
|
19
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
20
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
21
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
22
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
23
|
+
Skip only for genuinely trivial one-liners.
|
|
24
|
+
|
|
17
25
|
## Code Quality
|
|
18
26
|
|
|
19
27
|
- Descriptive variable and function names. No cryptic abbreviations.
|
|
@@ -14,6 +14,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
14
14
|
5. Can this be one straightforward function? Write it.
|
|
15
15
|
6. Only then: write the minimum code that works.
|
|
16
16
|
|
|
17
|
+
## Marking Simplification
|
|
18
|
+
|
|
19
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
20
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
21
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
22
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
23
|
+
Skip only for genuinely trivial one-liners.
|
|
24
|
+
|
|
17
25
|
## Code Quality
|
|
18
26
|
|
|
19
27
|
- Descriptive variable and function names. No cryptic abbreviations.
|
|
@@ -14,6 +14,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
14
14
|
5. Can this be one straightforward function? Write it.
|
|
15
15
|
6. Only then: write the minimum code that works.
|
|
16
16
|
|
|
17
|
+
## Marking Simplification
|
|
18
|
+
|
|
19
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
20
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
21
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
22
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
23
|
+
Skip only for genuinely trivial one-liners.
|
|
24
|
+
|
|
17
25
|
## Code Quality
|
|
18
26
|
|
|
19
27
|
- Descriptive variable and function names. No cryptic abbreviations.
|
|
@@ -14,6 +14,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
14
14
|
5. Can this be one straightforward function? Write it.
|
|
15
15
|
6. Only then: write the minimum code that works.
|
|
16
16
|
|
|
17
|
+
## Marking Simplification
|
|
18
|
+
|
|
19
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
20
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
21
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
22
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
23
|
+
Skip only for genuinely trivial one-liners.
|
|
24
|
+
|
|
17
25
|
## Code Quality
|
|
18
26
|
|
|
19
27
|
- Descriptive variable and function names. No cryptic abbreviations.
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: asc
|
|
3
|
+
description: >
|
|
4
|
+
Universal AI coding rules. Write code like a staff engineer. Use this skill when user asks for general coding guidelines, best practices, standard rules, code quality standards, or when acting as a senior/staff software engineer.
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# Agentic Senior Core
|
|
2
8
|
|
|
3
9
|
Universal AI coding rules. Write code like a staff engineer.
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: asc-adapter
|
|
3
|
+
description: >
|
|
4
|
+
Detect installed AI coding hosts and generate adapter files for the current project. Use this skill when user asks to install, configure, setup, or initialize Agentic Senior Core rules, adapter files, or plugins for their IDE (Cursor, Windsurf, Devin, Copilot, Roo, Cline, Aider, Kiro).
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# ASC Adapter
|
|
2
8
|
|
|
3
9
|
Detect installed AI coding hosts and generate adapter files for the current project.
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: asc-add-feature
|
|
3
|
+
description: >
|
|
4
|
+
Structured brownfield workflow. Adapted from QRSPI to prevent context rot and ensure alignment before building. Use this skill when user asks to add new features, build new endpoints, extend existing functionality, implement new UI components, modify an existing codebase, or work on brownfield development.
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# Add Feature Workflow
|
|
2
8
|
|
|
3
9
|
Structured brownfield workflow. Adapted from QRSPI to prevent context rot and ensure alignment before building.
|
|
4
10
|
|
|
5
11
|
Grounded in: RPI (Dex Horthy, HumanLayer 2025) with corrections from QRSPI 8-stage evolution (Coding Agents Conference, March 2026). Plan-reading illusion fix and instruction budget constraint applied. Stages 2/5/7 adapted; stages 1/3/4/6/8 skipped as too heavyweight for individual-developer workflow.
|
|
6
12
|
|
|
7
|
-
## Gate Mechanism
|
|
13
|
+
## Gate Mechanism & Scaled Spec Requirement
|
|
8
14
|
|
|
9
15
|
This workflow nudges the agent to stop at each phase boundary, same enforcement tier as the existing decision ladder — not a hard block. Bypasses are logged to the debt ledger.
|
|
10
16
|
|
|
11
|
-
|
|
17
|
+
For brownfield feature development (`asc-add-feature`), Phase 2 requires a lightweight **PRD.md** (or feature spec in `docs/PRD.md`) defining product intent, goals, and non-goals to avoid scope creep and context rot.
|
|
12
18
|
|
|
13
19
|
To track phase, write to `workflow-gate.json` via the `state_write` MCP tool.
|
|
14
20
|
Format:
|
|
@@ -31,11 +37,12 @@ Format:
|
|
|
31
37
|
## Phase 2: Plan
|
|
32
38
|
|
|
33
39
|
1. On approval of Phase 1, update `workflow-gate.json` phase to `plan`.
|
|
34
|
-
2.
|
|
35
|
-
3.
|
|
36
|
-
4.
|
|
37
|
-
5.
|
|
38
|
-
6.
|
|
40
|
+
2. Ensure `docs/PRD.md` or feature brief exists.
|
|
41
|
+
3. Create a numbered, step-by-step implementation plan with specific files, functions, and line references.
|
|
42
|
+
4. Include a "Don't Build" list from the research phase.
|
|
43
|
+
5. **Callout: Plan-Reading Illusion.** Ask the user to explicitly verify the plan against the codebase, not just skim it.
|
|
44
|
+
6. Output the plan.
|
|
45
|
+
7. **STOP and wait for user approval.** Do not implement.
|
|
39
46
|
|
|
40
47
|
## Phase 3: Implement
|
|
41
48
|
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: asc-audit
|
|
3
|
+
description: >
|
|
4
|
+
Security and architecture audit. Deeper than review, focused on finding vulnerabilities and structural anti-patterns. Use this skill for deep security audits, architecture reviews, vulnerability scanning, threat modeling, finding OWASP risks (XSS, SQLi), penetration testing, or identifying structural anti-patterns.
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# Audit Skill
|
|
2
8
|
|
|
3
9
|
Security and architecture audit. Deeper than review, focused on finding vulnerabilities and structural anti-patterns.
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: asc-debt
|
|
3
|
+
description: >
|
|
4
|
+
Track deferred enforcement violations. When an ASC ladder nudge fires and the shortcut is accepted rather than fixed, log it here for later resolution. Use this skill when user wants to log technical debt, track skipped rules, defer a fix, note a code smell for later, or manage deferred violations.
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# Debt Ledger
|
|
2
8
|
|
|
3
9
|
Track deferred enforcement violations. When an ASC ladder nudge fires and the shortcut is accepted rather than fixed, log it here for later resolution.
|
|
@@ -1,14 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: asc-new-project
|
|
3
|
+
description: >
|
|
4
|
+
Structured greenfield workflow. Prevents building before alignment on what to build. Use this skill for greenfield projects, scaffolding new repositories, bootstrapping apps, starting from scratch, planning new system architectures, or creating a new project.
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# New Project Workflow
|
|
2
8
|
|
|
3
9
|
Structured greenfield workflow. Prevents building before alignment on what to build.
|
|
4
10
|
|
|
5
|
-
Grounded in: Spec-Driven Development (SDD) with scaffolding-spec approach.
|
|
11
|
+
Grounded in: Spec-Driven Development (SDD) with scaffolding-spec approach. Core spec documents guide greenfield implementation (`PRD.md`, `Architecture.md`, `Design.md`, `Schema.md`). Once implemented, the code becomes the primary ground truth, while docs are updated on structural changes.
|
|
6
12
|
|
|
7
|
-
## Gate Mechanism
|
|
13
|
+
## Gate Mechanism & 4 Spec Document Requirement
|
|
8
14
|
|
|
9
15
|
This workflow nudges the agent to stop at each phase boundary, same enforcement tier as the existing decision ladder — not a hard block. Bypasses are logged to the debt ledger.
|
|
10
16
|
|
|
11
|
-
|
|
17
|
+
For greenfield projects (`asc-new-project`), Phase 2 requires creating the **4 Core SDD Documents** in `docs/` or project root:
|
|
18
|
+
1. `PRD.md` — Product intent, goals, non-goals, and user problems.
|
|
19
|
+
2. `Architecture.md` — System structure, module boundaries, and tech stack choices.
|
|
20
|
+
3. `Design.md` — UX / UI layout, component hierarchy, interaction rules.
|
|
21
|
+
4. `Schema.md` — Data contracts, database entities, API endpoints.
|
|
22
|
+
|
|
23
|
+
*Note on Rules:* Coding conventions and project constraints are automatically loaded from global plugin rules (`agentic-senior-core.md`) or workspace `AGENTS.md`. No duplicate `docs/Rules.md` file is required.
|
|
12
24
|
|
|
13
25
|
To track phase, write to `workflow-gate.json` via the `state_write` MCP tool.
|
|
14
26
|
Format:
|
|
@@ -31,16 +43,17 @@ Format:
|
|
|
31
43
|
## Phase 2: Spec (No Implementation Code)
|
|
32
44
|
|
|
33
45
|
1. On approval of Phase 1, update `workflow-gate.json` phase to `plan`.
|
|
34
|
-
2.
|
|
35
|
-
3.
|
|
46
|
+
2. Generate the 4 core SDD documents from templates (`docs/PRD.md`, `docs/Architecture.md`, `docs/Design.md`, `docs/Schema.md`).
|
|
47
|
+
3. Verify exact file naming — check for typos like `Architectyre.md`.
|
|
36
48
|
4. Output specs for review.
|
|
37
|
-
5. **STOP and wait for user approval.** Do not implement.
|
|
49
|
+
5. **STOP and wait for user approval.** Do not implement code.
|
|
38
50
|
|
|
39
51
|
## Phase 3: Implement
|
|
40
52
|
|
|
41
53
|
1. On approval of Phase 2, update `workflow-gate.json` phase to `implement`.
|
|
42
|
-
2.
|
|
43
|
-
3.
|
|
54
|
+
2. Run Anti Context-Blindness check: verify entities/tables mentioned in `Schema.md` or `Architecture.md` align with proposed code targets.
|
|
55
|
+
3. Build against the approved specs. Apply the ASC decision ladder on every file.
|
|
56
|
+
4. Run the decision ladder: does this need to exist? Does stdlib cover it? One function or full module?
|
|
44
57
|
|
|
45
58
|
## Phase 4: Validate
|
|
46
59
|
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: asc-refactor
|
|
3
|
+
description: >
|
|
4
|
+
Structured refactoring workflow. Preserves existing behavior while improving structure. Use this skill when user asks to refactor code, clean up code, improve code structure, rewrite legacy code, extract components, reduce technical debt, apply SOLID/DRY principles, or migrate codebases.
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# Refactor Skill
|
|
2
8
|
|
|
3
9
|
Structured refactoring workflow. Preserves existing behavior while improving structure.
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: asc-reference
|
|
3
|
+
description: >
|
|
4
|
+
Domain-specific coding rules for testing, API design, database queries, frontend components, infrastructure configs, and service resilience. Load this skill when working on any of these domains. Use this skill for guidance on writing unit tests, designing REST/GraphQL APIs, optimizing SQL queries, writing React/frontend components, setting up Docker/CI/CD infrastructure, or improving backend service resilience.
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# ASC Domain Reference
|
|
2
8
|
|
|
3
9
|
Domain-specific coding rules for testing, API design, database queries, frontend components, infrastructure configs, and service resilience. Load this skill when working on any of these domains.
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: asc-review
|
|
3
|
+
description: >
|
|
4
|
+
Production-risk code review. Prioritize findings by severity. Use this skill when user asks to review a pull request, perform code review, check for production risks, critique code, analyze recent changes, or provide feedback on code quality.
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# Review Skill
|
|
2
8
|
|
|
3
9
|
Production-risk code review. Prioritize findings by severity.
|
|
@@ -14,6 +14,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
14
14
|
5. Can this be one straightforward function? Write it.
|
|
15
15
|
6. Only then: write the minimum code that works.
|
|
16
16
|
|
|
17
|
+
## Marking Simplification
|
|
18
|
+
|
|
19
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
20
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
21
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
22
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
23
|
+
Skip only for genuinely trivial one-liners.
|
|
24
|
+
|
|
17
25
|
## Code Quality
|
|
18
26
|
|
|
19
27
|
- Descriptive variable and function names. No cryptic abbreviations.
|
|
@@ -14,6 +14,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
14
14
|
5. Can this be one straightforward function? Write it.
|
|
15
15
|
6. Only then: write the minimum code that works.
|
|
16
16
|
|
|
17
|
+
## Marking Simplification
|
|
18
|
+
|
|
19
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
20
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
21
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
22
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
23
|
+
Skip only for genuinely trivial one-liners.
|
|
24
|
+
|
|
17
25
|
## Code Quality
|
|
18
26
|
|
|
19
27
|
- Descriptive variable and function names. No cryptic abbreviations.
|
|
@@ -14,6 +14,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
14
14
|
5. Can this be one straightforward function? Write it.
|
|
15
15
|
6. Only then: write the minimum code that works.
|
|
16
16
|
|
|
17
|
+
## Marking Simplification
|
|
18
|
+
|
|
19
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
20
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
21
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
22
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
23
|
+
Skip only for genuinely trivial one-liners.
|
|
24
|
+
|
|
17
25
|
## Code Quality
|
|
18
26
|
|
|
19
27
|
- Descriptive variable and function names. No cryptic abbreviations.
|
|
@@ -14,6 +14,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
14
14
|
5. Can this be one straightforward function? Write it.
|
|
15
15
|
6. Only then: write the minimum code that works.
|
|
16
16
|
|
|
17
|
+
## Marking Simplification
|
|
18
|
+
|
|
19
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
20
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
21
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
22
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
23
|
+
Skip only for genuinely trivial one-liners.
|
|
24
|
+
|
|
17
25
|
## Code Quality
|
|
18
26
|
|
|
19
27
|
- Descriptive variable and function names. No cryptic abbreviations.
|
package/AGENTS.md
CHANGED
|
@@ -14,6 +14,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
14
14
|
5. Can this be one straightforward function? Write it.
|
|
15
15
|
6. Only then: write the minimum code that works.
|
|
16
16
|
|
|
17
|
+
## Marking Simplification
|
|
18
|
+
|
|
19
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
20
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
21
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
22
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
23
|
+
Skip only for genuinely trivial one-liners.
|
|
24
|
+
|
|
17
25
|
## Code Quality
|
|
18
26
|
|
|
19
27
|
- Descriptive variable and function names. No cryptic abbreviations.
|
package/CONVENTIONS.md
CHANGED
|
@@ -14,6 +14,14 @@ Before writing any code, stop at the first step that holds:
|
|
|
14
14
|
5. Can this be one straightforward function? Write it.
|
|
15
15
|
6. Only then: write the minimum code that works.
|
|
16
16
|
|
|
17
|
+
## Marking Simplification
|
|
18
|
+
|
|
19
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
20
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
21
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
22
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
23
|
+
Skip only for genuinely trivial one-liners.
|
|
24
|
+
|
|
17
25
|
## Code Quality
|
|
18
26
|
|
|
19
27
|
- Descriptive variable and function names. No cryptic abbreviations.
|
package/README.md
CHANGED
|
@@ -352,6 +352,14 @@ This plugin loads universal engineering rules on every session. Before writing a
|
|
|
352
352
|
5. Can this be one straightforward function?
|
|
353
353
|
6. Only then: write the minimum code that works.
|
|
354
354
|
|
|
355
|
+
## Marking Simplification
|
|
356
|
+
|
|
357
|
+
When you pick the minimal option at step 5 or 6, and it isn't obviously trivial:
|
|
358
|
+
- Leave a one-line comment noting why, and the upgrade trigger if there is a ceiling.
|
|
359
|
+
Example: `// minimal: single global lock — split per-account if throughput becomes an issue`
|
|
360
|
+
- Leave one runnable check (assertion, small test, or `__main__` demo) proving it works.
|
|
361
|
+
Skip only for genuinely trivial one-liners.
|
|
362
|
+
|
|
355
363
|
The rules also cover security, architecture, testing, error handling, API design, database safety, frontend accessibility, infrastructure, resilience, and async patterns. All universal invariants -- no project-specific configuration needed.
|
|
356
364
|
|
|
357
365
|
### Before / After
|
package/gemini-extension.json
CHANGED
package/hooks/hooks.json
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
"hooks": [
|
|
7
7
|
{
|
|
8
8
|
"type": "command",
|
|
9
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/session-start.js\"; exit 0",
|
|
10
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) {
|
|
9
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/session-start.js\"; exit 0",
|
|
10
|
+
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\session-start.js\" }",
|
|
11
11
|
"timeout": 5,
|
|
12
12
|
"statusMessage": "Loading ASC rules..."
|
|
13
13
|
}
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"hooks": [
|
|
20
20
|
{
|
|
21
21
|
"type": "command",
|
|
22
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/subagent-start.js\"; exit 0",
|
|
23
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) {
|
|
22
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/subagent-start.js\"; exit 0",
|
|
23
|
+
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\subagent-start.js\" }",
|
|
24
24
|
"timeout": 5,
|
|
25
25
|
"statusMessage": "Loading ASC rules..."
|
|
26
26
|
}
|
|
@@ -34,16 +34,16 @@
|
|
|
34
34
|
{
|
|
35
35
|
"type": "command",
|
|
36
36
|
"if": "Edit(**/package.json)",
|
|
37
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/pre-tool-dependency-gate.js\"; exit 0",
|
|
38
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) {
|
|
37
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/pre-tool-dependency-gate.js\"; exit 0",
|
|
38
|
+
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\pre-tool-dependency-gate.js\" }",
|
|
39
39
|
"timeout": 5,
|
|
40
40
|
"statusMessage": "ASC Pre-tool dependency check (Edit)..."
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"type": "command",
|
|
44
44
|
"if": "Write(**/package.json)",
|
|
45
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/pre-tool-dependency-gate.js\"; exit 0",
|
|
46
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) {
|
|
45
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/pre-tool-dependency-gate.js\"; exit 0",
|
|
46
|
+
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\pre-tool-dependency-gate.js\" }",
|
|
47
47
|
"timeout": 5,
|
|
48
48
|
"statusMessage": "ASC Pre-tool dependency check (Write)..."
|
|
49
49
|
}
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"hooks": [
|
|
55
55
|
{
|
|
56
56
|
"type": "command",
|
|
57
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/pre-tool-dependency-gate.js\"; exit 0",
|
|
58
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) {
|
|
57
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/pre-tool-dependency-gate.js\"; exit 0",
|
|
58
|
+
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\pre-tool-dependency-gate.js\" }",
|
|
59
59
|
"timeout": 5,
|
|
60
60
|
"statusMessage": "ASC Pre-tool dependency check (Terminal)..."
|
|
61
61
|
}
|
|
@@ -68,8 +68,8 @@
|
|
|
68
68
|
"hooks": [
|
|
69
69
|
{
|
|
70
70
|
"type": "command",
|
|
71
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/post-edit-enforce.js\"; exit 0",
|
|
72
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) {
|
|
71
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/post-edit-enforce.js\"; exit 0",
|
|
72
|
+
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { $root = if ($env:CLAUDE_PLUGIN_ROOT) { $env:CLAUDE_PLUGIN_ROOT } else { \"$env:USERPROFILE\\.gemini\\config\\plugins\\agentic-senior-core\" }; node \"$root\\hooks\\post-edit-enforce.js\" }",
|
|
73
73
|
"timeout": 5,
|
|
74
74
|
"statusMessage": "ASC ladder & spec gate check..."
|
|
75
75
|
},
|
|
@@ -186,6 +186,13 @@ async function installAntigravityIde(target) {
|
|
|
186
186
|
// Copy plugin bundle (plugin.json + skills/) to ~/.gemini/antigravity-ide/plugins/agentic-senior-core/
|
|
187
187
|
await fs.mkdir(path.dirname(pluginTargetPath), { recursive: true });
|
|
188
188
|
await copyDirRecursive(pluginSource, pluginTargetPath);
|
|
189
|
+
|
|
190
|
+
// Clean up old hooks/hooks.json duplicate from previous versions
|
|
191
|
+
const oldHooksJson = path.join(pluginTargetPath, 'hooks', 'hooks.json');
|
|
192
|
+
if (await pathExists(oldHooksJson)) {
|
|
193
|
+
await fs.rm(oldHooksJson);
|
|
194
|
+
}
|
|
195
|
+
|
|
189
196
|
console.log(` ${target.label}: plugin -> ${pluginTargetPath} ... OK`);
|
|
190
197
|
|
|
191
198
|
// The IDE automatically loads the plugin bundle's internal rules/ folder!
|
package/package.json
CHANGED
package/plugin.yaml
CHANGED
package/skills/asc/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: asc
|
|
3
3
|
description: >
|
|
4
|
-
Universal AI coding rules. Write code like a staff engineer.
|
|
4
|
+
Universal AI coding rules. Write code like a staff engineer. Use this skill when user asks for general coding guidelines, best practices, standard rules, code quality standards, or when acting as a senior/staff software engineer.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Agentic Senior Core
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: asc-adapter
|
|
3
3
|
description: >
|
|
4
|
-
Detect installed AI coding hosts and generate adapter files for the current project.
|
|
4
|
+
Detect installed AI coding hosts and generate adapter files for the current project. Use this skill when user asks to install, configure, setup, or initialize Agentic Senior Core rules, adapter files, or plugins for their IDE (Cursor, Windsurf, Devin, Copilot, Roo, Cline, Aider, Kiro).
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# ASC Adapter
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: asc-audit
|
|
3
3
|
description: >
|
|
4
|
-
Security and architecture audit. Deeper than review, focused on finding vulnerabilities and structural anti-patterns.
|
|
4
|
+
Security and architecture audit. Deeper than review, focused on finding vulnerabilities and structural anti-patterns. Use this skill for deep security audits, architecture reviews, vulnerability scanning, threat modeling, finding OWASP risks (XSS, SQLi), penetration testing, or identifying structural anti-patterns.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Audit Skill
|
package/skills/asc-debt/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: asc-debt
|
|
3
3
|
description: >
|
|
4
|
-
Track deferred enforcement violations. When an ASC ladder nudge fires and the shortcut is accepted rather than fixed, log it here for later resolution.
|
|
4
|
+
Track deferred enforcement violations. When an ASC ladder nudge fires and the shortcut is accepted rather than fixed, log it here for later resolution. Use this skill when user wants to log technical debt, track skipped rules, defer a fix, note a code smell for later, or manage deferred violations.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Debt Ledger
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: asc-refactor
|
|
3
3
|
description: >
|
|
4
|
-
Structured refactoring workflow. Preserves existing behavior while improving structure.
|
|
4
|
+
Structured refactoring workflow. Preserves existing behavior while improving structure. Use this skill when user asks to refactor code, clean up code, improve code structure, rewrite legacy code, extract components, reduce technical debt, apply SOLID/DRY principles, or migrate codebases.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Refactor Skill
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: asc-reference
|
|
3
3
|
description: >
|
|
4
|
-
Domain-specific coding rules for testing, API design, database queries, frontend components, infrastructure configs, and service resilience. Load this skill when working on any of these domains.
|
|
4
|
+
Domain-specific coding rules for testing, API design, database queries, frontend components, infrastructure configs, and service resilience. Load this skill when working on any of these domains. Use this skill for guidance on writing unit tests, designing REST/GraphQL APIs, optimizing SQL queries, writing React/frontend components, setting up Docker/CI/CD infrastructure, or improving backend service resilience.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# ASC Domain Reference
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: asc-review
|
|
3
3
|
description: >
|
|
4
|
-
Production-risk code review. Prioritize findings by severity.
|
|
4
|
+
Production-risk code review. Prioritize findings by severity. Use this skill when user asks to review a pull request, perform code review, check for production risks, critique code, analyze recent changes, or provide feedback on code quality.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Review Skill
|