@ryuenn3123/agentic-senior-core 5.8.21 → 5.8.23

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 (68) hide show
  1. package/.agents/plugins/agentic-senior-core/hooks/post-edit-enforce.js +100 -38
  2. package/.agents/plugins/agentic-senior-core/hooks/pre-tool-dependency-gate.js +20 -11
  3. package/.agents/plugins/agentic-senior-core/hooks.json +14 -7
  4. package/.agents/plugins/agentic-senior-core/plugin.json +10 -4
  5. package/.agents/plugins/agentic-senior-core/skills/asc-new-project/SKILL.md +5 -6
  6. package/README.md +10 -20
  7. package/gemini-extension.json +12 -6
  8. package/lib/cli/commands/adapter.mjs +21 -13
  9. package/lib/cli/commands/global.mjs +21 -11
  10. package/package.json +1 -21
  11. package/plugin.yaml +1 -1
  12. package/.claude-plugin/marketplace.json +0 -17
  13. package/.claude-plugin/plugin.json +0 -17
  14. package/.clinerules/agentic-senior-core.md +0 -109
  15. package/.codex-plugin/plugin.json +0 -24
  16. package/.continue/rules/agentic-senior-core.md +0 -109
  17. package/.cursor/rules/agentic-senior-core.mdc +0 -114
  18. package/.devin/rules/agentic-senior-core.md +0 -109
  19. package/.devin-plugin/plugin.json +0 -13
  20. package/.github/copilot-instructions.md +0 -109
  21. package/.github/plugin/marketplace.json +0 -20
  22. package/.github/plugin/plugin.json +0 -16
  23. package/.kilocode/rules/agentic-senior-core.md +0 -109
  24. package/.kiro/steering/agentic-senior-core.md +0 -109
  25. package/.openclaw/skills/asc/SKILL.md +0 -36
  26. package/.openclaw/skills/asc-adapter/SKILL.md +0 -43
  27. package/.openclaw/skills/asc-add-feature/SKILL.md +0 -53
  28. package/.openclaw/skills/asc-audit/SKILL.md +0 -36
  29. package/.openclaw/skills/asc-debt/SKILL.md +0 -72
  30. package/.openclaw/skills/asc-new-project/SKILL.md +0 -62
  31. package/.openclaw/skills/asc-refactor/SKILL.md +0 -62
  32. package/.openclaw/skills/asc-reference/SKILL.md +0 -59
  33. package/.openclaw/skills/asc-review/SKILL.md +0 -63
  34. package/.opencode/plugins/agentic-senior-core.mjs +0 -31
  35. package/.openhands/microagents/agentic-senior-core.md +0 -109
  36. package/.roo/rules/agentic-senior-core.md +0 -109
  37. package/.windsurf/rules/agentic-senior-core.md +0 -109
  38. package/.zed/rules/agentic-senior-core.md +0 -109
  39. package/hooks/copilot-hooks.json +0 -30
  40. package/hooks/hooks.json +0 -86
  41. package/hooks/lib/known-duplicates.json +0 -32
  42. package/hooks/package.json +0 -3
  43. package/hooks/path-util.cjs +0 -23
  44. package/hooks/post-edit-enforce.js +0 -234
  45. package/hooks/pre-tool-dependency-gate.js +0 -155
  46. package/hooks/session-start.js +0 -36
  47. package/hooks/subagent-start.js +0 -38
  48. package/skills/asc/SKILL.md +0 -36
  49. package/skills/asc-adapter/SKILL.md +0 -43
  50. package/skills/asc-add-feature/SKILL.md +0 -53
  51. package/skills/asc-audit/SKILL.md +0 -36
  52. package/skills/asc-debt/SKILL.md +0 -72
  53. package/skills/asc-new-project/SKILL.md +0 -62
  54. package/skills/asc-refactor/SKILL.md +0 -62
  55. package/skills/asc-reference/SKILL.md +0 -59
  56. package/skills/asc-review/SKILL.md +0 -63
  57. /package/{commands → .agents/plugins/agentic-senior-core/commands}/asc-add-feature.md +0 -0
  58. /package/{commands → .agents/plugins/agentic-senior-core/commands}/asc-add-feature.toml +0 -0
  59. /package/{commands → .agents/plugins/agentic-senior-core/commands}/asc-audit.md +0 -0
  60. /package/{commands → .agents/plugins/agentic-senior-core/commands}/asc-audit.toml +0 -0
  61. /package/{commands → .agents/plugins/agentic-senior-core/commands}/asc-help.md +0 -0
  62. /package/{commands → .agents/plugins/agentic-senior-core/commands}/asc-help.toml +0 -0
  63. /package/{commands → .agents/plugins/agentic-senior-core/commands}/asc-new-project.md +0 -0
  64. /package/{commands → .agents/plugins/agentic-senior-core/commands}/asc-new-project.toml +0 -0
  65. /package/{commands → .agents/plugins/agentic-senior-core/commands}/asc-refactor.md +0 -0
  66. /package/{commands → .agents/plugins/agentic-senior-core/commands}/asc-refactor.toml +0 -0
  67. /package/{commands → .agents/plugins/agentic-senior-core/commands}/asc-review.md +0 -0
  68. /package/{commands → .agents/plugins/agentic-senior-core/commands}/asc-review.toml +0 -0
