Skip to main content

A generic Claude Code agent harness: iterative task execution, Slack integration, and persistent memory management.

Project description

TigerHarness

A generic Claude Code agent harness: iterative task execution, Slack integration, and persistent memory management.

Sub-packages

Package Description
tigerharness.agent_sdk Backend-agnostic agent SDK. Same caller code, swappable runtimes: claude -p subprocess, Anthropic's claude-agent-sdk, OpenAI's openai-agents (planned).
tigerharness.task_runner Fire-and-forget iterative task execution. Drives a persona through N Claude turns with periodic /compact.
tigerharness.slack_bridge Slack Socket Mode bridge. Forwards DMs to a claude -p backend and posts replies back to the thread.
tigerharness.tiger_memory Persistent agent memory: archive, journal, briefing with lazy rebuild, kind-decay must-memorize, and drill-down.

Installation

# Core (claude -p backend only; Claude Code CLI must be on PATH)
pip install tigerharness

# With the official claude-agent-sdk backend
pip install tigerharness[anthropic]

# With Slack bridge support
pip install tigerharness[slack]

# With memory support
pip install tigerharness[memory]

# With memory + RAG (local embeddings, free)
pip install tigerharness[memory-rag]

# Everything
pip install tigerharness[all]

Or with uv:

uv add tigerharness
uv add tigerharness --extra all

Quick start

Scaffold a new project

# Create config files in the current directory
tigerharness init --name researcher

# Or with tiger-memory support
tigerharness init --name researcher --memory

# This creates:
#   personas/researcher.md     -- edit your agent's instructions
#   .env                       -- fill in Slack tokens
#   tiger-memory.config.yaml   -- (only with --memory)

Task runner

# 1. Point tigerharness at your personas directory
export TIGERHARNESS_PERSONAS_DIR=./personas

# 2. Assign a task (5 iterations)
python -m tigerharness.task_runner assign \
    --to researcher \
    --prompt "Research the latest developments in solar energy" \
    --iters 5

# 3. Check status
python -m tigerharness.task_runner list

# 4. View logs
python -m tigerharness.task_runner logs <task-id>

Slack bridge

# 1. Fill in your Slack tokens in .env (from api.slack.com)
#    SLACK_APP_TOKEN=xapp-...
#    SLACK_BOT_TOKEN=xoxb-...
#    ALLOWED_SLACK_USER_IDS=U0123ABC

# 2. Run the bridge
python -m tigerharness.slack_bridge

Tiger memory

# 1. Copy the example config
cp examples/tiger-memory.config.yaml tiger-memory.config.yaml
# Edit: set store.root and sources.project_path

# 2. Initialize the memory store
tiger-memory --config tiger-memory.config.yaml init

# 3. Bootstrap (one-time backfill from existing transcripts)
tiger-memory --config tiger-memory.config.yaml bootstrap --dry-run
tiger-memory --config tiger-memory.config.yaml bootstrap

# 4. Rebuild (incremental, run after each session)
tiger-memory --config tiger-memory.config.yaml rebuild

# 5. Search memory
tiger-memory --config tiger-memory.config.yaml search "solar energy"

# 6. Pin a must-memorize fact
tiger-memory --config tiger-memory.config.yaml pin "Prefers solar over wind"

Configuration

All paths are resolved from environment variables -- no hardcoded paths.

Variable Default Description
TIGERHARNESS_STATE_DIR ~/.local/state/tigerharness-tasks/ Task runner state directory
TIGERHARNESS_PERSONAS_DIR (none) Directory containing <name>.md prompt files
TIGERHARNESS_SLACK_ENV .env Path to slack-bridge .env file
TIGERHARNESS_AGENT_CWD . Working directory for the Claude agent
TIGERHARNESS_AGENT_PROMPT (none) Path to the agent's system prompt
TIGERHARNESS_SLACK_BRIDGE_DIR (none) Path to slack-bridge service dir (for notify CLI)
TIGERHARNESS_ATTACHMENT_DIR /tmp/slack-attachments Where to stage downloaded files
TIGER_MEMORY_CONFIG (none) Path to tiger-memory YAML config
TIGER_MEMORY_CLI (none) Path to tiger-memory CLI binary

Examples

See examples/ for sample configs:

Requirements

  • Python 3.11+
  • For the default claude_p backend: the Claude Code CLI (claude) on PATH.
  • For the anthropic_sdk backend: install with [anthropic] extra; pulls in claude-agent-sdk.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tigerharness-0.1.3.tar.gz (258.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tigerharness-0.1.3-py3-none-any.whl (165.1 kB view details)

Uploaded Python 3

File details

Details for the file tigerharness-0.1.3.tar.gz.

File metadata

  • Download URL: tigerharness-0.1.3.tar.gz
  • Upload date:
  • Size: 258.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"NixOS","version":"25.11","id":"xantusia","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for tigerharness-0.1.3.tar.gz
Algorithm Hash digest
SHA256 98403292354f9efe8f1ee5f67667b2af471db3d48d52ff1af23929d82d678c80
MD5 359b6a8427cb51b1eeb94e5ff76629ed
BLAKE2b-256 039ece443a689a15fbb541af726be14269941fba0c1a896f6b991775b7809025

See more details on using hashes here.

File details

Details for the file tigerharness-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: tigerharness-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 165.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"NixOS","version":"25.11","id":"xantusia","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for tigerharness-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 631c9b2a129e111682ed856a708cbacaf9f643f37c08286b27cdf8f2bb525857
MD5 104cc531a25ae97068611be0c943d3a9
BLAKE2b-256 c3b77ad7bb77b6c72b333d1a5c11e00b87f8f32d7558be7cc0b73bd7f8e6477a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page