Grievous — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Grievous (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
"Your lightsabers will make a fine addition to my collection."
A hallucination engine. Typed pseudorandom data via Anthropic API. MCP server.
This is not a PRNG. This is not a test data framework with schema validation. This is a footgun with good trigger discipline expected of the operator.
Good for: seeding dev DBs, one-off REPL sessions, agentic pipelines that need typed data fast, anywhere plausible beats uniform.
Not for: cryptography, reproducibility, performance-sensitive paths, production data.
pip install grievous-mcpSet your API key:
export ANTHROPIC_API_KEY=sk-ant-...from grievous.backend import generate
# Single object — natural language schema
user = generate("a User with name, age, email, and city")
# {"name": "Priya Nair", "age": 34, "email": "[email protected]", "city": "Bangalore"}
# Batch
products = generate("a Product with id, name, price_usd, and category", count=5)
# [{"id": 1, "name": "Wireless Headphones", ...}, ...]
# JSON Schema works too
import json
schema = json.dumps({
"type": "object",
"properties": {
"transaction_id": {"type": "string", "format": "uuid"},
"amount_usd": {"type": "number"},
"status": {"type": "string", "enum": ["pending", "cleared", "failed"]},
}
})
txn = generate(schema)
# {"transaction_id": "a3f1...", "amount_usd": 142.5, "status": "cleared"}
# Freeform — anything the model can hallucinate
tensor = generate("a 4x4 float32 matrix, values between -1 and 1")
timestamp = generate("an ISO 8601 timestamp from sometime in 2019")
phone = generate("a plausible Indian mobile number")Returns parsed JSON if the model cooperated. Raw string if it didn't. No exceptions.
Run directly:
grievousAdd to your MCP client config (e.g. Claude Desktop claude_desktop_config.json):
{
"mcpServers": {
"grievous": {
"command": "grievous",
"env": {
"ANTHROPIC_API_KEY": "your-key-here"
}
}
}
}generategenerate(schema, count=1, model="claude-haiku-4-5-20251001")| Arg | Type | Default | Description |
|---|---|---|---|
schema | string | — | Natural language or JSON Schema |
count | int | 1 | Number of instances |
model | string | claude-haiku-4-5-20251001 | Any Anthropic model |
He's a General (general-purpose). He collects everything you hand him (schemas, types, whatever). He's chaotic but capable. He doesn't work for one army.
The cough is the nondeterminism.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.