Loading...
Loading...
BDD-style behavior specification engine for the skill system. Use when: (1) defining a new skill's behavior before implementation, (2) validating a spec against the schema, (3) generating a behavior contract (Mermaid DAG) from a spec, (4) running structural acceptance tests against a built skill. Workflow: Spec → Test → Develop → Contract.
npx skill4agent add arthur0824hao/skills skill-system-behaviorSKILL.spec.yaml → Acceptance Tests → Implementation → SKILL.behavior.yaml (generated)
(WHAT) (VERIFY) (HOW) (DOCUMENT)SKILL.spec.yamlschema_version: 1
skill_name: my-skill
description: "What this skill does"
operations:
- name: do-something
intent: "Why this operation exists"
inputs: [...]
outputs: [...]
constraints: ["Must not...", "Must always..."]
expected_effects: [...]
acceptance_tests:
structural:
- id: manifest-valid
assert: "manifest exposes all operations"
behavioral:
- id: happy-path
given: "Valid input"
when: "do-something is called"
then: "Returns expected output"schema/spec-v1.yaml*.behavior.yamlinteraction_diagraminteraction_diagram: |
flowchart LR
Script["runtime-doctor"] -->|"reads"| Config["config/memory.yaml"]SKILL.spec.yamlschema/spec-v1.yamlSKILL.spec.yamlSKILL.spec.yamlSKILL.spec.yamlschema_versionskill_namedescriptionoperationsnameintentmanifest-validscripts-existpython3 scripts/validate_spec.py <path-to-SKILL.spec.yaml>SKILL.spec.yamlSKILL.mdskill-manifestskills-index.jsonSKILL.behavior.yamlSKILL.spec.yamlSKILL.behavior.yamlproject_dir*.behavior.yamlpython3 scripts/coverage_gate.py <project_dir> [--patterns ...] [--exclude ...]1. Understand the skill (examples, triggers)
2. Create spec → skill-system-behavior:create-spec
3. Validate spec → skill-system-behavior:validate-spec
4. Write tests → define acceptance criteria from spec
5. Initialize skill → skill-system-creator:init
6. Implement skill → edit SKILL.md, scripts, references
7. Verify structural → skill-system-behavior:verify-structural
8. Generate contract → skill-system-behavior:generate-contract
9. Package → skill-system-creator:packageSKILL.spec.yamlSKILL.mdSKILL.behavior.yamlTier 1 — System Architecture
├── SYSTEM_ARCHITECTURE.md (system boundaries + data flow)
└── PIPELINE_DAG.md (zoom-in companion, state machines)
Tier 2 — Behavior Contracts
├── *.behavior.yaml (single-script: inputs/outputs/stages/error_paths)
└── BEHAVIOR_RUNTIME.md (strictly cross-script scenarios only)
Tier 3 — Tests
└── test_*.py (each test traces to a specific behavior scenario)acceptance_tests.behavioral[].tested_bySKILL.spec.yamlgovernance.tiergovernance.traces_toSKILL.spec.yaml*.behavior.yamlBEHAVIOR_RUNTIME.md.behavior.yamlBEHAVIOR_RUNTIME.mdintent{
"schema_version": "2.0",
"id": "skill-system-behavior",
"version": "2.0.0",
"capabilities": ["spec-create", "spec-validate", "spec-verify", "contract-generate", "coverage-gate", "skill-graph-build"],
"effects": ["fs.read", "fs.write", "proc.exec"],
"operations": {
"create-spec": {
"description": "Scaffold a new SKILL.spec.yaml from the schema template.",
"input": {
"skill_name": { "type": "string", "required": true, "description": "Name of the skill to spec" },
"skill_dir": { "type": "string", "required": false, "description": "Target directory (default: skills/<skill_name>)" }
},
"output": {
"description": "Path to created SKILL.spec.yaml",
"fields": { "path": "string" }
},
"entrypoints": {
"agent": "Read schema/spec-v1.yaml, then scaffold SKILL.spec.yaml in skill_dir"
}
},
"validate-spec": {
"description": "Validate a SKILL.spec.yaml against the v1 schema.",
"input": {
"spec_path": { "type": "string", "required": true, "description": "Path to SKILL.spec.yaml" }
},
"output": {
"description": "Validation result with pass/fail and violations list",
"fields": { "status": "string", "violations": "array" }
},
"entrypoints": {
"unix": ["python3", "scripts/validate_spec.py", "{spec_path}"],
"windows": ["python", "scripts/validate_spec.py", "{spec_path}"]
}
},
"verify-structural": {
"description": "Run structural acceptance tests against a built skill.",
"input": {
"skill_dir": { "type": "string", "required": true, "description": "Path to skill directory" }
},
"output": {
"description": "Test results checklist",
"fields": { "status": "string", "results": "array" }
},
"entrypoints": {
"unix": ["python3", "scripts/verify_structural.py", "{skill_dir}"],
"windows": ["python", "scripts/verify_structural.py", "{skill_dir}"]
}
},
"generate-contract": {
"description": "Generate SKILL.behavior.yaml (Mermaid DAG) from a completed spec.",
"input": {
"skill_dir": { "type": "string", "required": true, "description": "Path to skill directory with SKILL.spec.yaml" }
},
"output": {
"description": "Path to generated SKILL.behavior.yaml",
"fields": { "path": "string" }
},
"entrypoints": {
"unix": ["python3", "scripts/generate_contract.py", "{skill_dir}"],
"windows": ["python", "scripts/generate_contract.py", "{skill_dir}"]
}
},
"coverage-gate": {
"description": "Scan project for scripts/modules missing behavior specs.",
"input": {
"project_dir": { "type": "string", "required": true, "description": "Root directory to scan" },
"patterns": { "type": "string", "required": false, "description": "Comma-separated glob patterns (default: **/*.py,**/*.sh)" },
"exclude": { "type": "string", "required": false, "description": "Patterns to exclude (default: test_*,__pycache__,.*)" }
},
"output": {
"description": "Coverage report with covered/uncovered lists and percentage",
"fields": { "covered": "array", "uncovered": "array", "coverage_pct": "number" }
},
"entrypoints": {
"unix": ["python3", "scripts/coverage_gate.py", "{project_dir}"],
"windows": ["python", "scripts/coverage_gate.py", "{project_dir}"]
}
},
"build-graph": {
"description": "Build a cross-skill dependency graph from SKILL.spec.yaml files.",
"input": {
"skills_dir": { "type": "string", "required": false, "description": "Root directory to scan (default: ./skills)" },
"output_format": { "type": "string", "required": false, "description": "mermaid, json, or sql" }
},
"output": {
"description": "Graph output in the requested format",
"fields": { "graph": "string|json" }
},
"entrypoints": {
"unix": ["python3", "scripts/build_graph.py", "--skills-dir", "{skills_dir}", "--format", "{output_format}"]
}
},
"refresh-projections": {
"description": "Refresh behavior projection bundles from SKILL.spec.yaml files for behavior_* tables.",
"input": {
"skills_dir": { "type": "string", "required": false, "description": "Root directory to scan (default: ./skills)" },
"output_format": { "type": "string", "required": false, "description": "json or sql" }
},
"output": {
"description": "Projection bundle or SQL statements for behavior_* refresh",
"fields": { "bundle": "json|string" }
},
"entrypoints": {
"unix": ["python3", "scripts/refresh_behavior_projections.py", "--skills-dir", "{skills_dir}", "--format", "{output_format}"]
}
}
},
"stdout_contract": {
"last_line_json": true
}
}