Harbor is a framework for evaluating and improving AI agents and language models across reusable benchmarks and execution environments. Developers and researchers use it to run agent evaluations, create benchmarks, perform parallel experiments, and generate rollouts for reinforcement-learning optimization, with the catalogue offering skills, instructions, and an MCP integration for the framework.
Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add harbor-framework/harbor --skill rewardkitgit clone --depth 1 https://github.com/harbor-framework/harborWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/harbor-framework/harbor/rewardkit)<a href="https://agentmods.dev/skills/harbor-framework/harbor/rewardkit"><img src="https://agentmods.dev/badge/skills/harbor-framework/harbor/rewardkit/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/harbor-framework/harbor/rewardkit"><img src="https://agentmods.dev/badge/skills/harbor-framework/harbor/rewardkit.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- Socket pass
- Snyk pass
- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00046 | $0.03169 |
| Opus 5.5 | $0.00018 | $0.01268 |
| Sonnet 5.5 | $0.00009 | $0.00634 |
| Haiku 4.5 | $0.00005 | $0.00317 |
Grade A, and why
rewardkit scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 7d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 352 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Help the user write task verifiers with Reward Kit. Reward Kit is a lightweight Python package that turns a directory of criteria files into a reward score. Each criterion is a Python function call or a TOML judge file; folders become separate rewards.
Setup in a Harbor task
Put criteria alongside test.sh in the task's tests/ directory:
tests/
├── test.sh
├── checks.py # programmatic criteria
└── judge.toml # optional LLM/agent judge
tests/test.sh:
#!/bin/bash
uvx --from 'harbor-rewardkit==0.2.*' rewardkit /tests
This runs all criteria in /tests/ against the workspace at /app and writes
/logs/verifier/reward.json. Defaults match Harbor's conventions — no extra config needed.
If judge criteria need API keys, pass them through task.toml:
[verifier.env]
ANTHROPIC_API_KEY = "${ANTHROPIC_API_KEY}"
Ask whether Reward Kit should run in the agent's shared environment or in a separate verifier environment. Prefer a separate verifier environment when judge prompts, grading dependencies, API keys, or clean-room checks should not be available to the agent:
[environment]
network_mode = "no-network" # Agent env baseline — offline during agent.run()
[verifier]
environment_mode = "separate"
[verifier.environment]
network_mode = "public" # Verifier env baseline — LLM judge API calls
docker_image = "python:3.12-slim"
In shared mode, the verifier runs in the agent container and inherits
[environment].network_mode. Put [verifier].network_mode only when verify()
needs different network access than the agent phase (a phase override, not a
baseline). If agent and verifier need different baselines without runtime
switching, use environment_mode = "separate" and set
[verifier.environment].network_mode.
Judge criteria that call external APIs need a public baseline or allowlist on
the verifier environment. Programmatic checks that only read local files can use
no-network.
In separate mode, tests/ is the verifier image build context and must provide
/tests/test.sh at runtime; Harbor does not upload tests/ into the running
verifier container.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 7d ago Changed · +2 lines 0c34dc358a11
- 10d ago Changed 8d05570fc432
- 17d ago Changed · +6 lines 2cf00738cca7
- 25d ago Changed · +26 lines 2959cfc47c7c
- 1mo ago Changed · +5 lines 77c7fd1fd679
- 1mo ago Changed 21db13ff6f68
- 1mo ago First seen · 313 lines · 46 tokens per session scan A 22d9ec44ca74
rewardkit is a skill published in the GitHub repository harbor-framework/harbor (6,185 stars, last pushed today), licensed Apache-2.0. It adds 46 tokens to every session and 3,169 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
agent-eval
Use when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual recall) or agent trajectories (tool correctness, completion), or picking an eval framework. NOT building the agent loop, tools or RAG…
evaluate-skill
Run, read, and diagnose a skill's Caliper eval — its success rate over k attempts, whether it fires, and whether it beats the agent without it. Use when the user wants to run, validate, interpret, or compare a skill's eval, or write an .eval.yaml spec whose tasks they have already decided.
writing-skills
Use when creating a new skill, editing an existing skill, or verifying skills work before deployment.
evals-clarify
Use when draft eval criteria need refining, clustering, and acceptance into the published goldset with an isolated holdout split (goldset.md + goldset.json).
evals-implement
Use when a published goldset is ready to become executable graders and configs — Python graders and metrics with auto-run unit tests verifying grader correctness.
evals-init
Use when standing up evals/{system}/ for the first time — scaffolds the EDD directory structure, picks PromptFoo or DeepEval by tech stack, and generates a security baseline.