gsd-antigravity-kit 1.0.0
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/.agent/skills/gsd-converter/SKILL.md +49 -0
- package/.agent/skills/gsd-converter/assets/gsd_skill_template.md +70 -0
- package/.agent/skills/gsd-converter/references/mapping.md +32 -0
- package/.agent/skills/gsd-converter/scripts/convert.py +221 -0
- package/CONTRIBUTING.md +30 -0
- package/LICENSE +21 -0
- package/README.md +112 -0
- package/bin/install.js +53 -0
- package/package.json +20 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-converter
|
|
3
|
+
description: "A tool for converting standard GSD (Get Shit Done) installations into the Antigravity Skill format. Use this skill when you want to migrate `.claude/gsd` commands, agents, and templates into a portable, spec-driven skill structure for Claude Code."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# GSD to Antigravity Skill Converter
|
|
7
|
+
|
|
8
|
+
This skill provides the logic and resources to package a locally installed GSD system into a structured Antigravity Skill.
|
|
9
|
+
|
|
10
|
+
## Why Convert?
|
|
11
|
+
1. **Portability**: Skills can be shared and loaded across different projects more easily than local `.claude` commands.
|
|
12
|
+
2. **Spec-Driven**: Leverages the Antigravity spec-driven coding system for better reliability.
|
|
13
|
+
3. **Organized**: Separates commands, documentation, workflows, and templates into clear directories.
|
|
14
|
+
|
|
15
|
+
## Conversion Workflow
|
|
16
|
+
|
|
17
|
+
1. **Cleanup**: Deletes existing `.agent/skills/gsd/` folder to ensure a clean slate.
|
|
18
|
+
|
|
19
|
+
2. **Installation**: Runs `npx get-shit-done-cc --claude --local --force-statusline` to fetch/refresh the source files in `.claude/`.
|
|
20
|
+
|
|
21
|
+
3. **Detection**: The skill locates the fresh GSD files:
|
|
22
|
+
- Commands: `.claude/commands/gsd/`
|
|
23
|
+
- Docs/Workflows: `.claude/get-shit-done/`
|
|
24
|
+
- Agents: `.claude/agents/`
|
|
25
|
+
|
|
26
|
+
4. **Initialization**: Re-creates the target skill structure in `.agent/skills/gsd/`.
|
|
27
|
+
|
|
28
|
+
5. **Migration**:
|
|
29
|
+
- Copies command markdown files to `references/commands/`.
|
|
30
|
+
- Copies reference docs to `references/docs/`.
|
|
31
|
+
- Copies workflows to `references/workflows/`.
|
|
32
|
+
- Copies agents to `references/agents/`.
|
|
33
|
+
- Copies templates to `assets/templates/`.
|
|
34
|
+
|
|
35
|
+
6. **Refactoring**:
|
|
36
|
+
- Rewrites file inclusion paths (e.g., `@./.claude/...`) to the new skill-relative format (e.g., `@references/...`).
|
|
37
|
+
- Updates `Task()` prompt paths for subagents.
|
|
38
|
+
- **Rebranding**: Automatically converts "Claude" and "Claude Code" mentions to "Antigravity" throughout all migrated files.
|
|
39
|
+
|
|
40
|
+
7. **Packaging**: Generates a comprehensive `SKILL.md` using the `assets/gsd_skill_template.md` template, ensuring compliance with skill-developer best practices.
|
|
41
|
+
|
|
42
|
+
## Usage
|
|
43
|
+
|
|
44
|
+
Run the conversion script:
|
|
45
|
+
```bash
|
|
46
|
+
python .agent/skills/gsd-converter/scripts/convert.py <target-skill-name>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Refer to `references/mapping.md` for details on how paths are translated.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: {skill_name}
|
|
3
|
+
description: "Antigravity GSD (Get Stuff Done) - A spec-driven hierarchical planning and execution system. Triggers on project planning, phase management, and GSD slash commands."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# {title_name}
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
The Antigravity GSD (Get Stuff Done) skill implements a rigid, spec-driven hierarchy for managing software development tasks. It enforces a separation of concerns between Planning, Execution, and Verification phases to reduce context switching and improve reliability.
|
|
11
|
+
|
|
12
|
+
## When to Use This Skill
|
|
13
|
+
|
|
14
|
+
This skill should be used when:
|
|
15
|
+
1. **Starting a Project**: Initializing a new codebase or feature set with a clear structure.
|
|
16
|
+
2. **Planning Work**: Breaking down vague requirements into actionable, verified specifications.
|
|
17
|
+
3. **Executing Tasks**: Implementing code based on approved specs without context switching.
|
|
18
|
+
4. **Managing State**: Tracking progress through defined phases (Plan -> Execute -> Verify).
|
|
19
|
+
|
|
20
|
+
**Triggers:**
|
|
21
|
+
- Keywords: "plan phase", "execute phase", "new project spec", "gsd"
|
|
22
|
+
- Commands:
|
|
23
|
+
{command_triggers}
|
|
24
|
+
|
|
25
|
+
## System Overview
|
|
26
|
+
|
|
27
|
+
### 1. Phase-Based Development
|
|
28
|
+
The system enforces distinct phases. You typically cannot execute until you have planned.
|
|
29
|
+
- **Plan**: Define specs, tasks, and acceptance criteria. Output is a plan artifact.
|
|
30
|
+
- **Execute**: Write code to satisfy the specs. Driven by the plan artifact.
|
|
31
|
+
- **Verify**: Confirm the code meets criteria.
|
|
32
|
+
|
|
33
|
+
### 2. Available Commands
|
|
34
|
+
The following slash commands are available in this skill. Use them to drive the GSD process:
|
|
35
|
+
|
|
36
|
+
{commands_list}
|
|
37
|
+
|
|
38
|
+
### 3. Directory Structure
|
|
39
|
+
The skill uses a standardized directory structure for portability and organization:
|
|
40
|
+
- `references/commands/`: Executable slash command definitions.
|
|
41
|
+
- `references/agents/`: Specialized agent prompts and personas used by the commands.
|
|
42
|
+
- `references/workflows/`: Step-by-step standard operating procedures and guidelines.
|
|
43
|
+
- `references/docs/`: Contextual documentation and guides on the GSD philosophy.
|
|
44
|
+
- `assets/templates/`: Reusable file structures for plans, tasks, and reports.
|
|
45
|
+
|
|
46
|
+
## Reference Files
|
|
47
|
+
|
|
48
|
+
For detailed instructions, consult the following resources:
|
|
49
|
+
|
|
50
|
+
### [Commands Reference](references/commands/)
|
|
51
|
+
List of all available slash commands and their detailed arguments. Look here to understand how to invoke specific GSD actions.
|
|
52
|
+
|
|
53
|
+
### [Workflow Guides](references/workflows/)
|
|
54
|
+
Standard procedures for common development tasks. These documents describe the "how-to" for the GSD process.
|
|
55
|
+
|
|
56
|
+
### [Agent Definitions](references/agents/)
|
|
57
|
+
Capabilities and personas of the specialized agents. Useful for understanding who does what in the multi-agent setup.
|
|
58
|
+
|
|
59
|
+
### [Documentation](references/docs/)
|
|
60
|
+
General documentation on the GSD philosophy, usage patterns, and configuration.
|
|
61
|
+
|
|
62
|
+
## Best Practices
|
|
63
|
+
|
|
64
|
+
1. **Follow the Sequence**: Do not skip the Planning phase. A good plan saves hours of debugging.
|
|
65
|
+
2. **Use Templates**: Leverage `assets/templates/` for consistent file structures.
|
|
66
|
+
3. **Update State**: Keep the project state synchronized using `/gsd:progress`.
|
|
67
|
+
4. **One Context**: Keep separate contexts (channels/threads) for Planning vs Execution to avoid contamination.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
*Generated by gsd-converter on {date}*
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Path Mapping Reference
|
|
2
|
+
|
|
3
|
+
When converting from a standard GSD installation to an Antigravity Skill, paths are refactored to ensure the skill is self-contained and portable.
|
|
4
|
+
|
|
5
|
+
## Directory Mapping
|
|
6
|
+
|
|
7
|
+
| Source GSD Path | Target Skill Path | Purpose |
|
|
8
|
+
|-----------------|-------------------|---------|
|
|
9
|
+
| `.claude/commands/gsd/` | `references/commands/` | Interactive slash commands |
|
|
10
|
+
| `.claude/get-shit-done/references/` | `references/docs/` | Static domain knowledge and guides |
|
|
11
|
+
| `.claude/get-shit-done/workflows/` | `references/workflows/` | Multi-step procedural logic |
|
|
12
|
+
| `.claude/agents/` | `references/agents/` | Specialized sub-agent system prompts |
|
|
13
|
+
| `.claude/get-shit-done/templates/` | `assets/templates/` | File boilerplate (PROJECT.md, etc.) |
|
|
14
|
+
|
|
15
|
+
## String Replacements (Regex)
|
|
16
|
+
|
|
17
|
+
The conversion script performs the following replacements within `.md` and `.json` files:
|
|
18
|
+
|
|
19
|
+
1. **File Inclusion Syntax (`@`)**
|
|
20
|
+
- `@./.claude/commands/gsd/` -> `@references/commands/`
|
|
21
|
+
- `@./.claude/get-shit-done/references/` -> `@references/docs/`
|
|
22
|
+
- `@./.claude/get-shit-done/workflows/` -> `@references/workflows/`
|
|
23
|
+
- `@./.claude/get-shit-done/templates/` -> `@assets/templates/`
|
|
24
|
+
- `@./.claude/agents/` -> `@references/agents/`
|
|
25
|
+
|
|
26
|
+
2. **Programmatic Paths (e.g., in `Task()` calls)**
|
|
27
|
+
- `./.claude/agents/` -> `references/agents/`
|
|
28
|
+
- `./.claude/get-shit-done/templates/` -> `assets/templates/`
|
|
29
|
+
- `./.claude/get-shit-done/workflows/` -> `references/workflows/`
|
|
30
|
+
|
|
31
|
+
## Project Context
|
|
32
|
+
References to `@.planning/` are **preserved**, as these refer to the active project's local planning directory, not the skill's own resources.
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
import shutil
|
|
4
|
+
import sys
|
|
5
|
+
import argparse
|
|
6
|
+
import subprocess
|
|
7
|
+
from datetime import datetime
|
|
8
|
+
|
|
9
|
+
def setup_args():
|
|
10
|
+
parser = argparse.ArgumentParser(description='Convert GSD to Antigravity Skill format.')
|
|
11
|
+
parser.add_argument('skill_name', nargs='?', default='gsd', help='Name of the target skill (default: gsd)')
|
|
12
|
+
parser.add_argument('--path', default='.agent/skills', help='Base path for skills directory')
|
|
13
|
+
parser.add_argument('--source', default='.claude', help='Source .claude directory')
|
|
14
|
+
return parser.parse_args()
|
|
15
|
+
|
|
16
|
+
def get_gsd_version(source_base):
|
|
17
|
+
version_path = os.path.join(source_base, 'get-shit-done', 'VERSION')
|
|
18
|
+
if os.path.exists(version_path):
|
|
19
|
+
try:
|
|
20
|
+
with open(version_path, 'r', encoding='utf-8') as f:
|
|
21
|
+
return f.read().strip()
|
|
22
|
+
except Exception:
|
|
23
|
+
return "unknown"
|
|
24
|
+
return "not installed"
|
|
25
|
+
|
|
26
|
+
def run_gsd_install():
|
|
27
|
+
print("π₯ Running fresh GSD installation via npx...")
|
|
28
|
+
try:
|
|
29
|
+
# We use shell=True because npx is often a shell script/cmd on Windows
|
|
30
|
+
result = subprocess.run(
|
|
31
|
+
["npx", "get-shit-done-cc", "--claude", "--local", "--force-statusline"],
|
|
32
|
+
check=True,
|
|
33
|
+
capture_output=True,
|
|
34
|
+
text=True,
|
|
35
|
+
shell=True
|
|
36
|
+
)
|
|
37
|
+
print(" β
GSD installed successfully to .claude/")
|
|
38
|
+
except subprocess.CalledProcessError as e:
|
|
39
|
+
print(f" β Failed to run npx installation: {e}")
|
|
40
|
+
print(f" Output: {e.output}")
|
|
41
|
+
sys.exit(1)
|
|
42
|
+
|
|
43
|
+
def migrate_files(source_base, target_base):
|
|
44
|
+
print(f"π Starting migration from {source_base} to {target_base}...")
|
|
45
|
+
|
|
46
|
+
# Define mappings (source_rel, target_rel)
|
|
47
|
+
mappings = [
|
|
48
|
+
('commands/gsd', 'references/commands'),
|
|
49
|
+
('get-shit-done/references', 'references/docs'),
|
|
50
|
+
('get-shit-done/workflows', 'references/workflows'),
|
|
51
|
+
('agents', 'references/agents'),
|
|
52
|
+
('get-shit-done/templates', 'assets/templates')
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
for src_rel, tgt_rel in mappings:
|
|
56
|
+
src_path = os.path.join(source_base, src_rel)
|
|
57
|
+
tgt_path = os.path.join(target_base, tgt_rel)
|
|
58
|
+
|
|
59
|
+
if os.path.exists(src_path):
|
|
60
|
+
print(f" π Migrating {src_rel} -> {tgt_rel}")
|
|
61
|
+
if not os.path.exists(tgt_path):
|
|
62
|
+
os.makedirs(tgt_path, exist_ok=True)
|
|
63
|
+
|
|
64
|
+
for item in os.listdir(src_path):
|
|
65
|
+
s = os.path.join(src_path, item)
|
|
66
|
+
d = os.path.join(tgt_path, item)
|
|
67
|
+
if os.path.isdir(s):
|
|
68
|
+
shutil.copytree(s, d, dirs_exist_ok=True)
|
|
69
|
+
else:
|
|
70
|
+
shutil.copy2(s, d)
|
|
71
|
+
else:
|
|
72
|
+
print(f" β οΈ Source not found: {src_path}")
|
|
73
|
+
|
|
74
|
+
def refactor_content(target_base):
|
|
75
|
+
print("π§ Refactoring file contents and paths...")
|
|
76
|
+
|
|
77
|
+
replacements = [
|
|
78
|
+
(r'@\./\.claude/commands/gsd/', '@references/commands/'),
|
|
79
|
+
(r'@\./\.claude/get-shit-done/references/', '@references/docs/'),
|
|
80
|
+
(r'@\./\.claude/get-shit-done/workflows/', '@references/workflows/'),
|
|
81
|
+
(r'@\./\.claude/get-shit-done/templates/', '@assets/templates/'),
|
|
82
|
+
(r'@\./\.claude/agents/', '@references/agents/'),
|
|
83
|
+
(r'\./\.claude/agents/', 'references/agents/'),
|
|
84
|
+
(r'\./\.claude/get-shit-done/templates/', 'assets/templates/'),
|
|
85
|
+
(r'\./\.claude/get-shit-done/workflows/', 'references/workflows/'),
|
|
86
|
+
# Textual replacements
|
|
87
|
+
(r'\bClaude Code\b', 'Antigravity'),
|
|
88
|
+
(r'\bClaude\b', 'Antigravity'),
|
|
89
|
+
(r'\bclaude\b', 'antigravity'),
|
|
90
|
+
(r'\bCLAUDE\b', 'ANTIGRAVITY'),
|
|
91
|
+
]
|
|
92
|
+
|
|
93
|
+
for root, dirs, files in os.walk(target_base):
|
|
94
|
+
for file in files:
|
|
95
|
+
if file.endswith('.md') or file.endswith('.json'):
|
|
96
|
+
file_path = os.path.join(root, file)
|
|
97
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
98
|
+
content = f.read()
|
|
99
|
+
|
|
100
|
+
new_content = content
|
|
101
|
+
for pattern, replacement in replacements:
|
|
102
|
+
new_content = re.sub(pattern, replacement, new_content)
|
|
103
|
+
|
|
104
|
+
if new_content != content:
|
|
105
|
+
with open(file_path, 'w', encoding='utf-8') as f:
|
|
106
|
+
f.write(new_content)
|
|
107
|
+
|
|
108
|
+
def scan_commands(target_base):
|
|
109
|
+
commands_dir = os.path.join(target_base, 'references', 'commands')
|
|
110
|
+
commands = []
|
|
111
|
+
if os.path.exists(commands_dir):
|
|
112
|
+
for f in sorted(os.listdir(commands_dir)):
|
|
113
|
+
if f.endswith('.md'):
|
|
114
|
+
cmd_name = f[:-3] # remove .md
|
|
115
|
+
file_path = os.path.join(commands_dir, f)
|
|
116
|
+
description = ""
|
|
117
|
+
try:
|
|
118
|
+
with open(file_path, 'r', encoding='utf-8') as cf:
|
|
119
|
+
lines = cf.readlines()
|
|
120
|
+
# Simple frontmatter parsing
|
|
121
|
+
if lines and lines[0].strip() == '---':
|
|
122
|
+
for line in lines[1:]:
|
|
123
|
+
if line.strip() == '---':
|
|
124
|
+
break
|
|
125
|
+
if line.strip().startswith('description:'):
|
|
126
|
+
description = line.split(':', 1)[1].strip().strip('"').strip("'")
|
|
127
|
+
break
|
|
128
|
+
except Exception as e:
|
|
129
|
+
print(f" β οΈ Error parsing {f}: {e}")
|
|
130
|
+
|
|
131
|
+
commands.append({'name': cmd_name, 'description': description})
|
|
132
|
+
return commands
|
|
133
|
+
|
|
134
|
+
def create_skill_md(target_base, skill_name):
|
|
135
|
+
skill_md_path = os.path.join(target_base, 'SKILL.md')
|
|
136
|
+
|
|
137
|
+
# We deliberately overwrite SKILL.md to ensure the command list is always up to date
|
|
138
|
+
# on every run of the converter.
|
|
139
|
+
|
|
140
|
+
# Locate the template file relative to this script
|
|
141
|
+
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
142
|
+
template_path = os.path.join(script_dir, '..', 'assets', 'gsd_skill_template.md')
|
|
143
|
+
|
|
144
|
+
commands = scan_commands(target_base)
|
|
145
|
+
|
|
146
|
+
# Format for triggers: - `gsd:command`
|
|
147
|
+
command_triggers_str = "\n".join([f"- `gsd:{cmd['name']}`" for cmd in commands])
|
|
148
|
+
|
|
149
|
+
# Format for detailed list: bold command name with link, then description
|
|
150
|
+
# Example: - **[gsd:new-project](references/commands/new-project.md)**: Initialize a new project...
|
|
151
|
+
commands_list_str = "\n".join([
|
|
152
|
+
f"- **[`gsd:{cmd['name']}`](references/commands/{cmd['name']}.md)**: {cmd['description']}"
|
|
153
|
+
for cmd in commands
|
|
154
|
+
])
|
|
155
|
+
|
|
156
|
+
if not os.path.exists(template_path):
|
|
157
|
+
print(f" β οΈ Template not found at {template_path}. Using fallback.")
|
|
158
|
+
content = f"""---
|
|
159
|
+
name: {skill_name}
|
|
160
|
+
description: "Antigravity GSD (Get Stuff Done) - Fallback."
|
|
161
|
+
---
|
|
162
|
+
# {skill_name}
|
|
163
|
+
Template missing.
|
|
164
|
+
"""
|
|
165
|
+
else:
|
|
166
|
+
with open(template_path, 'r', encoding='utf-8') as f:
|
|
167
|
+
template_content = f.read()
|
|
168
|
+
|
|
169
|
+
title_name = skill_name.upper()
|
|
170
|
+
date_str = datetime.now().strftime('%Y-%m-%d')
|
|
171
|
+
|
|
172
|
+
try:
|
|
173
|
+
content = template_content.format(
|
|
174
|
+
skill_name=skill_name,
|
|
175
|
+
title_name=title_name,
|
|
176
|
+
date=date_str,
|
|
177
|
+
command_triggers=command_triggers_str,
|
|
178
|
+
commands_list=commands_list_str
|
|
179
|
+
)
|
|
180
|
+
except KeyError as e:
|
|
181
|
+
print(f" β οΈ Error formatting template: {e}")
|
|
182
|
+
print(" Check if template contains matching keys.")
|
|
183
|
+
content = template_content
|
|
184
|
+
|
|
185
|
+
with open(skill_md_path, 'w', encoding='utf-8') as f:
|
|
186
|
+
f.write(content)
|
|
187
|
+
print(" β
Created SKILL.md from template with updated commands")
|
|
188
|
+
|
|
189
|
+
def main():
|
|
190
|
+
args = setup_args()
|
|
191
|
+
|
|
192
|
+
# Enforce 'gsd' as the skill name
|
|
193
|
+
skill_name = 'gsd'
|
|
194
|
+
target_base = os.path.abspath(os.path.join(args.path, skill_name))
|
|
195
|
+
|
|
196
|
+
print(f"π§Ή Cleaning up existing skill folder: {target_base}")
|
|
197
|
+
if os.path.exists(target_base):
|
|
198
|
+
shutil.rmtree(target_base)
|
|
199
|
+
|
|
200
|
+
# 0. Capture old version
|
|
201
|
+
old_version = get_gsd_version(args.source)
|
|
202
|
+
|
|
203
|
+
# 1. Run the fresh GSD installation
|
|
204
|
+
run_gsd_install()
|
|
205
|
+
|
|
206
|
+
# 1.1 Capture new version
|
|
207
|
+
new_version = get_gsd_version(args.source)
|
|
208
|
+
|
|
209
|
+
# 2. Re-create the skill directory
|
|
210
|
+
os.makedirs(target_base, exist_ok=True)
|
|
211
|
+
|
|
212
|
+
# 3. Perform migration and refactoring
|
|
213
|
+
migrate_files(args.source, target_base)
|
|
214
|
+
refactor_content(target_base)
|
|
215
|
+
create_skill_md(target_base, skill_name)
|
|
216
|
+
|
|
217
|
+
print(f"\n⨠Skill '{skill_name}' is ready at {target_base}")
|
|
218
|
+
print(f"π GSD Version: {old_version} -> {new_version}")
|
|
219
|
+
|
|
220
|
+
if __name__ == '__main__':
|
|
221
|
+
main()
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Contributing to GSD-Antigravity
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing to GSD-Antigravity! We welcome contributions that improve the reliability, efficiency, and extensibility of our GSD system.
|
|
4
|
+
|
|
5
|
+
## π Getting Started
|
|
6
|
+
|
|
7
|
+
1. **Fork the repository** and create your branch from `main`.
|
|
8
|
+
2. **Follow the Skill Spec**: All changes to skills must adhere to the Antigravity Skill specification found in [.agent/skills/skill-developer/SKILL.md](.agent/skills/skill-developer/SKILL.md).
|
|
9
|
+
3. **Draft your changes**: Whether it's a new command, an agent prompt improvement, or a bug fix in the converter.
|
|
10
|
+
|
|
11
|
+
## π οΈ Development Guidelines
|
|
12
|
+
|
|
13
|
+
- **Maintain Hierarchy**: Ensure any new commands fit into the Plan -> Execute -> Verify workflow.
|
|
14
|
+
- **Spec-Driven**: Use the provided templates in `assets/templates` when creating new project artifacts.
|
|
15
|
+
- **Rebranding**: If adding new commands, ensure they follow the `gsd:` prefix nomenclature.
|
|
16
|
+
- **Testing**: Before submitting a PR, verify your skill by running the `gsd-converter` script to ensure it packages correctly.
|
|
17
|
+
|
|
18
|
+
## π Pull Request Process
|
|
19
|
+
|
|
20
|
+
1. Update the README.md with details of changes to the interface, if applicable.
|
|
21
|
+
2. Ensure any new dependencies are clearly documented.
|
|
22
|
+
3. Your PR will be reviewed by the maintainers for compliance with GSD core principles.
|
|
23
|
+
|
|
24
|
+
## π¬ Community
|
|
25
|
+
|
|
26
|
+
Join our Discord or open an issue for architectural discussions before making major changes.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
*Happy Coding!*
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Antigravity Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# π GSD-Antigravity: The Spec-Driven Engine
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
[](https://www.python.org/downloads/)
|
|
7
|
+
[](https://github.com/google-deepmind/antigravity)
|
|
8
|
+
|
|
9
|
+
**GSD-Antigravity** is a high-performance, hierarchical orchestration system for the Antigravity AI framework. It replaces chaotic prompt-engineering with a **rigid, spec-driven development cycle**, transforming high-level intent into production-grade software with mathematical precision.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## οΏ½ Core Philosophy: The GSD Cycle
|
|
14
|
+
|
|
15
|
+
Most AI development fails because it jumps straight from **intent** to **code**. GSD-Antigravity enforces a non-negotiable protocol:
|
|
16
|
+
|
|
17
|
+
1. **Plan Phase**: Deep-probe requirements, surface hidden assumptions, and generate a serialized `.planning/PLAN.md`.
|
|
18
|
+
2. **Execute Phase**: Atomic, wave-based implementation where agents follow the plan without deviation.
|
|
19
|
+
3. **Verify Phase**: Conversational User Acceptance Testing (UAT) to ensure the implementation matches the original intent.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## β¨ Key Features
|
|
24
|
+
|
|
25
|
+
### π οΈ Hierarchical Planning
|
|
26
|
+
Automatically generates deeply nested project structures, including requirements, architectures, and pitfall analyses before coding begins.
|
|
27
|
+
|
|
28
|
+
### π€ Multi-Agent Orchestration
|
|
29
|
+
Spawns specialized sub-agents with distinct personas:
|
|
30
|
+
- **Researchers**: Investigate 2025-standard tech stacks and ecosystem pitfalls.
|
|
31
|
+
- **Roadmappers**: Build multi-phase project arcs.
|
|
32
|
+
- **Plan Checkers**: Audit plans to catch logic gaps before execution.
|
|
33
|
+
|
|
34
|
+
### π Legacy Migration (`gsd-converter`)
|
|
35
|
+
Includes a zero-config automation script to migrate standard GSD installations into the portable Antigravity Skill format.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## π§° The GSD Toolbox
|
|
40
|
+
|
|
41
|
+
Once installed, the following primary commands drive your project:
|
|
42
|
+
|
|
43
|
+
| Command | Action | Deep Philosophy |
|
|
44
|
+
| :--- | :--- | :--- |
|
|
45
|
+
| `gsd:new-project` | **Initialize** | Context gathering β Research β Roadmap |
|
|
46
|
+
| `gsd:plan-phase` | **Blueprint** | Resolve ambiguity into actionable tasks |
|
|
47
|
+
| `gsd:execute-phase` | **Build** | Wave-based, parallel agent execution |
|
|
48
|
+
| `gsd:verify-work` | **UAT** | Human-in-the-loop verification |
|
|
49
|
+
| `gsd:map-codebase` | **Audit** | Reverse-engineer existing architecture |
|
|
50
|
+
| `gsd:progress` | **Status** | State management and next-step routing |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## π Speed-to-Code
|
|
55
|
+
|
|
56
|
+
### 1οΈβ£ Prerequisites
|
|
57
|
+
- **Antigravity** core installed.
|
|
58
|
+
- **Node.js** (for npx) & **Python 3.8+**.
|
|
59
|
+
|
|
60
|
+
### 2οΈβ£ Installation & Setup
|
|
61
|
+
|
|
62
|
+
Installation is handled via `npx` to automatically provision the `.agent` folder into your current project:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# In your project root:
|
|
66
|
+
npx gsd-antigravity-kit
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
# Then initialize the GSD engine:
|
|
70
|
+
py .agent/skills/gsd-converter/scripts/convert.py gsd
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Alternatively, you can clone the repository manually:
|
|
74
|
+
```bash
|
|
75
|
+
git clone https://github.com/example/GSD-Antigravity.git
|
|
76
|
+
cd GSD-Antigravity
|
|
77
|
+
py .agent/skills/gsd-converter/scripts/convert.py gsd
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 3οΈβ£ Start Your First Project
|
|
81
|
+
```bash
|
|
82
|
+
# Within the Antigravity interface:
|
|
83
|
+
/gsd:new-project
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## π Project Architecture
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
.
|
|
92
|
+
βββ .agent/
|
|
93
|
+
β βββ skills/
|
|
94
|
+
β βββ gsd/ # Generated GSD Skill (Commands & Agents)
|
|
95
|
+
β βββ gsd-converter/ # Migration Tools
|
|
96
|
+
βββ README.md # You are here
|
|
97
|
+
βββ LICENSE # MIT
|
|
98
|
+
βββ CONTRIBUTING.md # How to extend GSD
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## π Resources & Support
|
|
104
|
+
|
|
105
|
+
- π **Documentation**: [docs/](.agent/skills/gsd/references/docs/)
|
|
106
|
+
- πΊοΈ **Roadmap Management**: [ROADMAP.md](.agent/skills/gsd/assets/templates/roadmap.md)
|
|
107
|
+
- π¬ **Community**: Join our Discord for GSD strategy and pattern sharing.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
*Engineered for excellence by the Antigravity Team. π*
|
|
112
|
+
|
package/bin/install.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const { execSync } = require('child_process');
|
|
6
|
+
|
|
7
|
+
async function install() {
|
|
8
|
+
const targetDir = process.cwd();
|
|
9
|
+
// Location of the .agent folder relative to this script in the package
|
|
10
|
+
const sourceAgentDir = path.join(__dirname, '..', '.agent');
|
|
11
|
+
const targetAgentDir = path.join(targetDir, '.agent');
|
|
12
|
+
|
|
13
|
+
console.log('π Initializing GSD-Antigravity Skill System...');
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
// 1. Copy .agent folder
|
|
17
|
+
if (fs.existsSync(sourceAgentDir)) {
|
|
18
|
+
console.log(`π¦ Copying .agent skills to ${targetDir}...`);
|
|
19
|
+
|
|
20
|
+
// We use a simple recursive copy strategy
|
|
21
|
+
copyFolderSync(sourceAgentDir, targetAgentDir);
|
|
22
|
+
console.log('β
.agent folder installed successfully.');
|
|
23
|
+
} else {
|
|
24
|
+
console.error('β Error: Could not find .agent folder in the package.');
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// 2. Offer to run the converter
|
|
29
|
+
console.log('\n⨠GSD-Antigravity is now in your project.');
|
|
30
|
+
console.log('To initialize the GSD engine, run:');
|
|
31
|
+
console.log(' py .agent/skills/gsd-converter/scripts/convert.py gsd\n');
|
|
32
|
+
|
|
33
|
+
} catch (err) {
|
|
34
|
+
console.error('β Installation failed:', err.message);
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function copyFolderSync(from, to) {
|
|
40
|
+
if (!fs.existsSync(to)) {
|
|
41
|
+
fs.mkdirSync(to, { recursive: true });
|
|
42
|
+
}
|
|
43
|
+
fs.readdirSync(from).forEach(element => {
|
|
44
|
+
const stat = fs.lstatSync(path.join(from, element));
|
|
45
|
+
if (stat.isFile()) {
|
|
46
|
+
fs.copyFileSync(path.join(from, element), path.join(to, element));
|
|
47
|
+
} else if (stat.isDirectory()) {
|
|
48
|
+
copyFolderSync(path.join(from, element), path.join(to, element));
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
install();
|
package/package.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gsd-antigravity-kit",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Installer for GSD-Antigravity skills",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"gsd-antigravity-kit": "bin/install.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"antigravity",
|
|
14
|
+
"gsd",
|
|
15
|
+
"automation",
|
|
16
|
+
"skills"
|
|
17
|
+
],
|
|
18
|
+
"author": "Antigravity Team",
|
|
19
|
+
"license": "MIT"
|
|
20
|
+
}
|