hiveloomdocs

Quickstart

Build a summarizer whose output must be valid JSON with a nonempty summary. Construction, validation, and the dry-run need no model API key. The final run does. Start with the 1.3.0 installation.

1. Inspect the available contract

hiveloom schema --json
hiveloom catalog tools --json
hiveloom catalog validators --json

The catalog includes installed extensions. Inspect it before choosing a builtin; MCP tools are discovered separately from declared servers.

2. Create the harness and its output check

hiveloom init ./summarizer --name summarizer \
  --task 'Summarize the supplied text. Return only a JSON object with a nonempty "summary" string.' \
  --json

mkdir -p ./summarizer/schemas
cat > ./summarizer/schemas/output.json <<'JSON'
{
  "type": "object",
  "properties": {"summary": {"type": "string", "minLength": 1}},
  "required": ["summary"],
  "additionalProperties": false
}
JSON

hiveloom add validator --builtin output_schema \
  --schema-file schemas/output.json --dir ./summarizer --json
hiveloom set loop.require_verification true --dir ./summarizer --json

printf '%s\n' 'The library extended its opening hours after residents requested evening access.' \
  > ./summarizer/notes.txt
hiveloom validate ./summarizer --json

Use init, add, set, and remove to change harness.yaml; each mutation validates and rolls back on error. Schema and code assets are ordinary files. This example supplies the text directly, so it needs no file-reading tool.

3. Inspect the first request without a model call

hiveloom run ./summarizer --input-file ./summarizer/notes.txt --dry-run --json

Check the prompt, input, tools, and limits in the result. --input-file reads file contents; --input-text sends literal text. Use these explicit forms instead of legacy --input, which infers whether a value is a path.

Dry-run makes no model call. If a harness declares MCP servers, it still contacts them to discover tools; this example declares none.

4. Make a real run

The default executor uses the claude provider:

export ANTHROPIC_API_KEY=sk-...
hiveloom run ./summarizer --input-file ./summarizer/notes.txt --json

To use another provider, inspect its catalog and set the model atomically:

hiveloom models openai --json
hiveloom set model openai/gpt-6-luna --dir ./summarizer --json
# Export OPENAI_API_KEY, then repeat the run above.

The JSON result contains status, output, verification verdicts, cost, and run identity. Invalid output produces retry feedback while turns remain; an unresolved failure is reported explicitly. The schema checks shape and a nonempty field. It does not check that the summary is faithful to the input; add a task-specific check when that is an acceptance requirement.

Exit code Meaning
0 Success
1 Verification failed
2 Guardrail halt
3 Invalid spec or request
4 Runtime failure

Scripts should check both the exit code and JSON outcome before consuming an answer as a success.

5. Read the evidence before changing the harness

hiveloom stats ./summarizer --json
hiveloom trace <run_id> --verify --json
hiveloom signal ./summarizer --json

signal locates failure patterns without a model call. One run is not enough to establish an improvement. Use a local evaluation for repeated cases and the workbench to inspect the full context and trace.

Next step Command or guide
Draft a change for review hiveloom evolve ./summarizer --propose --json
Review the queue hiveloom proposals list ./summarizer --json
Inspect a proposal hiveloom proposals show ./summarizer <proposal_id> --json
Explicitly apply it hiveloom proposals apply ./summarizer <proposal_id> --yes --json
Assess subsequent runs hiveloom assess ./summarizer --json
Measure keep-or-revert changes against an eval Signal-driven evolution
Run improvement across multiple rounds Research programs; requires an eval or concepts charter
Re-enter a failure at a model call Journal and forks

Other ways to build and call it

Model-driven construction uses a separate proposing model and may incur cost:

hiveloom generate 'Summarize supplied text as JSON with a nonempty summary.' \
  -o ./generated-summarizer --json

The workbench drives the same framework through a copilot and a harness workspace. For Python embedding:

from hiveloom import run_harness

result = run_harness(
    "./summarizer",
    "The library now opens in the evening.",
    literal_input=True,
)
print(result.status, result.output)

Expose finished harnesses as MCP tools with hiveloom mcp serve, serve them over HTTP, or package them for another machine. See Deploying and evolving for runtime and trust requirements.