Skip to main content

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:

  1. next_message() is called with conversation history
  2. Returns a prompt string → sent to inner agent
  3. Inner agent responds → added to history
  4. Repeat until SimulatedUserDone is raised or max_turns reached

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)

Source distribution for harbor-agents 0.2.0
File Size Uploaded Provenance
harbor_agents-0.2.0.tar.gz 218.4 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for harbor-agents 0.2.0
File Interpreter ABI Platform
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page