create-prove — Claude Code skill: what it does, how to install
Runs a modified Aeon skill inside GitHub Actions and attaches SHA-bound behavioral proof directly to the pull request.
npx skills add aeonfun/aeon --skill create-prove -a claude-codeWhat create-prove does
The skill verifies behavior for Aeon repositories before merging. A clean diff review is not treated as proof. Instead, the tool triggers the real aeon.yml workflow on the pull request branch. It requires an exact target string structured as owner/repo#pr@sha with a 40-character commit hash. The scope strictly covers pull requests altering exactly one skills/<slug>/SKILL.md file.
All GitHub operations rely on the gh command-line tool. The skill picks a minimal non-destructive input to exercise the modified logic, then triggers the run with a prove- prefix on dispatch_id. That exact prefix prevents the workflow from pushing commits back to the branch under test. Forks fail immediately because GitHub Actions cannot run untrusted external branches in the target repository.
The execution monitor polls up to 30 minutes, checking for a successful status and captured output. Once the commit SHA is re-checked, the tool posts a PR comment containing a run link and a JSON proof receipt. The final verdict is logged to memory/logs/.
What it helps with
- test modified skill files in live GitHub Actions workflows
- block pull requests when the head commit SHA changes
- reject execution requests from untrusted repository forks
- attach machine-readable proof receipts to PR discussions
Example prompts for the agent
- Prove the skill changes for
aeonfun/aeon#12@4b825dc642cb6eb9a060e54bf8d69288fbee4904 - Run create-prove on
myorg/repo#5@9f83c78d6e902b48a12702ee61a68b594b2f42a0
How to install create-prove
1Skills CLI (Vercel)
npx skills add aeonfun/aeon --skill create-prove -a claude-code2Manually: put the files in place
~/.claude/skills/create-prove/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/create-prove/
1Skills CLI (Vercel)
npx skills add aeonfun/aeon --skill create-prove -a codex2Manually: put the files in place
.agents/skills/create-prove/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add aeonfun/aeon --skill create-prove -a cursor2Manually: put the files in place
.cursor/skills/create-prove/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install aeonfun/aeon create-prove2Manually: put the files in place
.github/skills/create-prove/SKILL.md1Skills CLI (Vercel)
npx skills add aeonfun/aeon --skill create-prove -a gemini-cli2Platform CLI
gemini skills install https://github.com/aeonfun/aeon --path skills/create-proveManually: put the files in place
.devin/skills/create-prove/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add aeonfun/aeon --skill create-prove -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about create-prove
How do I install create-prove in Claude Code?
Run npx skills add aeonfun/aeon --skill create-prove -a claude-code. The skill file will be created at ~/.claude/skills/create-prove/SKILL.md.
What does create-prove do?
It executes a modified Aeon skill via GitHub Actions and posts a comment with an aeon-proof JSON receipt to the pull request.
Why does the skill reject branches from forks?
GitHub's gh workflow run --ref command cannot execute untrusted fork branches within the base repository, causing the validation to fail closed.
Source text
SKILL.md · MIT
---
name: create-prove
description: Run a changed Aeon skill for real and attach SHA-bound behavioral evidence to its PR
metadata:
title: Create Prove
category: dev
mode: write
var: ""
tags:
- dev
- verification
permissions:
- contents:read
- actions:write
- pull-requests:write
commits: false
---
> **${var}** - Required immutable target in the form `owner/repo#pr@40-character-lowercase-sha`.
Today is ${today}. Prove the behavior of one Aeon-shaped change by running the changed skill through the target repository's real `aeon.yml` workflow. A green diff review is not proof. A successful, correlated Actions run is proof.
## Scope
This first implementation supports Aeon-shaped pull requests that change exactly one runnable `skills/<slug>/SKILL.md`. It does not launch conventional applications and it does not guess which skill represents a workflow-only or configuration-only change. Unsupported target shapes must fail closed without posting a proof receipt.
Never prove `create-prove` by recursively dispatching itself. Exit `PROVE_UNSUPPORTED` instead.
## Steps
1. Parse `${var}` into `target=owner/repo#pr` and `expected_sha`. Reject any value outside the exact grammar above with `PROVE_INVALID_TARGET`.
2. Read the PR through `gh api`. Require all of the following:
- the PR is open;
- its current `head.sha` equals `expected_sha`;
- its head branch belongs to the same repository, because `gh workflow run --ref` cannot execute an untrusted fork branch in the base repository;
- exactly one changed path matches `skills/<slug>/SKILL.md`;
- the slug is not `create-prove`.
Any mismatch exits `PROVE_UNSUPPORTED` or `PROVE_STALE` without a receipt.
3. Inspect the changed skill's frontmatter and instructions. Choose the smallest real, non-destructive variable that exercises the changed behavior. If no safe real invocation exists, exit `PROVE_UNSAFE` rather than inventing evidence. Do not use synthetic credentials or a dry-run mode.
4. Dispatch the target branch's workflow by filename, with a unique correlation ID whose `dispatch_id` **must start with the literal prefix `prove-`** — `.github/workflows/aeon.yml`'s commit-skip guard only recognizes that exact prefix to know this run is being proved, not a normal dispatch, and must not commit or push to the branch it's proving. Getting this prefix wrong silently defeats the immutable-head guarantee this whole skill exists to provide:
```bash
dispatch_id="prove-${pr_number}-$(date -u +%Y%m%dT%H%M%SZ)-${RANDOM}"
gh workflow run aeon.yml --repo "$repo" --ref "$head_branch" \
-f skill="$skill" -f var="$proof_var" -f dispatch_id="$dispatch_id"
```
Discover the run only by the exact correlated run title, using the same rule as `chain-runner.yml`. Never select merely the newest run for that skill.
5. Wait up to 30 minutes. Require `status=completed` and `conclusion=success`. Fetch the run log and the captured skill output. Confirm the output is non-empty and does not contain `_No output captured._`. A successful Actions wrapper with no captured behavior is `PROVE_MISSING_EVIDENCE`.
6. Re-read the PR and require its head SHA still equals `expected_sha`.
7. Post one PR comment containing a concise description of the exercised path, the run URL, a short output excerpt, and exactly one final machine receipt:
```text
<!-- aeon-proof:{"schema":1,"target":"owner/repo#N","sha":"<sha>","kind":"aeon-skill","skill":"<slug>","evidence_run_id":123,"evidence_url":"https://github.com/owner/repo/actions/runs/123","verdict":"proven"} -->
```
Construct the JSON with `jq -cn`, then render it on one line. Do not post the receipt until every gate above passes.
8. End with the target, skill, run ID, run URL, and `PROVE_VERDICT=proven` in the captured output.
## Constraints
- The proof run must execute the PR head branch, not `main`.
- Never treat CI checks, source inspection, or the prior review receipt as behavioral evidence.
- Never post a `proven` receipt for a failed, cancelled, timed-out, stale, empty-output, unsupported, or unsafe run.
- Do not merge, close, approve, or modify the target PR.
- Do not commit repository files.
## Network note
Use `gh` for every GitHub read, dispatch, log fetch, and PR comment. Authentication is provided by the workflow. Never print tokens or place secret values on a command line.
## Log
Append the result to `memory/logs/${today}.md` under `### create-prove`, including the target, SHA, selected skill, evidence run ID, and terminal verdict. The workflow may persist the captured output on your behalf.
© aeonfun · MIT · aeonfun/aeon