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:
tiger-memory.config.yaml-- annotated memory configpersonas/researcher.md-- sample persona promptenv.example-- Slack bridge env template
Requirements
- Python 3.11+
- For the default
claude_pbackend: the Claude Code CLI (claude) onPATH. - For the
anthropic_sdkbackend: install with[anthropic]extra; pulls inclaude-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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98403292354f9efe8f1ee5f67667b2af471db3d48d52ff1af23929d82d678c80
|
|
| MD5 |
359b6a8427cb51b1eeb94e5ff76629ed
|
|
| BLAKE2b-256 |
039ece443a689a15fbb541af726be14269941fba0c1a896f6b991775b7809025
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
631c9b2a129e111682ed856a708cbacaf9f643f37c08286b27cdf8f2bb525857
|
|
| MD5 |
104cc531a25ae97068611be0c943d3a9
|
|
| BLAKE2b-256 |
c3b77ad7bb77b6c72b333d1a5c11e00b87f8f32d7558be7cc0b73bd7f8e6477a
|