@ksuchoi216/ahe 0.1.6 → 0.1.10
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/README.md +82 -214
- package/bin/ahe +34 -231
- package/package.json +8 -4
- package/packages/ahe-antigravity/bin/ahe-antigravity +325 -0
- package/packages/ahe-antigravity/package.json +7 -0
- package/packages/ahe-antigravity/skills/ahe-git/SKILL.md +35 -0
- package/packages/ahe-antigravity/skills/ahe-ship/SKILL.md +28 -0
- package/packages/ahe-antigravity/skills/ahe-ship/scripts/post-ship-hook.sh +12 -0
- package/packages/ahe-codex/.codex/agents/ahe-harness-manager.toml +19 -0
- package/{.codex → packages/ahe-codex/.codex}/ahe-shared/templates/AGENTS.md +11 -10
- package/{.codex/ahe-shared/templates/PRODUCT.md → packages/ahe-codex/.codex/ahe-shared/templates/product.md} +1 -1
- package/packages/ahe-codex/.codex/hooks/ahe-hook.js +296 -0
- package/packages/ahe-codex/.codex/skills/ahe/SKILL.md +34 -0
- package/packages/ahe-codex/.codex/skills/ahe-compress/SKILL.md +120 -0
- package/{.codex/skills/ahe-compression → packages/ahe-codex/.codex/skills/ahe-compress}/agents/openai.yaml +1 -1
- package/{.codex/skills/ahe-compression → packages/ahe-codex/.codex/skills/ahe-compress}/scripts/check-harness-size.sh +18 -6
- package/packages/ahe-codex/.codex/skills/ahe-compress/scripts/detect_stale_tests.py +30 -0
- package/packages/ahe-codex/.codex/skills/ahe-converse/SKILL.md +44 -0
- package/packages/ahe-codex/.codex/skills/ahe-feature/SKILL.md +25 -0
- package/packages/ahe-codex/.codex/skills/ahe-fix/SKILL.md +59 -0
- package/packages/ahe-codex/.codex/skills/ahe-fix/scripts/write_fix_plan.py +108 -0
- package/packages/ahe-codex/.codex/skills/ahe-git/SKILL.md +34 -0
- package/packages/ahe-codex/.codex/skills/ahe-harness/SKILL.md +128 -0
- package/packages/ahe-codex/.codex/skills/ahe-harness-checker/SKILL.md +46 -0
- package/{.codex/skills/ahe-init → packages/ahe-codex/.codex/skills/ahe-new}/SKILL.md +41 -37
- package/packages/ahe-codex/.codex/skills/ahe-overview/SKILL.md +119 -0
- package/packages/ahe-codex/.codex/skills/ahe-review/SKILL.md +43 -0
- package/packages/ahe-codex/.codex/skills/ahe-ship/SKILL.md +58 -0
- package/packages/ahe-codex/.codex/skills/ahe-ship/agents/openai.yaml +4 -0
- package/packages/ahe-codex/.codex/skills/ahe-ship/scripts/write_plan.py +107 -0
- package/packages/ahe-codex/.codex/skills/ahe-solve/SKILL.md +30 -0
- package/packages/ahe-codex/.codex/skills/ahe-think/SKILL.md +114 -0
- package/packages/ahe-codex/bin/ahe-codex +398 -0
- package/packages/ahe-codex/package.json +7 -0
- package/.codex/hooks/ahe-hook.js +0 -236
- package/.codex/skills/ahe-compression/SKILL.md +0 -97
- package/.codex/skills/ahe-conversation/SKILL.md +0 -73
- package/.codex/skills/ahe-spec/SKILL.md +0 -63
- package/.codex/skills/ahe-thinking/SKILL.md +0 -104
- package/.codex/skills/ahe-update/SKILL.md +0 -66
- /package/{.codex → packages/ahe-codex/.codex}/ahe-shared/config.yaml +0 -0
- /package/{.codex → packages/ahe-codex/.codex}/ahe-shared/schemas/feature-list-schema.json +0 -0
- /package/{.codex → packages/ahe-codex/.codex}/ahe-shared/schemas/process_status.schema.json +0 -0
- /package/{.codex → packages/ahe-codex/.codex}/ahe-shared/templates/INSTRUCTIONS.md +0 -0
- /package/{.codex → packages/ahe-codex/.codex}/ahe-shared/templates/feature-list.json +0 -0
- /package/{.codex → packages/ahe-codex/.codex}/ahe-shared/templates/init.sh +0 -0
- /package/{.codex/ahe-shared/templates/PROGRESS.md → packages/ahe-codex/.codex/ahe-shared/templates/progress.md} +0 -0
- /package/{.codex/ahe-shared/templates/SESSION-HANDOFF.md → packages/ahe-codex/.codex/ahe-shared/templates/session-handoff.md} +0 -0
- /package/{.codex → packages/ahe-codex/.codex}/hooks/hooks.json +0 -0
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SCRIPT_PATH="${BASH_SOURCE[0]}"
|
|
5
|
+
while [ -L "${SCRIPT_PATH}" ]; do
|
|
6
|
+
SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${SCRIPT_PATH}")" && pwd)"
|
|
7
|
+
SCRIPT_PATH="$(readlink "${SCRIPT_PATH}")"
|
|
8
|
+
case "${SCRIPT_PATH}" in
|
|
9
|
+
/*) ;;
|
|
10
|
+
*) SCRIPT_PATH="${SCRIPT_DIR}/${SCRIPT_PATH}" ;;
|
|
11
|
+
esac
|
|
12
|
+
done
|
|
13
|
+
|
|
14
|
+
readonly SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${SCRIPT_PATH}")" && pwd)"
|
|
15
|
+
readonly PACKAGE_ROOT="$(CDPATH= cd -- "${SCRIPT_DIR}/.." && pwd)"
|
|
16
|
+
readonly SOURCE_SKILLS_DIR="${PACKAGE_ROOT}/skills"
|
|
17
|
+
readonly AGY_MODEL="Gemini 3.1 Pro (High)"
|
|
18
|
+
readonly MANAGED_SKILLS=("ahe-ship" "ahe-git")
|
|
19
|
+
|
|
20
|
+
build_execution_prompt() {
|
|
21
|
+
local plan_markdown="$1"
|
|
22
|
+
|
|
23
|
+
printf '%s\n' "Reconcile this saved AHE plan against the current repository state."
|
|
24
|
+
printf '%s\n' "Overwrite the original .plans/ file with the refreshed plan, then execute the refreshed plan exactly."
|
|
25
|
+
printf '\n'
|
|
26
|
+
printf '%s\n' "# Saved Plan"
|
|
27
|
+
printf '%s' "${plan_markdown}"
|
|
28
|
+
|
|
29
|
+
case "${plan_markdown}" in
|
|
30
|
+
*$'\n')
|
|
31
|
+
;;
|
|
32
|
+
*)
|
|
33
|
+
printf '\n'
|
|
34
|
+
;;
|
|
35
|
+
esac
|
|
36
|
+
printf '\n'
|
|
37
|
+
|
|
38
|
+
printf '%s\n' "When every requirement is fully complete and verified, print the exact line AHE_PLAN_COMPLETE."
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
usage() {
|
|
42
|
+
cat <<'EOF'
|
|
43
|
+
Usage:
|
|
44
|
+
ahe-antigravity install [--force]
|
|
45
|
+
ahe-antigravity uninstall
|
|
46
|
+
ahe-antigravity doctor
|
|
47
|
+
ahe-antigravity ahe-ship <plan-path>
|
|
48
|
+
ahe-antigravity ahe-git [repo-root]
|
|
49
|
+
EOF
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
resolve_plan_path() {
|
|
53
|
+
local plan_path="$1"
|
|
54
|
+
|
|
55
|
+
if [ -z "${plan_path}" ]; then
|
|
56
|
+
printf 'Usage: ahe-antigravity ahe-ship <plan-path>\n' >&2
|
|
57
|
+
exit 1
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
if [ "${plan_path#/}" = "${plan_path}" ]; then
|
|
61
|
+
plan_path="${PWD}/${plan_path}"
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
if [ ! -f "${plan_path}" ]; then
|
|
65
|
+
printf 'Plan file does not exist: %s\n' "${plan_path}" >&2
|
|
66
|
+
exit 1
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
printf '%s\n' "${plan_path}"
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
read_plan_markdown() {
|
|
73
|
+
local plan_path="$1"
|
|
74
|
+
cat "${plan_path}"
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
ahe_ship_plan() {
|
|
79
|
+
local plan_path
|
|
80
|
+
plan_path="$(resolve_plan_path "${1:-}")"
|
|
81
|
+
|
|
82
|
+
if ! command -v agy >/dev/null 2>&1; then
|
|
83
|
+
printf 'Missing required executable: agy\n' >&2
|
|
84
|
+
exit 1
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
local execution_prompt
|
|
88
|
+
execution_prompt="$(build_execution_prompt "$(read_plan_markdown "${plan_path}")")"
|
|
89
|
+
|
|
90
|
+
local stdout_path
|
|
91
|
+
local stderr_path
|
|
92
|
+
stdout_path="$(mktemp)"
|
|
93
|
+
stderr_path="$(mktemp)"
|
|
94
|
+
|
|
95
|
+
local status=0
|
|
96
|
+
if printf '%s\n' "${execution_prompt}" | agy --model "${AGY_MODEL}" >"${stdout_path}" 2>"${stderr_path}"; then
|
|
97
|
+
status=0
|
|
98
|
+
else
|
|
99
|
+
status=$?
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
cat "${stdout_path}"
|
|
103
|
+
cat "${stderr_path}" >&2
|
|
104
|
+
|
|
105
|
+
local combined_output
|
|
106
|
+
combined_output="$(cat "${stdout_path}")"$'\n'"$(cat "${stderr_path}")"
|
|
107
|
+
rm -f "${stdout_path}" "${stderr_path}"
|
|
108
|
+
|
|
109
|
+
if [ "${status}" -ne 0 ]; then
|
|
110
|
+
printf 'agy execution failed for %s\n' "${plan_path}" >&2
|
|
111
|
+
exit "${status}"
|
|
112
|
+
fi
|
|
113
|
+
|
|
114
|
+
case "${combined_output}" in
|
|
115
|
+
*AHE_PLAN_COMPLETE*)
|
|
116
|
+
rm -f "${plan_path}"
|
|
117
|
+
;;
|
|
118
|
+
*)
|
|
119
|
+
printf 'agy completed without required marker AHE_PLAN_COMPLETE for %s\n' "${plan_path}" >&2
|
|
120
|
+
exit 1
|
|
121
|
+
;;
|
|
122
|
+
esac
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
build_git_execution_prompt() {
|
|
126
|
+
local repo_root="$1"
|
|
127
|
+
|
|
128
|
+
printf '%s\n' "Run the ahe-git skill workflow on the repository at: ${repo_root}"
|
|
129
|
+
printf '%s\n' "You must follow the AHE Git skill instructions exactly."
|
|
130
|
+
printf '\n'
|
|
131
|
+
printf '%s\n' "When the full workflow is finished successfully with no skipped work, print the exact line AHE_GIT_COMPLETE."
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
ahe_git() {
|
|
135
|
+
local repo_root="${1:-$PWD}"
|
|
136
|
+
|
|
137
|
+
if [ ! -d "${repo_root}" ]; then
|
|
138
|
+
printf 'Target path is not a directory: %s\n' "${repo_root}" >&2
|
|
139
|
+
exit 1
|
|
140
|
+
fi
|
|
141
|
+
|
|
142
|
+
repo_root="$(CDPATH= cd -- "${repo_root}" && pwd)"
|
|
143
|
+
|
|
144
|
+
if ! command -v agy >/dev/null 2>&1; then
|
|
145
|
+
printf 'Missing required executable: agy\n' >&2
|
|
146
|
+
exit 1
|
|
147
|
+
fi
|
|
148
|
+
|
|
149
|
+
local execution_prompt
|
|
150
|
+
execution_prompt="$(build_git_execution_prompt "${repo_root}")"
|
|
151
|
+
|
|
152
|
+
local stdout_path
|
|
153
|
+
local stderr_path
|
|
154
|
+
stdout_path="$(mktemp)"
|
|
155
|
+
stderr_path="$(mktemp)"
|
|
156
|
+
|
|
157
|
+
local status=0
|
|
158
|
+
if printf '%s\n' "${execution_prompt}" | agy --model "${AGY_MODEL}" >"${stdout_path}" 2>"${stderr_path}"; then
|
|
159
|
+
status=0
|
|
160
|
+
else
|
|
161
|
+
status=$?
|
|
162
|
+
fi
|
|
163
|
+
|
|
164
|
+
cat "${stdout_path}"
|
|
165
|
+
cat "${stderr_path}" >&2
|
|
166
|
+
|
|
167
|
+
local combined_output
|
|
168
|
+
combined_output="$(cat "${stdout_path}")"$'\n'"$(cat "${stderr_path}")"
|
|
169
|
+
rm -f "${stdout_path}" "${stderr_path}"
|
|
170
|
+
|
|
171
|
+
if [ "${status}" -ne 0 ]; then
|
|
172
|
+
printf 'agy execution failed for ahe-git in %s\n' "${repo_root}" >&2
|
|
173
|
+
exit "${status}"
|
|
174
|
+
fi
|
|
175
|
+
|
|
176
|
+
case "${combined_output}" in
|
|
177
|
+
*AHE_GIT_COMPLETE*)
|
|
178
|
+
;;
|
|
179
|
+
*)
|
|
180
|
+
printf 'agy completed without required marker AHE_GIT_COMPLETE for ahe-git in %s\n' "${repo_root}" >&2
|
|
181
|
+
exit 1
|
|
182
|
+
;;
|
|
183
|
+
esac
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
install_skill() {
|
|
187
|
+
local force="false"
|
|
188
|
+
|
|
189
|
+
while [ "$#" -gt 0 ]; do
|
|
190
|
+
case "$1" in
|
|
191
|
+
--force)
|
|
192
|
+
force="true"
|
|
193
|
+
;;
|
|
194
|
+
--backup)
|
|
195
|
+
# Ignored for Antigravity, but accepted for compatibility with root script
|
|
196
|
+
;;
|
|
197
|
+
*)
|
|
198
|
+
printf 'Unknown install option: %s\n' "$1" >&2
|
|
199
|
+
usage >&2
|
|
200
|
+
exit 1
|
|
201
|
+
;;
|
|
202
|
+
esac
|
|
203
|
+
shift
|
|
204
|
+
done
|
|
205
|
+
|
|
206
|
+
if [ ! -d "${SOURCE_SKILLS_DIR}" ]; then
|
|
207
|
+
printf 'Packaged skill files are missing: %s\n' "${SOURCE_SKILLS_DIR}" >&2
|
|
208
|
+
exit 1
|
|
209
|
+
fi
|
|
210
|
+
|
|
211
|
+
# Determine target directory
|
|
212
|
+
local target_skills_dir="${HOME}/.gemini/config/skills"
|
|
213
|
+
local skill_name=""
|
|
214
|
+
local skill_target=""
|
|
215
|
+
|
|
216
|
+
for skill_name in "${MANAGED_SKILLS[@]}"; do
|
|
217
|
+
skill_target="${target_skills_dir}/${skill_name}"
|
|
218
|
+
|
|
219
|
+
if [ -e "${skill_target}" ]; then
|
|
220
|
+
if [ "${force}" != "true" ]; then
|
|
221
|
+
cat <<EOF >&2
|
|
222
|
+
AHE Antigravity skill ${skill_name} is already installed at:
|
|
223
|
+
${skill_target}
|
|
224
|
+
|
|
225
|
+
Re-run with --force to overwrite.
|
|
226
|
+
EOF
|
|
227
|
+
exit 1
|
|
228
|
+
else
|
|
229
|
+
rm -rf "${skill_target}"
|
|
230
|
+
fi
|
|
231
|
+
fi
|
|
232
|
+
done
|
|
233
|
+
|
|
234
|
+
mkdir -p "${target_skills_dir}"
|
|
235
|
+
for skill_name in "${MANAGED_SKILLS[@]}"; do
|
|
236
|
+
cp -R "${SOURCE_SKILLS_DIR}/${skill_name}" "${target_skills_dir}/${skill_name}"
|
|
237
|
+
done
|
|
238
|
+
|
|
239
|
+
cat <<EOF
|
|
240
|
+
AHE Antigravity skills installed at:
|
|
241
|
+
${target_skills_dir}
|
|
242
|
+
EOF
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
doctor() {
|
|
246
|
+
printf '=== antigravity ===\n'
|
|
247
|
+
|
|
248
|
+
local target_skills_dir="${HOME}/.gemini/config/skills"
|
|
249
|
+
local skill_name=""
|
|
250
|
+
local skill_md=""
|
|
251
|
+
local errors=0
|
|
252
|
+
|
|
253
|
+
for skill_name in "${MANAGED_SKILLS[@]}"; do
|
|
254
|
+
skill_md="${target_skills_dir}/${skill_name}/SKILL.md"
|
|
255
|
+
if [ ! -f "${skill_md}" ]; then
|
|
256
|
+
printf 'Missing: %s\n' "${skill_md}" >&2
|
|
257
|
+
errors=$((errors + 1))
|
|
258
|
+
fi
|
|
259
|
+
done
|
|
260
|
+
|
|
261
|
+
if ! command -v agy >/dev/null 2>&1; then
|
|
262
|
+
printf 'Missing required executable: agy\n' >&2
|
|
263
|
+
errors=$((errors + 1))
|
|
264
|
+
fi
|
|
265
|
+
|
|
266
|
+
if [ "${errors}" -gt 0 ]; then
|
|
267
|
+
printf 'AHE Antigravity skill installation is unhealthy (%d errors).\n' "${errors}" >&2
|
|
268
|
+
exit 1
|
|
269
|
+
fi
|
|
270
|
+
printf 'AHE Antigravity skill installation looks healthy.\n\n'
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
uninstall_skill() {
|
|
274
|
+
local target_skills_dir="${HOME}/.gemini/config/skills"
|
|
275
|
+
local skill_name=""
|
|
276
|
+
local skill_target=""
|
|
277
|
+
|
|
278
|
+
echo "Uninstalling AHE Antigravity skills from ${target_skills_dir}..."
|
|
279
|
+
|
|
280
|
+
for skill_name in "${MANAGED_SKILLS[@]}"; do
|
|
281
|
+
skill_target="${target_skills_dir}/${skill_name}"
|
|
282
|
+
rm -rf "${skill_target}"
|
|
283
|
+
done
|
|
284
|
+
|
|
285
|
+
echo "AHE Antigravity skills uninstalled successfully."
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
main() {
|
|
289
|
+
if [ "$#" -eq 0 ]; then
|
|
290
|
+
usage
|
|
291
|
+
exit 1
|
|
292
|
+
fi
|
|
293
|
+
|
|
294
|
+
local command="$1"
|
|
295
|
+
shift
|
|
296
|
+
|
|
297
|
+
case "${command}" in
|
|
298
|
+
install)
|
|
299
|
+
install_skill "$@"
|
|
300
|
+
;;
|
|
301
|
+
uninstall)
|
|
302
|
+
uninstall_skill
|
|
303
|
+
;;
|
|
304
|
+
doctor)
|
|
305
|
+
doctor
|
|
306
|
+
;;
|
|
307
|
+
ahe-ship)
|
|
308
|
+
ahe_ship_plan "$@"
|
|
309
|
+
;;
|
|
310
|
+
ahe-git)
|
|
311
|
+
ahe_git "$@"
|
|
312
|
+
;;
|
|
313
|
+
-h|--help|help)
|
|
314
|
+
usage
|
|
315
|
+
exit 0
|
|
316
|
+
;;
|
|
317
|
+
*)
|
|
318
|
+
printf 'Unknown command: %s\n' "${command}" >&2
|
|
319
|
+
usage >&2
|
|
320
|
+
exit 1
|
|
321
|
+
;;
|
|
322
|
+
esac
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
main "$@"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ahe-git
|
|
3
|
+
description: Use in Antigravity to execute an ahe-git run via the `ahe-antigravity ahe-git` command.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# AHE Git (Antigravity)
|
|
7
|
+
|
|
8
|
+
`ahe-git` is a user-facing AHE command independent from the normal AHE agent network.
|
|
9
|
+
|
|
10
|
+
Use this skill only to orchestrate safe Git pulls and commits across the active repository and its nested Git repositories or submodules.
|
|
11
|
+
|
|
12
|
+
## Workflow
|
|
13
|
+
|
|
14
|
+
1. **Discover**: Scan for both `.git` directories and `.git` files to find all nested repositories, worktrees, and submodules. Normalize and deduplicate the repo roots. Process them deepest-first (so submodules commit before parent gitlink updates).
|
|
15
|
+
2. **Safe Pull**: For each repo, run `git fetch` and inspect the current branch and upstream state:
|
|
16
|
+
- If the repo is clean and upstream is ahead, fast-forward with `git pull --ff-only`.
|
|
17
|
+
- If the repo is already at upstream head, continue.
|
|
18
|
+
- If the repo is locally ahead of upstream and has local changes, continue to Dirty-State Review.
|
|
19
|
+
- If the repo has local changes and upstream has commits not present locally, **stop and explain the issue**.
|
|
20
|
+
- If upstream is missing, detached, diverged, rebasing, merging, cherry-picking, or cannot fast-forward cleanly, **stop and explain the issue**.
|
|
21
|
+
- *Never* auto-stash, auto-merge, auto-rebase, auto-resolve conflicts, or change branch topology.
|
|
22
|
+
3. **Failure Policy**: On any hard Git state, stop immediately and report:
|
|
23
|
+
- Which repo is blocked.
|
|
24
|
+
- The exact detected condition.
|
|
25
|
+
- Why `ahe-git` is refusing to continue.
|
|
26
|
+
- Concrete manual steps the user should perform next (e.g., set upstream, finish merge, clean changes).
|
|
27
|
+
- Do not attempt partial recovery beyond safe read-only diagnosis.
|
|
28
|
+
4. **Dirty-State Review**: Inspect `git status --short`. Read unstaged diffs first, then staged diffs, and include untracked files so the commit message covers the full pending change.
|
|
29
|
+
5. **Commit-Message Drafting**: Generate one concise conventional-style message per repo (`feat:`, `fix:`, `chore:`, etc.) based on the actual diff.
|
|
30
|
+
- Run an explicit self-check pass to reject vague or misleading messages before commit.
|
|
31
|
+
- If the message is still ambiguous after self-check, stop and ask the user instead of committing a generic summary.
|
|
32
|
+
6. **Commit**: Stage with `git add -A` inside that repo. Commit exactly once per dirty repo with its reviewed message.
|
|
33
|
+
7. **Re-evaluate**: After submodule commits, re-evaluate parent repos so gitlink updates are committed if they became dirty.
|
|
34
|
+
|
|
35
|
+
Print the exact line `AHE_GIT_COMPLETE` only when the full workflow is finished successfully with no skipped work. Do not print this if there are failures.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ahe-ship
|
|
3
|
+
description: Use in Antigravity to execute EXACTLY ONE saved AHE plan from `.plans/`. Note that ahe-ship in Codex saves plans, while ahe-ship in Antigravity implements them.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# AHE Executor
|
|
7
|
+
|
|
8
|
+
This skill executes engineering plans generated by Awesome Harness Engineering.
|
|
9
|
+
|
|
10
|
+
**Context:**
|
|
11
|
+
- `ahe-ship` in Codex works for saving a completed plan to the `.plans/` folder.
|
|
12
|
+
- `ahe-ship` in Antigravity works for the implementation of ONE plan which is picked up from the `.plans/` folder.
|
|
13
|
+
|
|
14
|
+
## Instructions
|
|
15
|
+
When the user asks to implement or execute a plan, do not scan or implement all plans. Check the `.plans/` directory and select exactly one plan file (e.g. `.plans/{plan_name}.md`). If multiple plans exist and the user didn't specify one, ask the user which plan to execute. Read the selected plan file.
|
|
16
|
+
|
|
17
|
+
Perform the following steps:
|
|
18
|
+
1. **Show the title**: Display the title of the selected plan to the user.
|
|
19
|
+
2. **Replan**: Reconcile the selected plan against the current repository state and create a refreshed implementation plan. Overwrite the selected `.plans/{plan_name}.md` file with this refreshed plan. Do NOT wait for user approval; immediately proceed to the next step.
|
|
20
|
+
3. **Implement**: Execute every listed requirement in the refreshed plan, omitting nothing.
|
|
21
|
+
4. **Cleanup**: After successful execution and before printing `AHE_PLAN_COMPLETE`, execute the hook script `~/.gemini/config/skills/ahe-ship/scripts/post-ship-hook.sh <plan_path>` to clean up the applied plan.
|
|
22
|
+
|
|
23
|
+
Do not ask to open, read, or restate the `.plans/` file.
|
|
24
|
+
Use the saved AHE plan content already provided in the prompt.
|
|
25
|
+
The Antigravity CLI runs this execution with the model `Gemini 3.1 Pro (High)`.
|
|
26
|
+
|
|
27
|
+
Print the exact line `AHE_PLAN_COMPLETE` only when the full plan is finished with no skipped work, no unresolved blocker, and no omitted verification.
|
|
28
|
+
Do not print `AHE_PLAN_COMPLETE` when any part of the plan is incomplete, deferred, blocked, or only partially verified.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
PLAN_PATH="$1"
|
|
5
|
+
|
|
6
|
+
if [ -f "${PLAN_PATH}" ]; then
|
|
7
|
+
echo "Running AHE Ship post-execution hook..."
|
|
8
|
+
rm -f "${PLAN_PATH}"
|
|
9
|
+
echo "Cleaned up plan file: ${PLAN_PATH}"
|
|
10
|
+
else
|
|
11
|
+
echo "Warning: Plan file not found at ${PLAN_PATH}"
|
|
12
|
+
fi
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
name = "ahe-harness-manager"
|
|
2
|
+
description = "AHE Harness Manager Agent for supervising the Awesome Harness Engineering workflow"
|
|
3
|
+
model = "Gemini 3.1 Pro (High)"
|
|
4
|
+
system_prompt = """
|
|
5
|
+
You are `@ahe-harness-manager`, an automatic supervisory agent for Awesome Harness Engineering.
|
|
6
|
+
|
|
7
|
+
Your job is to inspect the current state of the harness and recommend next steps when AHE workflows are started.
|
|
8
|
+
|
|
9
|
+
1. Inspect `AGENTS.md`, all `docs/*.md`, `feature-list.json`, `progress.md`, `session-handoff.md`, and relevant code context.
|
|
10
|
+
2. Detect mismatch between product docs, tracker state, progress evidence, and actual code.
|
|
11
|
+
3. If unfinished feature work exists, recommend the next valid feature to continue.
|
|
12
|
+
4. If all tracked features are done but product/code suggests new work, ask the user one focused question before AHE derives a new feature.
|
|
13
|
+
5. If harness artifacts are malformed, recommend handing off to `ahe-harness-checker`.
|
|
14
|
+
6. If tracker/product docs need updates, recommend handing off to `ahe-harness`.
|
|
15
|
+
7. If deeper code evidence is needed, recommend handing off to `ahe-review`.
|
|
16
|
+
|
|
17
|
+
You are advisory by default. Do not block normal routing for ordinary healthy states.
|
|
18
|
+
You may ask one focused question before AHE continues when user intent is required.
|
|
19
|
+
"""
|
|
@@ -7,26 +7,27 @@
|
|
|
7
7
|
Before writing code:
|
|
8
8
|
|
|
9
9
|
1. **Confirm working directory** with `pwd`
|
|
10
|
-
2. **
|
|
11
|
-
3. **Read
|
|
10
|
+
2. **Check whether the copied files are correct** before reading their contents.
|
|
11
|
+
3. **Read files strictly in this order**:
|
|
12
|
+
`AGENTS.md` -> `docs/product.md` plus `docs/product{n}.md` (in numeric order) -> `docs/architecture.md` -> `docs/instructions.md` -> `init.sh` -> `feature-list.json` -> `status.json` -> `progress.md` -> `session-handoff.md`
|
|
12
13
|
4. **Run `./init.sh`** to verify environment is healthy
|
|
13
|
-
5. **
|
|
14
|
-
6. **Review recent commits** with `git log --oneline -5`
|
|
14
|
+
5. **Review recent commits** with `git log --oneline -5`
|
|
15
15
|
|
|
16
16
|
If baseline verification is failing, repair that first before adding new scope.
|
|
17
17
|
|
|
18
18
|
## Working Rules
|
|
19
19
|
|
|
20
|
-
- **One feature at a time**: Pick exactly one unfinished feature from `
|
|
20
|
+
- **One feature at a time**: Pick exactly one unfinished feature from `feature-list.json`
|
|
21
21
|
- **Verification required**: Don't claim done without running verification commands
|
|
22
|
-
- **Update artifacts**: Before ending session, update `progress.md` and `
|
|
22
|
+
- **Update artifacts**: Before ending session, update `progress.md` and `feature-list.json`
|
|
23
23
|
- **Stay in scope**: Don't modify files unrelated to the current feature
|
|
24
24
|
- **Leave clean state**: Next session must be able to run `./init.sh` immediately
|
|
25
25
|
|
|
26
26
|
## Required Artifacts
|
|
27
27
|
|
|
28
|
-
- `
|
|
28
|
+
- `feature-list.json` — Feature state tracker (source of truth)
|
|
29
29
|
- `progress.md` — Session continuity log
|
|
30
|
+
- `status.json` — Canonical status artifact
|
|
30
31
|
- `init.sh` — Standard startup and verification path
|
|
31
32
|
- `session-handoff.md` — Optional, for larger sessions
|
|
32
33
|
|
|
@@ -36,7 +37,7 @@ A feature is done only when ALL of the following are true:
|
|
|
36
37
|
|
|
37
38
|
- [ ] Target behavior is implemented
|
|
38
39
|
- [ ] Required verification actually ran (tests / lint / type-check)
|
|
39
|
-
- [ ] Evidence recorded in `
|
|
40
|
+
- [ ] Evidence recorded in `feature-list.json` or `progress.md`
|
|
40
41
|
- [ ] Repository remains restartable from standard startup path
|
|
41
42
|
|
|
42
43
|
## End of Session
|
|
@@ -44,7 +45,7 @@ A feature is done only when ALL of the following are true:
|
|
|
44
45
|
Before ending a session:
|
|
45
46
|
|
|
46
47
|
1. Update `progress.md` with current state
|
|
47
|
-
2. Update `
|
|
48
|
+
2. Update `feature-list.json` with new feature status
|
|
48
49
|
3. Record any unresolved risks or blockers
|
|
49
50
|
4. Commit with descriptive message once work is in safe state
|
|
50
51
|
5. Leave repo clean enough for next session to run `./init.sh` immediately
|
|
@@ -61,4 +62,4 @@ If you encounter:
|
|
|
61
62
|
- **Architecture decisions**: Consult project architecture docs if present, otherwise ask user
|
|
62
63
|
- **Unclear requirements**: Check product/requirements docs if present, otherwise ask user
|
|
63
64
|
- **Repeated test failures**: Update progress, flag for human review
|
|
64
|
-
- **Scope ambiguity**: Re-read `
|
|
65
|
+
- **Scope ambiguity**: Re-read `feature-list.json` for definition of done
|