Harbor Agents
A collection of custom agents for Harbor - the AI agent evaluation framework.
Installation
pip install harbor-agents
Available Agents
ClaudeCodeWithSkills
Extends Claude Code with custom skills support. Load pre-configured skills into the container for evaluations.
# Load all skills from a directory
harbor run -p ./my-task \
--agent-import-path harbor_agent.skilled_claude:ClaudeCodeWithSkills \
-m anthropic/claude-sonnet-4-20250514 \
--ak skill_dir=./skills
# Load specific skills only
harbor run -p ./my-task \
--agent-import-path harbor_agent.skilled_claude:ClaudeCodeWithSkills \
-m anthropic/claude-sonnet-4-20250514 \
--ak skill_dir=./skills \
--ak skills=my-skill,another-skill
# Baseline (no skills)
harbor run -p ./my-task \
--agent-import-path harbor_agent.skilled_claude:ClaudeCodeWithSkills \
-m anthropic/claude-sonnet-4-20250514 \
--ak skill_dir=./skills \
--ak 'skills='
Options:
| Option | Description |
|---|---|
skill_dir |
Path to directory containing skill folders |
skills |
Filter: omit for all, skill-a,skill-b for specific, empty string for none |
Skill Directory Structure:
skills/
├── my-skill/
│ ├── SKILL.md # Required
│ └── references/ # Optional
└── another-skill/
└── SKILL.md
MultiTurnAgent
A composite agent for testing multi-turn conversations. Combines a simulated user (which generates prompts) with an inner agent (which processes them).
harbor run -p ./my-task \
--agent-import-path harbor_agent.multi_turn:MultiTurnAgent \
-m anthropic/claude-sonnet-4-20250514 \
--ak simulated_user=my_module:MySimulatedUser \
--ak agent=harbor.agents.installed.claude_code:ClaudeCode \
--ak 'agent_kwargs={"model_name": "anthropic/claude-sonnet-4-20250514"}' \
--ak max_turns=10
Options:
| Option | Description |
|---|---|
simulated_user |
Import path to SimulatedUser subclass (module.path:ClassName) |
agent |
Import path to inner agent (module.path:ClassName) |
simulated_user_kwargs |
JSON string or dict of kwargs for simulated user |
agent_kwargs |
JSON string or dict of kwargs for inner agent |
max_turns |
Maximum conversation turns (default: 50) |
Creating a Simulated User:
from harbor_agent.multi_turn import SimulatedUser, SimulatedUserDone, ConversationMessage
class MySimulatedUser(SimulatedUser):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self._turn = 0
async def next_message(self, conversation: list[ConversationMessage]) -> str:
self._turn += 1
if self._turn > 3:
raise SimulatedUserDone("Task complete")
return f"Please do step {self._turn}"
Conversation Flow:
next_message()is called with conversation history- Returns a prompt string → sent to inner agent
- Inner agent responds → added to history
- Repeat until
SimulatedUserDoneis raised ormax_turnsreached
Output: Saves trajectory.json in ATIF format with all conversation turns.
Development
uv sync --all-extras # Install
uv run pytest -v # Test
uv run ruff check src # Lint
uv run mypy src # Type check
License
Apache 2.0
Metadata
Release files for harbor-agents 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| harbor_agents-0.2.0.tar.gz | 218.4 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| harbor_agents-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 233.9 kB
Release files / harbor_agents-0.2.0.tar.gz
| Download URL | harbor_agents-0.2.0.tar.gz |
|---|---|
| Size | 218.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3ebd61c957f8f7ce0e939f77d72d90bc2e2b23f2716344eabf0ebe6b6f7e45ff
|
|
BLAKE2b-256 checksum How to use checksums |
5b4a2599e3b70810e7fd07950b45d5a052f646c859544784a075b147ec402c50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 5, 2026.
Transparency logRelease files / harbor_agents-0.2.0-py3-none-any.whl
| Download URL | harbor_agents-0.2.0-py3-none-any.whl |
|---|---|
| Size | 15.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
491024188d7b2b4a9b5e68ffcea88256c2eeaeffcec29e8fc22f35bd65ce5f4a
|
|
BLAKE2b-256 checksum How to use checksums |
eb544bbfb26045b27ebb6323dce762bc5d1f4c3aafe81b60915af83be5b3db5d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 5, 2026.
Transparency logSecurity for harbor-agents 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for harbor_agents-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 5, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.