amiller

hello-world

by @amiller in Tools
0
0
# Install this skill:
npx skills add amiller/skill-verifier

Or install specific skill: npx add-skill https://github.com/amiller/skill-verifier/tree/main/examples/hello-world

# Description

Minimal example skill

# SKILL.md


name: hello-world
version: 1.0.0
description: Minimal example skill
runtime: alpine:latest
test_command: ["sh", "-c", "echo 'Hello from skill!' && exit 0"]


Hello World Skill

The simplest possible skill. Just prints a message and exits successfully.

Usage

curl -X POST http://localhost:3000/verify \
  -H "Content-Type: application/json" \
  -d '{"skillPath": "./examples/hello-world"}'

Expected result: passed: true

# README.md

Skill Verifier

Verify agent skills in isolated Docker containers with cryptographic attestations

Skill Verifier runs agent skill tests in isolated environments and generates verifiable attestations of the results. Built with Docker isolation and designed for TEE (Trusted Execution Environment) integration.

📺 See Live Demo - Hermes skill fully verified with all tests passing!

Live Example

✅ Hermes Skill Verified
   Duration: 2.2s | Tests: 6/6 passed | Security: Isolated
   Attestation: 0xfb41b44477e21bb3de59dfc1fc874191...

See DEMO.md for full verification output.

Features

  • 🔒 Isolated Execution - Each skill runs in its own Docker container
  • 🧪 Language Agnostic - Supports any runtime (Node, Python, Rust, etc.)
  • 📊 Detailed Results - Captures stdout, stderr, exit codes, and timing
  • 🔐 Attestations - Cryptographic proof of verification (TEE-ready)
  • 🚀 REST API - Easy integration via HTTP
  • 📦 Simple Manifest - Skills defined in SKILL.md frontmatter

Quick Start

Installation

npm install

Start Server

export DOCKER_HOST=tcp://your-docker-host:2375  # or use local Docker socket
npm start

Server runs on http://localhost:3000

Verify a Skill

# Submit for verification
curl -X POST http://localhost:3000/verify \
  -H "Content-Type: application/json" \
  -d '{"skillPath": "/path/to/skill"}'

# Response: {"jobId": "abc123...", "status": "pending", ...}

# Check status
curl http://localhost:3000/verify/abc123...

# Get attestation
curl http://localhost:3000/verify/abc123.../attestation

Skill Format

Skills must include a SKILL.md file with YAML frontmatter:

---
name: my-skill
version: 1.0.0
description: Does something cool
runtime: node:20-alpine
test_command: ["npm", "test"]
test_deps: apk add --no-cache build-base
---

# My Skill

Documentation here...

Required Fields

  • name - Skill identifier
  • version - Semantic version
  • description - Brief description

Optional Fields

  • runtime - Docker base image (default: alpine:latest)
  • test_command - Command to run tests (default: none)
  • test_deps - Shell command to install test dependencies

API Reference

POST /verify

Submit a skill for verification.

Request:

# With file upload
curl -X POST http://localhost:3000/verify \
  -F "[email protected]"

# With local path
curl -X POST http://localhost:3000/verify \
  -H "Content-Type: application/json" \
  -d '{"skillPath": "/path/to/skill"}'

Response:

{
  "jobId": "abc123...",
  "status": "pending",
  "statusUrl": "/verify/abc123...",
  "message": "Verification job created"
}

GET /verify/:jobId

Get verification status and results.

Response:

{
  "jobId": "abc123...",
  "status": "completed",
  "createdAt": "2026-01-30T18:00:00.000Z",
  "startedAt": "2026-01-30T18:00:01.000Z",
  "completedAt": "2026-01-30T18:00:05.000Z",
  "result": {
    "skillId": "[email protected]",
    "timestamp": "2026-01-30T18:00:05.000Z",
    "duration": 4000,
    "result": {
      "passed": true,
      "exitCode": 0,
      "stdout": "All tests passed!\n",
      "stderr": "",
      "duration": 3500
    },
    "attestation": {
      "quote": "0x...",
      "resultHash": "abc123...",
      "verifier": "skill-verifier/v0.1"
    },
    "manifest": {
      "name": "my-skill",
      "version": "1.0.0",
      "description": "Does something cool"
    }
  }
}

GET /verify/:jobId/attestation

Get attestation only.

Response:

{
  "jobId": "abc123...",
  "skillId": "[email protected]",
  "timestamp": "2026-01-30T18:00:05.000Z",
  "passed": true,
  "attestation": {
    "quote": "0x...",
    "resultHash": "abc123...",
    "verifier": "skill-verifier/v0.1"
  }
}

GET /jobs

List all verification jobs.

Query Parameters:
- status - Filter by status (pending, running, completed, failed)
- limit - Max results (default: 50)

Response:

{
  "jobs": [
    {
      "id": "abc123...",
      "status": "completed",
      "createdAt": "2026-01-30T18:00:00.000Z",
      "completedAt": "2026-01-30T18:00:05.000Z",
      "skillId": "[email protected]"
    }
  ],
  "total": 42
}

DELETE /verify/:jobId

Delete a verification job.

GET /health

Server health check.

Response:

{
  "status": "ok",
  "timestamp": "2026-01-30T18:00:00.000Z",
  "jobs": {
    "total": 42,
    "pending": 2,
    "running": 1,
    "completed": 38,
    "failed": 1
  }
}

CLI Usage

You can also use the verifier directly from the command line:

node verifier.js /path/to/skill

Results are saved to work/[email protected].

Architecture

┌─────────────┐
│   Client    │
└──────┬──────┘
       │ HTTP POST /verify
       ▼
┌─────────────┐
│  API Server │ (Express)
└──────┬──────┘
       │ Create Job
       ▼
┌─────────────┐
│  Job Queue  │ (In-memory)
└──────┬──────┘
       │ Run Async
       ▼
┌─────────────┐
│  Verifier   │ (Node.js)
└──────┬──────┘
       │ Build & Run
       ▼
┌─────────────┐
│   Docker    │ (Isolated Container)
│   ┌─────┐   │
│   │Skill│   │
│   └─────┘   │
└──────┬──────┘
       │ Results
       ▼
┌─────────────┐
│ Attestation │ (Cryptographic Proof)
└─────────────┘

Examples

See /examples for complete skill examples:
- examples/hello-world - Minimal passing skill
- examples/node-app - Node.js app with tests
- examples/python-script - Python with dependencies

Development

Run in Dev Mode

npm run dev  # Auto-restart on changes

Environment Variables

  • PORT - Server port (default: 3000)
  • DOCKER_HOST - Docker daemon address (e.g., tcp://host:2375)

Roadmap

  • [ ] Real TEE attestations via dstack SDK
  • [ ] Persistent job queue (Redis/SQLite)
  • [ ] Webhook notifications
  • [ ] Rate limiting
  • [ ] Result caching
  • [ ] Multi-step verification workflows
  • [ ] Network isolation controls
  • [ ] Resource limits (CPU/memory)

License

MIT

Contributing

Contributions welcome! This is an early prototype.

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.