Agent Harness banner
haasonsaas haasonsaas

Agent Harness

Development community

Description

Unified harness for hot-swapping between OpenAI Agents SDK and Anthropic Claude Agent SDK with shared tool registry

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

Agent Harness

Agent Harness is a small Python adapter for running the same tool registry through OpenAI Agents SDK or Anthropic Claude Agent SDK provider implementations. The core package has no runtime SDK dependency; provider SDKs are imported lazily only when that provider is used.

[![CI](https://github.com/evalops/agent-harness/actions/workflows/ci.yml/badge.svg)](https://github.com/evalops/agent-harness/actions/workflows/ci.yml) [![Bazel RBE](https://github.com/evalops/agent-harness/actions/workflows/bazel-rbe.yml/badge.svg)](https://github.com/evalops/agent-harness/actions/workflows/bazel-rbe.yml) [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)

What It Provides

  • A thread-safe global tool registry via @register_tool.
  • JSON Schema generation from Python type hints, including Optional, T | None, list[T], dict, Literal, and multi-type unions.
  • A common HarnessConfig and AgentResponse shape across providers.
  • Lazy OpenAI and Claude provider adapters.
  • Provider comparison helpers for running the same prompt against multiple adapters.
  • A built-in optional You.com search tool adapter.

The registry and schema generation work without OpenAI or Anthropic packages installed. Actual model runs require the provider extras and API credentials.

Install

pip install -e .
pip install -e ".[openai]"
pip install -e ".[anthropic]"
pip install -e ".[all]"
pip install -e ".[dev]"

Provider credentials:

export OPENAI_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."

Quick Start

import asyncio

from agent_harness import AgentHarness, HarnessConfig, register_tool


@register_tool(description="Get weather for a city")
def get_weather(city: str) -> str:
    return f"Weather in {city}: sunny, 72F"


async def main() -> None:
    config = HarnessConfig(
        system_prompt="You are a helpful assistant.",
        tool_names=["get_weather"],
        ma