@@ -43,38 +43,116 @@ process.stdin.on('data', function (chunk) { inputBuffer += chunk; });
43
43
  process.stdin.on('end', function () {
44
44
  try {
45
45
  const data = JSON.parse(inputBuffer);
46
+
47
+ if (data.invocationNum !== undefined && data.transcriptPath) {
48
+ handleAntigravityPostInvocation(data);
49
+ return;
50
+ }
51
+
46
52
  const toolName = data.tool_name || '';
47
53
  const toolInput = data.tool_input || {};
48
- const filePath = toolInput.file_path || '';
49
- const findings = [];
50
-
51
- if (filePath.endsWith('package.json')) {
52
- checkDependencyAddition(toolName, toolInput, findings);
53
- }
54
+ processSingleEdit(toolName, toolInput, function(nudge) {
55
+ emitClaude(nudge);
56
+ });
57
+ } catch (_) {
58
+ // Silent fail
59
+ }
60
+ });
54
61
 
55
- const ext = path.extname(filePath).slice(1);
56
- if (SOURCE_EXTENSIONS.has(ext)) {
57
- if (toolName === 'Edit') {
58
- checkLocDelta(toolInput, filePath, findings);
59
- } else if (toolName === 'Write') {
60
- checkNewFileSize(toolInput, filePath, findings);
62
+ function handleAntigravityPostInvocation(data) {
63
+ try {
64
+ if (!fs.existsSync(data.transcriptPath)) return;
65
+ const lines = fs.readFileSync(data.transcriptPath, 'utf8').split('\n').filter(Boolean);
66
+ const findings = [];
67
+
68
+ for (let i = 0; i < lines.length; i++) {
69
+ const step = JSON.parse(lines[i]);
70
+ if (step.step_index >= data.initialNumSteps && step.type === 'PLANNER_RESPONSE' && step.tool_calls) {
71
+ for (let j = 0; j < step.tool_calls.length; j++) {
72
+ const tc = step.tool_calls[j];
73
+ let toolName = '';
74
+ let toolInput = {};
75
+
76
+ if (tc.name === 'replace_file_content' || tc.name === 'multi_replace_file_content') {
77
+ toolName = 'Edit';
78
+ toolInput = {
79
+ file_path: tc.args.TargetFile || '',
80
+ new_string: tc.args.ReplacementContent || '',
81
+ old_string: tc.args.TargetContent || ''
82
+ };
83
+ } else if (tc.name === 'write_to_file') {
84
+ toolName = 'Write';
85
+ toolInput = {
86
+ file_path: tc.args.TargetFile || '',
87
+ content: tc.args.CodeContent || ''
88
+ };
89
+ }
90
+
91
+ if (toolName) {
92
+ processSingleEdit(toolName, toolInput, function(nudge) {
93
+ findings.push(nudge);
94
+ }, true);
95
+ }
96
+ }
61
97
  }
62
98
  }
99
+
100
+ if (findings.length > 0) {
101
+ const injectSteps = findings.map(function(f) { return { ephemeralMessage: f }; });
102
+ process.stdout.write(JSON.stringify({ injectSteps: injectSteps }) + '\n');
103
+ } else {
104
+ process.stdout.write(JSON.stringify({}) + '\n');
105
+ }
106
+ } catch (e) {
107
+ process.stdout.write(JSON.stringify({}) + '\n');
108
+ }
109
+ }
63
110
 
64
- checkLivingDocNudge(filePath, findings);
111
+ function processSingleEdit(toolName, toolInput, emitFn, skipArray) {
112
+ const filePath = toolInput.file_path || '';
113
+ if (!filePath) return;
114
+ const findings = [];
65
115
 
66
- if (ext !== 'md') {
67
- checkWorkflowGate(toolName, filePath, ext, findings);
116
+ if (filePath.endsWith('package.json')) {
117
+ checkDependencyAddition(toolName, toolInput, findings);
118
+ }
119
+
120
+ const ext = path.extname(filePath).slice(1);
121
+ if (SOURCE_EXTENSIONS.has(ext)) {
122
+ if (toolName === 'Edit') {
123
+ checkLocDelta(toolInput, filePath, findings);
124
+ } else if (toolName === 'Write') {
125
+ checkNewFileSize(toolInput, filePath, findings);
68
126
  }
127
+ }
69
128
 
70
- if (findings.length === 0) return;
129
+ checkLivingDocNudge(filePath, findings);
71
130
 
72
- const nudge = '[ASC enforcement] ' + findings.join(' ') + ' Review the decision ladder before continuing.';
73
- emit(nudge);
74
- } catch (_) {
75
- // Silent fail — enforcement must not break the session
131
+ if (ext !== 'md') {
132
+ checkWorkflowGate(toolName, filePath, ext, findings);
76
133
  }
77
- });
134
+
135
+ if (findings.length === 0) return;
136
+
137
+ const nudge = '[ASC enforcement] ' + findings.join(' ') + ' Review the decision ladder before continuing.';
138
+ emitFn(nudge);
139
+ }
140
+
141
+ function emitClaude(nudge) {
142
+ try {
143
+ const isCopilot = Boolean(process.env.COPILOT_PLUGIN_DATA);
144
+ let output = {
145
+ hookSpecificOutput: {
146
+ hookEventName: 'PostToolUse',
147
+ additionalContext: nudge,
148
+ },
149
+ };
150
+ if (isCopilot) {
151
+ output = { additionalContext: nudge };
152
+ }
153
+ process.stdout.write(JSON.stringify(output) + '\n');
154
+ } catch (_) {}
155
+ }
78
156
 
79
157
  function checkDependencyAddition(toolName, toolInput, findings) {
80
158
  var target = toolName === 'Edit' ? (toolInput.new_string || '') : (toolInput.content || '');
@@ -215,20 +293,4 @@ function validateDocSpecs(workflow, findings) {
215
293
  } catch (_) {}
216
294
  }
217
295
 
218
- function emit(nudge) {
219
- try {
220
- var isCopilot = Boolean(process.env.COPILOT_PLUGIN_DATA);
221
- var output = {
222
- hookSpecificOutput: {
223
- hookEventName: 'PostToolUse',
224
- additionalContext: nudge,
225
- },
226
- };
227
- if (isCopilot) {
228
- output = { additionalContext: nudge };
229
- }
230
- process.stdout.write(JSON.stringify(output));
231
- } catch (_) {
232
- // EPIPE — silent
233
- }
234
- }
296
+
@@ -27,8 +27,9 @@ process.stdin.on('data', function (chunk) { inputBuffer += chunk; });
27
27
  process.stdin.on('end', function () {
28
28
  try {
29
29
  const data = JSON.parse(inputBuffer);
30
- const toolName = data.tool_name || data.toolName || '';
31
- const toolInput = data.tool_input || data.toolInput || {};
30
+ const isAntigravity = !!data.toolCall;
31
+ const toolName = isAntigravity ? data.toolCall.name : (data.tool_name || data.toolName || '');
32
+ const toolInput = isAntigravity ? data.toolCall.args : (data.tool_input || data.toolInput || {});
32
33
  let added = [];
33
34
 
34
35
  const isTerminal = ['Bash', 'run_command', 'run_shell_command', 'terminal', 'execute_command'].includes(toolName);
@@ -72,15 +73,23 @@ process.stdin.on('end', function () {
72
73
  + ' duplicates standard library or native platform features. '
73
74
  + 'Ladder step 3: use stdlib/native features instead, or add to .asc/dependency-allowlist.json to override.';
74
75
 
75
- const output = {
76
- allow_tool: false,
77
- deny_reason: reason,
78
- hookSpecificOutput: {
79
- hookEventName: 'PreToolUse',
80
- permissionDecision: 'deny',
81
- permissionDecisionReason: reason
82
- }
83
- };
76
+ let output;
77
+ if (isAntigravity) {
78
+ output = {
79
+ decision: "deny",
80
+ reason: reason
81
+ };
82
+ } else {
83
+ output = {
84
+ allow_tool: false,
85
+ deny_reason: reason,
86
+ hookSpecificOutput: {
87
+ hookEventName: 'PreToolUse',
88
+ permissionDecision: 'deny',
89
+ permissionDecisionReason: reason
90
+ }
91
+ };
92
+ }
84
93
  process.stdout.write(JSON.stringify(output) + '\n');
85
94
  process.exit(2);
86
95
  return;
@@ -6,7 +6,7 @@
6
6
  "hooks": [
7
7
  {
8
8
  "type": "command",
9
- "command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/session-start.js\"; exit 0",
9
+ "command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','session-start.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','session-start.js');require(fs.existsSync(local)?local:global);\"",
10
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..."
@@ -19,7 +19,7 @@
19
19
  "hooks": [
20
20
  {
21
21
  "type": "command",
22
- "command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/subagent-start.js\"; exit 0",
22
+ "command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','subagent-start.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','subagent-start.js');require(fs.existsSync(local)?local:global);\"",
23
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..."
@@ -34,7 +34,7 @@
34
34
  {
35
35
  "type": "command",
36
36
  "if": "Edit(**/package.json)",
37
- "command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/pre-tool-dependency-gate.js\"; exit 0",
37
+ "command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','pre-tool-dependency-gate.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','pre-tool-dependency-gate.js');require(fs.existsSync(local)?local:global);\"",
38
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)..."
@@ -42,7 +42,7 @@
42
42
  {
43
43
  "type": "command",
44
44
  "if": "Write(**/package.json)",
45
- "command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/pre-tool-dependency-gate.js\"; exit 0",
45
+ "command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','pre-tool-dependency-gate.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','pre-tool-dependency-gate.js');require(fs.existsSync(local)?local:global);\"",
46
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)..."
@@ -54,7 +54,7 @@
54
54
  "hooks": [
55
55
  {
56
56
  "type": "command",
57
- "command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/pre-tool-dependency-gate.js\"; exit 0",
57
+ "command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','pre-tool-dependency-gate.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','pre-tool-dependency-gate.js');require(fs.existsSync(local)?local:global);\"",
58
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)..."
@@ -68,7 +68,7 @@
68
68
  "hooks": [
69
69
  {
70
70
  "type": "command",
71
- "command": "node \"${CLAUDE_PLUGIN_ROOT:-$HOME/.gemini/config/plugins/agentic-senior-core}/hooks/post-edit-enforce.js\"; exit 0",
71
+ "command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','post-edit-enforce.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','post-edit-enforce.js');require(fs.existsSync(local)?local:global);\"",
72
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..."
@@ -81,6 +81,13 @@
81
81
  }
82
82
  ]
83
83
  }
84
+ ],
85
+ "PostInvocation": [
86
+ {
87
+ "type": "command",
88
+ "command": "node -e \"const p=require('path'),fs=require('fs'),os=require('os');const local=p.join(process.cwd(),'.agents','plugins','agentic-senior-core','hooks','post-edit-enforce.js');const global=p.join(os.homedir(),'.gemini','config','plugins','agentic-senior-core','hooks','post-edit-enforce.js');require(fs.existsSync(local)?local:global);\"",
89
+ "timeout": 15
90
+ }
84
91
  ]
85
92
  }
86
- }
93
+ }
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "name": "agentic-senior-core",
3
- "version": "5.8.21",
3
+ "version": "5.8.23",
4
4
  "description": "Universal AI coding rules. Write code like a staff engineer.",
5
5
  "contextFileName": "rules/agentic-senior-core.md",
6
- "rules": ["rules/"],
7
- "commands": ["commands/"],
8
- "skills": ["skills/"],
6
+ "rules": [
7
+ "rules/"
8
+ ],
9
+ "commands": [
10
+ "commands/"
11
+ ],
12
+ "skills": [
13
+ "skills/"
14
+ ],
9
15
  "hooks": "hooks.json"
10
16
  }
@@ -8,17 +8,16 @@ description: >
8
8
 
9
9
  Structured greenfield workflow. Prevents building before alignment on what to build.
10
10
 
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.
11
+ Grounded in: Spec-Driven Development (SDD) with scaffolding-spec approach. Core spec documents guide greenfield implementation (`PRD.md`, `Architecture.md`, `Schema.md`). Once implemented, the code becomes the primary ground truth, while docs are updated on structural changes.
12
12
 
13
- ## Gate Mechanism & 4 Spec Document Requirement
13
+ ## Gate Mechanism & 3 Spec Document Requirement
14
14
 
15
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.
16
16
 
17
- For greenfield projects (`asc-new-project`), Phase 2 requires creating the **4 Core SDD Documents** in `docs/` or project root:
17
+ For greenfield projects (`asc-new-project`), Phase 2 requires creating the **3 Core SDD Documents** in `docs/` or project root:
18
18
  1. `PRD.md` — Product intent, goals, non-goals, and user problems.
19
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.
20
+ 3. `Schema.md` — Data contracts, database entities, API endpoints.
22
21
 
23
22
  *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.
24
23
 
@@ -43,7 +42,7 @@ Format:
43
42
  ## Phase 2: Spec (No Implementation Code)
44
43
 
45
44
  1. On approval of Phase 1, update `workflow-gate.json` phase to `plan`.
46
- 2. Generate the 4 core SDD documents from templates (`docs/PRD.md`, `docs/Architecture.md`, `docs/Design.md`, `docs/Schema.md`).
45
+ 2. Generate the 3 core SDD documents from templates (`docs/PRD.md`, `docs/Architecture.md`, `docs/Schema.md`).
47
46
  3. Verify exact file naming — check for typos like `Architectyre.md`.
48
47
  4. Output specs for review.
49
48
  5. **STOP and wait for user approval.** Do not implement code.
package/README.md CHANGED
@@ -224,9 +224,9 @@ Copies one file to `.openhands/microagents/agentic-senior-core.md`. Repeat per p
224
224
  </details>
225
225
 
226
226
  <details>
227
- <summary><b>Google Antigravity IDE</b></summary>
227
+ <summary><b>Google Antigravity (2.0, IDE, and CLI)</b></summary>
228
228
 
229
- **Option A -- workspace rules (per project):**
229
+ **Option A -- workspace rules (per project for 2.0 and IDE only):**
230
230
 
231
231
  Copy the rules file into your project's `.agents/rules/` directory:
232
232
 
@@ -244,9 +244,9 @@ mkdir .agents\rules -Force
244
244
  cp "$(npm root -g)/@ryuenn3123/agentic-senior-core/.agents/rules/agentic-senior-core.md" .agents\rules\
245
245
  ```
246
246
 
247
- Antigravity IDE reads it automatically with `trigger: always_on`.
247
+ Antigravity IDE and 2.0 read it automatically with `trigger: always_on`. *(Note: Antigravity CLI does not support workspace plugins, use Option B for CLI).*
248
248
 
249
- **Option B -- global install (all projects):**
249
+ **Option B -- global install (all projects and ALL clients):**
250
250
 
251
251
  One command (works on all platforms):
252
252
 
@@ -254,25 +254,15 @@ One command (works on all platforms):
254
254
  asc global --antigravity
255
255
  ```
256
256
 
257
- This installs:
258
- - **Plugin bundle** (skills: `/asc-review`, `/asc-audit`, etc. and **rules**) `~/.gemini/config/plugins/agentic-senior-core/`
257
+ This automatically stages the plugin bundle (skills, rules, hooks, and MCP servers) for:
258
+ - **Antigravity 2.0 & IDE** (`~/.gemini/config/plugins/agentic-senior-core/`)
259
+ - **Antigravity CLI** (`~/.gemini/antigravity-cli/plugins/agentic-senior-core/`)
259
260
 
260
- If you previously installed to `~/.gemini/antigravity-ide/plugins/agentic-senior-core/` or `~/.gemini/config/skills/` (v5.8.4 or earlier), the old paths are cleaned up automatically.
261
+ If you previously installed to legacy locations (v5.8.4 or earlier), the old paths are cleaned up automatically.
261
262
 
262
263
  > Note: `npm update -g` refreshes the npm package only. The global copy does not auto-update -- re-run `asc global --antigravity` after each update.
263
264
 
264
- > **WSL / dual-environment:** `asc global --antigravity` writes to the HOME directory of the current environment. If you use both Windows native and WSL, run it separately in each terminal. The same applies to `agy plugin install` for Antigravity CLI.
265
-
266
- </details>
267
-
268
- <details>
269
- <summary><b>Google Antigravity CLI</b></summary>
270
-
271
- Requires [Antigravity CLI](https://antigravity.google) (`agy`) installed separately.
272
-
273
- ```bash
274
- agy plugin install https://github.com/fatidaprilian/Agentic-Senior-Core.git
275
- ```
265
+ > **WSL / dual-environment:** `asc global --antigravity` writes to the HOME directory of the current environment. If you use both Windows native and WSL, run it separately in each terminal.
276
266
 
277
267
  </details>
278
268
 
@@ -307,7 +297,7 @@ asc global --all
307
297
 
308
298
  | Tool | Global location | Notes |
309
299
  |------|----------------|-------|
310
- | Google Antigravity IDE | `~/.gemini/config/plugins/agentic-senior-core/` | Plugin bundle (skills) + internal rules |
300
+ | Google Antigravity (2.0, IDE, CLI) | `~/.gemini/config/plugins/...` and `~/.gemini/antigravity-cli/plugins/...` | Plugin bundle (skills, hooks, rules) |
311
301
  | Cline | `~/Documents/Cline/Rules/` | Toggleable in the Cline rules panel |
312
302
  | Kilo Code | `~/.kilocode/rules/` | Or point `instructions:` in `~/.config/kilo/kilo.jsonc` at the npm package path — that variant auto-updates |
313
303
  | Kiro | `~/.kiro/steering/` | Some builds have global-steering loading bugs; fall back to `asc adapter --kiro` |
@@ -1,12 +1,18 @@
1
1
  {
2
2
  "name": "agentic-senior-core",
3
- "version": "5.8.21",
3
+ "version": "5.8.23",
4
4
  "description": "Universal AI coding rules. Write code like a staff engineer.",
5
5
  "author": "fatidaprilian",
6
6
  "license": "MIT",
7
- "contextFileName": "rules/agentic-senior-core.md",
8
- "rules": ["rules/"],
9
- "commands": ["commands/"],
10
- "skills": ["skills/"],
11
- "hooks": "hooks/hooks.json"
7
+ "contextFileName": ".agents/plugins/agentic-senior-core/rules/agentic-senior-core.md",
8
+ "rules": [
9
+ ".agents/plugins/agentic-senior-core/rules/"
10
+ ],
11
+ "commands": [
12
+ ".agents/plugins/agentic-senior-core/commands/"
13
+ ],
14
+ "skills": [
15
+ ".agents/plugins/agentic-senior-core/skills/"
16
+ ],
17
+ "hooks": ".agents/plugins/agentic-senior-core/hooks.json"
12
18
  }
@@ -10,62 +10,62 @@ const ADAPTER_TARGETS = {
10
10
  cursor: {
11
11
  label: 'Cursor',
12
12
  targetPath: '.cursor/rules/agentic-senior-core.mdc',
13
- sourcePath: '.cursor/rules/agentic-senior-core.mdc',
13
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
14
14
  },
15
15
  windsurf: {
16
16
  label: 'Windsurf (legacy)',
17
17
  targetPath: '.windsurf/rules/agentic-senior-core.md',
18
- sourcePath: '.windsurf/rules/agentic-senior-core.md',
18
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
19
19
  },
20
20
  devin: {
21
21
  label: 'Devin Desktop',
22
22
  targetPath: '.devin/rules/agentic-senior-core.md',
23
- sourcePath: '.devin/rules/agentic-senior-core.md',
23
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
24
24
  },
25
25
  cline: {
26
26
  label: 'Cline',
27
27
  targetPath: '.clinerules/agentic-senior-core.md',
28
- sourcePath: '.clinerules/agentic-senior-core.md',
28
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
29
29
  },
30
30
  copilot: {
31
31
  label: 'GitHub Copilot',
32
32
  targetPath: '.github/copilot-instructions.md',
33
- sourcePath: '.github/copilot-instructions.md',
33
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
34
34
  },
35
35
  kiro: {
36
36
  label: 'Kiro',
37
37
  targetPath: '.kiro/steering/agentic-senior-core.md',
38
- sourcePath: '.kiro/steering/agentic-senior-core.md',
38
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
39
39
  },
40
40
  continue: {
41
41
  label: 'Continue',
42
42
  targetPath: '.continue/rules/agentic-senior-core.md',
43
- sourcePath: '.continue/rules/agentic-senior-core.md',
43
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
44
44
  },
45
45
  zed: {
46
46
  label: 'Zed',
47
47
  targetPath: '.zed/rules/agentic-senior-core.md',
48
- sourcePath: '.zed/rules/agentic-senior-core.md',
48
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
49
49
  },
50
50
  aider: {
51
51
  label: 'Aider',
52
52
  targetPath: 'CONVENTIONS.md',
53
- sourcePath: 'CONVENTIONS.md',
53
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
54
54
  },
55
55
  kilocode: {
56
56
  label: 'Kilo Code',
57
57
  targetPath: '.kilocode/rules/agentic-senior-core.md',
58
- sourcePath: '.kilocode/rules/agentic-senior-core.md',
58
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
59
59
  },
60
60
  roo: {
61
61
  label: 'Roo Code',
62
62
  targetPath: '.roo/rules/agentic-senior-core.md',
63
- sourcePath: '.roo/rules/agentic-senior-core.md',
63
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
64
64
  },
65
65
  openhands: {
66
66
  label: 'OpenHands',
67
67
  targetPath: '.openhands/microagents/agentic-senior-core.md',
68
- sourcePath: '.openhands/microagents/agentic-senior-core.md',
68
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
69
69
  },
70
70
  };
71
71
 
@@ -95,7 +95,15 @@ async function generateAdapter(targetDirectory, adapterKey) {
95
95
  }
96
96
 
97
97
  await fs.mkdir(targetDir, { recursive: true });
98
- await fs.copyFile(sourcePath, targetPath);
98
+
99
+ if (adapterKey === 'copilot') {
100
+ const rulesContent = await fs.readFile(sourcePath, 'utf8');
101
+ const instructionsContent = `---\napplyTo: '**'\n---\n\n${rulesContent}`;
102
+ await fs.writeFile(targetPath, instructionsContent);
103
+ } else {
104
+ await fs.copyFile(sourcePath, targetPath);
105
+ }
106
+
99
107
  console.log(` ${adapter.label}: ${adapter.targetPath} ... OK`);
100
108
  return true;
101
109
  }
@@ -26,10 +26,10 @@ const OLD_PATHS = [
26
26
 
27
27
  const GLOBAL_TARGETS = {
28
28
  antigravity: {
29
- label: 'Google Antigravity IDE',
29
+ label: 'Google Antigravity (2.0, IDE, CLI)',
30
30
  kind: 'antigravity-ide',
31
31
  pluginSourcePath: '.agents/plugins/agentic-senior-core',
32
- rulesSourcePath: '.agents/rules/agentic-senior-core.md',
32
+ rulesSourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
33
33
  pluginTargetPath: () => path.join(HOME, '.gemini', 'config', 'plugins', 'agentic-senior-core'),
34
34
  rulesTargetPath: () => path.join(HOME, '.gemini', 'GEMINI.md'),
35
35
  targetPath: () => path.join(HOME, '.gemini', 'config', 'plugins', 'agentic-senior-core'),
@@ -38,49 +38,49 @@ const GLOBAL_TARGETS = {
38
38
  cline: {
39
39
  label: 'Cline',
40
40
  kind: 'file',
41
- sourcePath: '.clinerules/agentic-senior-core.md',
41
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
42
42
  targetPath: () => path.join(HOME, 'Documents', 'Cline', 'Rules', 'agentic-senior-core.md'),
43
43
  note: 'Toggleable in the Cline rules panel.',
44
44
  },
45
45
  roo: {
46
46
  label: 'Roo Code',
47
47
  kind: 'file',
48
- sourcePath: '.roo/rules/agentic-senior-core.md',
48
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
49
49
  targetPath: () => path.join(HOME, '.roo', 'rules', 'agentic-senior-core.md'),
50
50
  note: 'Roo Code was discontinued in May 2026; kept for existing installs.',
51
51
  },
52
52
  kilocode: {
53
53
  label: 'Kilo Code',
54
54
  kind: 'file',
55
- sourcePath: '.kilocode/rules/agentic-senior-core.md',
55
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
56
56
  targetPath: () => path.join(HOME, '.kilocode', 'rules', 'agentic-senior-core.md'),
57
57
  note: 'Kilo v7+: prefer adding the file path to the instructions array in ~/.config/kilo/kilo.jsonc (auto-updates with npm).',
58
58
  },
59
59
  kiro: {
60
60
  label: 'Kiro',
61
61
  kind: 'file',
62
- sourcePath: '.kiro/steering/agentic-senior-core.md',
62
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
63
63
  targetPath: () => path.join(HOME, '.kiro', 'steering', 'agentic-senior-core.md'),
64
64
  note: 'Global steering has known loading bugs in some Kiro builds; fall back to asc adapter --kiro if rules are not picked up.',
65
65
  },
66
66
  openhands: {
67
67
  label: 'OpenHands',
68
68
  kind: 'file',
69
- sourcePath: '.openhands/microagents/agentic-senior-core.md',
69
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
70
70
  targetPath: () => path.join(HOME, '.openhands', 'microagents', 'agentic-senior-core.md'),
71
71
  note: 'Works in CLI/headless/dev modes. Docker runs need the directory mounted.',
72
72
  },
73
73
  windsurf: {
74
74
  label: 'Windsurf / Devin Desktop',
75
75
  kind: 'guarded-file',
76
- sourcePath: '.windsurf/rules/agentic-senior-core.md',
76
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
77
77
  targetPath: () => path.join(HOME, '.codeium', 'windsurf', 'memories', 'global_rules.md'),
78
78
  note: 'Single global file (6,000 char limit). Skipped if you already have your own global_rules.md.',
79
79
  },
80
80
  copilot: {
81
81
  label: 'GitHub Copilot (VS Code)',
82
82
  kind: 'copilot-user-instructions',
83
- sourcePath: '.github/copilot-instructions.md',
83
+ sourcePath: '.agents/plugins/agentic-senior-core/rules/agentic-senior-core.md',
84
84
  targetPath: () => path.join(vscodeUserPromptsDirectory(), 'agentic-senior-core.instructions.md'),
85
85
  note: 'Installs into the VS Code default profile. Other profiles need their own copy.',
86
86
  },
@@ -172,6 +172,7 @@ async function installAntigravityIde(target) {
172
172
  const pluginSource = path.join(REPOSITORY_ROOT, target.pluginSourcePath);
173
173
  const rulesSource = path.join(REPOSITORY_ROOT, target.rulesSourcePath);
174
174
  const pluginTargetPath = target.pluginTargetPath();
175
+ const cliTargetPath = path.join(HOME, '.gemini', 'antigravity-cli', 'plugins', 'agentic-senior-core');
175
176
  const rulesTargetPath = target.rulesTargetPath();
176
177
 
177
178
  if (!(await pathExists(pluginSource))) {
@@ -183,17 +184,26 @@ async function installAntigravityIde(target) {
183
184
  return false;
184
185
  }
185
186
 
186
- // Copy plugin bundle (plugin.json + skills/) to ~/.gemini/antigravity-ide/plugins/agentic-senior-core/
187
+ // Copy plugin bundle to IDE / 2.0 (~/.gemini/config/plugins/agentic-senior-core/)
187
188
  await fs.mkdir(path.dirname(pluginTargetPath), { recursive: true });
188
189
  await copyDirRecursive(pluginSource, pluginTargetPath);
190
+
191
+ // Copy plugin bundle to CLI (~/.gemini/antigravity-cli/plugins/agentic-senior-core/)
192
+ await fs.mkdir(path.dirname(cliTargetPath), { recursive: true });
193
+ await copyDirRecursive(pluginSource, cliTargetPath);
189
194
 
190
195
  // Clean up old hooks/hooks.json duplicate from previous versions
191
196
  const oldHooksJson = path.join(pluginTargetPath, 'hooks', 'hooks.json');
192
197
  if (await pathExists(oldHooksJson)) {
193
198
  await fs.rm(oldHooksJson);
194
199
  }
200
+ const oldHooksJsonCli = path.join(cliTargetPath, 'hooks', 'hooks.json');
201
+ if (await pathExists(oldHooksJsonCli)) {
202
+ await fs.rm(oldHooksJsonCli);
203
+ }
195
204
 
196
- console.log(` ${target.label}: plugin -> ${pluginTargetPath} ... OK`);
205
+ console.log(` ${target.label}: IDE/2.0 plugin -> ${pluginTargetPath} ... OK`);
206
+ console.log(` ${target.label}: CLI plugin -> ${cliTargetPath} ... OK`);
197
207
 
198
208
  // The IDE automatically loads the plugin bundle's internal rules/ folder!
199
209
  // Appending to GEMINI.md causes double rules (1,250 tokens x 2).