skills/show-karma/skills/complete-milestone

complete-milestone

SKILL.md

Complete Milestone

Mark an existing milestone as completed. This creates a MilestoneCompleted attestation referencing the milestone.

See Agent API Reference for auth, base URL, and error handling.

Prerequisite

If KARMA_API_KEY is not set in the environment, invoke the /setup-agent skill first, then continue with this skill.

Required Information

Field Required Description
chainId Yes Chain where the milestone lives
milestoneUID Yes The milestone's attestation UID
reason Yes Completion explanation (1-5000 chars)
proofOfWork No URL to proof (demo, PR, deployment, etc.)

Finding the Milestone UID

Search for the project, then fetch grants and milestones:

# Step 1: Find the project
curl -s "${BASE_URL}/v2/projects?q=PROJECT_NAME&limit=5&page=1" | python3 -c "
import sys, json
data = json.load(sys.stdin)
for p in data.get('payload', []):
    d = p.get('details', {})
    print(f'Title: {d.get(\"title\", \"N/A\")} | Chain: {p[\"chainID\"]} | UID: {p[\"uid\"]}')
"

# Step 2: Get grants and milestones for the project
curl -s "${BASE_URL}/v2/projects/PROJECT_UID_OR_SLUG/grants" | python3 -c "
import sys, json
data = json.load(sys.stdin)
grants = data if isinstance(data, list) else data.get('payload', data.get('data', []))
for g in grants:
    d = g.get('details', {})
    title = d.get('title', d.get('data', {}).get('title', 'Untitled')) if isinstance(d, dict) else 'Untitled'
    print(f'Grant: {title} | UID: {g[\"uid\"]}')
    for m in g.get('milestones', []):
        mt = m.get('data', {}).get('title', m.get('title', 'Untitled'))
        print(f'  Milestone: {mt} | UID: {m[\"uid\"]}')
"

Natural Language Mapping

User says Action
"complete milestone X" Look up milestone UID, ask for reason
"mark milestone 0xabc... as done" Use UID, ask for reason
"we finished the v2 deployment" Ask which project/grant/milestone, use as reason
"complete milestone with proof: https://..." Extract proof URL, ask for milestone UID

Making the Request

BASE_URL="${KARMA_API_URL:-https://gapapi.karmahq.xyz}"

curl -s -X POST "${BASE_URL}/v2/agent/execute" \
  -H "Content-Type: application/json" \
  -H "x-api-key: ${KARMA_API_KEY}" \
  -d '{
    "action": "completeMilestone",
    "params": {
      "chainId": 10,
      "milestoneUID": "0xmilestone...uid",
      "reason": "All deliverables completed. Smart contracts deployed and audited.",
      "proofOfWork": "https://github.com/myproject/releases/tag/v2.0"
    }
  }'

After Success

Display the result using the standard output format. The completion will be automatically indexed by the system.

Edge Cases

Scenario Response
Milestone name given instead of UID Look it up via project → grant → milestones
No proof of work That's fine, it's optional — just ask for the reason
Multiple milestones to complete Process them one by one
Milestone not found "Could not find that milestone. Check the project/grant or provide the UID."
Weekly Installs
5
GitHub Stars
1
First Seen
11 days ago
Installed on
gemini-cli5
github-copilot5
codex5
kimi-cli5
cursor5
amp5