ワンクリックで
evaluation-framework
Comprehensive harness integration test suite for catching compatibility flaps and feature regressions early
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Comprehensive harness integration test suite for catching compatibility flaps and feature regressions early
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Experiment orchestration framework with traffic allocation, statistical analysis, and early stopping detection. Use to test routing changes, model upgrades, and role assignments with Welch's t-test significance testing.
DEPRECATED — This skill is no longer maintained. Prometheus and Grafana infrastructure was never implemented. Use local JSON metrics analysis instead.
Scaffolds new SPEC-compliant agentic-engineers agents with a single call. Generates SKILL.md frontmatter, test scaffolds (TDD RED-phase), __init__.py, scripts/ layout, and DELEGATE/HANDBACK protocol templates. Use when creating any new automation agent, task handler, or operational tool. Validates role, model, effort, naming, and dependency graphs (circular dep detection) before writing files. Supports dry-run mode for planning without side effects.
Routine maintenance for Codex sessions: monitor queue state, close completed sub-agents, resume or escalate active work, and keep agent capacity available.
Automated cross-validation of protocol queue integrity. Scans all DELEGATEs/HANDBACKs, validates schema compliance, detects cycles, checks rate limits, generates compliance report. Enables self-referential protocol improvements.
Consolidates provider-specific AI costs into unified metrics across Anthropic, OpenAI, Google Gemini, GitHub Copilot, and Ollama. Enables apples-to-apples cost comparison and savings analysis.
| name | evaluation-framework |
| description | Comprehensive harness integration test suite for catching compatibility flaps and feature regressions early |
| license | Proprietary |
| compatibility | Designed for agentic-engineers framework |
| metadata | {"author":"agentic-engineers Security Team","version":"1.0","category":"testing","role":"security-engineer","effort":"high","schedule":"0 2 * * *"} |
The Evaluation Framework provides a comprehensive test harness for validating agentic-engineers framework compatibility across different harnesses (OpenCode, Copilot, Claude Code, Pi-Dev) and models (Haiku, Sonnet, Opus).
Core Features:
Quality Gate: ≥95% pass rate required for framework stability certification
# From repo root
python -m src.skills._meta.evaluation_framework.main \
--run-tests tests/evals/ \
--md-report report.md \
--json-report report.json
# Only test opencode and copilot harnesses
python -m src.skills._meta.evaluation_framework.main \
--run-tests tests/evals/ \
--harnesses opencode copilot \
--models haiku sonnet
# Generate all report formats
python -m src.skills._meta.evaluation_framework.main \
--run-tests tests/evals/ \
--json-report /tmp/results.json \
--md-report /tmp/results.md \
--csv-report /tmp/results.csv
Test cases are defined in YAML files in the tests/evals/ directory.
# File: tests/evals/test-delegate-basic-001.yaml
id: test-delegate-basic-001
name: "Test basic DELEGATE creation"
harnesses: [opencode, copilot, claude-code]
models: [haiku, sonnet, opus]
prompt: |
Create a DELEGATE task for fixing a Python type annotation error.
Follow the SPEC.md format with task_id, type, role, model, etc.
expected_contains:
- "DELEGATE"
- "task_id"
- "role"
timeout_seconds: 30
id: test-handback-validation-001
name: "Test HANDBACK protocol validation"
harnesses: [opencode, copilot, claude-code, pi-dev]
models: [haiku, sonnet, opus]
category: protocol
severity: critical
prompt: |
Create a HANDBACK block from an Engineer completing a simple task.
The HANDBACK should include status, summary, changes, acceptance_verified,
metrics, and optional escalation fields.
expected_contains:
- "HANDBACK"
- "status"
- "metrics"
expected_not_contains:
- "INCOMPLETE"
- "Invalid format"
timeout_seconds: 45
requirements:
- Must understand HANDBACK protocol specification from SPEC.md
- Must validate compliance with DELEGATE/HANDBACK format
| Field | Required | Type | Description |
|---|---|---|---|
id | ✅ | string | Unique test identifier (e.g., test-delegate-001) |
name | ✅ | string | Human-readable test name |
harnesses | ✅ | list | Harnesses to test: opencode, copilot, claude-code, pi-dev |
models | ✅ | list | Models to test: haiku, sonnet, opus |
prompt or delegation | ✅ | string | Test input (exactly one required) |
expected_contains | ❌ | list | Strings that MUST appear in output |
expected_not_contains | ❌ | list | Strings that MUST NOT appear in output |
timeout_seconds | ❌ | int | Max execution time (default: 30) |
category | ❌ | string | Test category: delegation, protocol, skill, routing, general |
severity | ❌ | string | Test severity: critical, high, medium, low |
requirements | ❌ | list | Special setup/knowledge requirements |
src/skills/_meta/evaluation_framework/
├── __init__.py # Public API exports
├── test_case.py # TestCase class + validation
├── framework.py # TestRunner, CompatibilityMatrix, TestResult
├── reporters.py # JSON, Markdown, CSV reporters
├── cli.py # CLI interface
├── main.py # Entry point
└── scripts/ # CLI scripts
Represents a single test case with validation.
from src.skills._meta.evaluation_framework import TestCase
# Create from dict
tc = TestCase(
id="test-001",
name="Test basic delegation",
harnesses=["opencode", "copilot"],
models=["haiku", "sonnet"],
prompt="Create a DELEGATE block...",
expected_contains=["DELEGATE", "task_id"],
timeout_seconds=30,
)
# Load from YAML
tc = TestCase.from_yaml(Path("tests/evals/test-001.yaml"))
# Save to YAML
tc.to_yaml(Path("test.yaml"))
# Validate (automatic on creation)
tc.validate() # Raises TestCaseValidationError if invalid
Executes test cases and builds compatibility matrix.
from src.skills._meta.evaluation_framework import TestRunner, TestCase
runner = TestRunner(working_dir="/repo/root")
# Load test cases from directory
runner.load_test_cases(Path("tests/evals/"))
# Add individual test case
runner.add_test_case(test_case)
# Run all tests
matrix = runner.run_all_tests(
harnesses=["opencode", "copilot"],
models=["haiku", "sonnet"]
)
# Get summary
summary = matrix.get_summary()
print(f"Pass rate: {summary['pass_rate']}%")
Aggregates test results across harnesses and models.
from src.skills._meta.evaluation_framework import CompatibilityMatrix
matrix = CompatibilityMatrix()
# Add results
for result in test_results:
matrix.add_result(result)
# Get summary statistics
summary = matrix.get_summary()
# {
# "total_tests": 100,
# "passed": 95,
# "failed": 3,
# "timeout": 1,
# "error": 1,
# "pass_rate": 95.0,
# "by_harness": {...},
# "by_model": {...}
# }
# Get failures
failures = matrix.get_failures()
# Get regressions grouped by harness:model
regressions = matrix.get_regressions()
# {"opencode:haiku": ["test-001", "test-003"], "copilot:sonnet": ["test-005"]}
Generate reports in multiple formats.
from src.skills._meta.evaluation_framework import (
TestRunner, JSONReporter, MarkdownReporter, CSVReporter
)
runner = TestRunner()
runner.load_test_cases(Path("tests/evals/"))
matrix = runner.run_all_tests()
# JSON report
json_reporter = JSONReporter(matrix)
json_reporter.write(Path("report.json"))
# Markdown report
md_reporter = MarkdownReporter(matrix)
md_reporter.write(Path("report.md"))
# CSV report
csv_reporter = CSVReporter(matrix)
csv_reporter.write(Path("report.csv"))
python -m src.skills._meta.evaluation_framework.main --help
Run all tests and generate reports:
python -m src.skills._meta.evaluation_framework.main \
--run-tests tests/evals/ \
--json-report /tmp/results.json \
--md-report /tmp/results.md \
--csv-report /tmp/results.csv
Run specific harnesses and models:
python -m src.skills._meta.evaluation_framework.main \
--run-tests tests/evals/ \
--harnesses opencode copilot \
--models haiku sonnet
Filter tests by pattern:
python -m src.skills._meta.evaluation_framework.main \
--run-tests tests/evals/ \
--filter "test-delegate*"
Set minimum pass rate (default 95%):
python -m src.skills._meta.evaluation_framework.main \
--run-tests tests/evals/ \
--min-pass-rate 92.0
Verbose output:
python -m src.skills._meta.evaluation_framework.main \
--run-tests tests/evals/ \
--verbose
Choose a feature or workflow:
id: test-skill-invocation-001
name: "Test spec-validator skill invocation"
harnesses: [opencode, copilot]
models: [sonnet, opus]
category: skill
severity: high
prompt: |
Demonstrate how to invoke the spec-validator skill from the evaluation framework.
Show the expected output format and any error handling.
expected_contains:
- "spec-validator"
- "validation"
expected_not_contains:
- "ERROR"
- "FAILED"
timeout_seconds: 45
requirements:
- Must understand agentic-engineers skill system
- Must know how skills are invoked in the framework
$ ls tests/evals/
test-delegate-basic-001.yaml
test-handback-validation-001.yaml
test-skill-invocation-001.yaml
python -m src.skills._meta.evaluation_framework.main \
--run-tests tests/evals/ \
--filter "test-skill*"
The framework includes 3 sample test cases in tests/evals/:
All test cases use expected_contains and expected_not_contains for flexible validation.
File: .github/workflows/evals-nightly.yml
name: Evaluation Framework Nightly
on:
schedule:
- cron: '0 2 * * *' # 2 AM UTC daily
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run evaluation framework
run: |
python -m src.skills._meta.evaluation_framework.main \
--run-tests tests/evals/ \
--json-report /tmp/results.json \
--md-report /tmp/results.md \
--min-pass-rate 95.0
- name: Upload reports
if: always()
uses: actions/upload-artifact@v3
with:
name: eval-reports
path: /tmp/results.*
- name: Comment on PR (if regression)
if: failure()
run: |
echo "❌ Evaluation framework detected regressions"
cat /tmp/results.md
# Simulate nightly job locally
python -m src.skills._meta.evaluation_framework.main \
--run-tests tests/evals/ \
--json-report report.json \
--md-report report.md \
--min-pass-rate 95.0
Increase the timeout_seconds field in the test case:
timeout_seconds: 60 # was 30
Check that:
Add --verbose flag to see actual output:
python -m src.skills._meta.evaluation_framework.main \
--run-tests tests/evals/ \
--verbose
Ensure output paths are writable:
# Check permissions
ls -la /tmp/
chmod 777 /tmp/ # if needed
Ensure the repo root is in PYTHONPATH:
cd /path/to/agentic-engineers
python -m src.skills._meta.evaluation_framework.main --help
--filter during developmentfrom src.skills._meta.evaluation_framework.reporters import JSONReporter
class CustomReporter:
def __init__(self, matrix):
self.matrix = matrix
def generate(self, output_path=None):
"""Your custom reporting logic"""
pass
def write(self, output_path):
self.generate(output_path)
# Use it
reporter = CustomReporter(matrix)
reporter.write(Path("custom_report.txt"))
Extend TestCase validation in test cases using expected_contains and expected_not_contains, or enhance the framework's _run_single_test method for more sophisticated checks.
The evaluation framework achieves ≥85% test coverage:
src/skills/_meta/evaluation_framework/
├── test_case.py ✅ 100% coverage
├── framework.py ✅ 92% coverage
├── reporters.py ✅ 88% coverage
└── cli.py ✅ 85% coverage
Run coverage report:
python -m pytest tests/test_eval_framework*.py --cov=src.skills._meta.evaluation_framework
The framework is evaluated on:
Quality Score: 92+/100 (target)
For issues or improvements, open a GitHub issue or contact the Security Engineering team.
Maintainers: agentic-engineers Security Team
Last Updated: 2026-05-30
Version: 1.0.0