Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
5b3d78e
refactor: rename agentpool to wolfharness across repository, package,…
Million-mo Aug 6, 2026
3d645a8
fix: override mknodes dependency-metadata to prevent stale PyPI agent…
Million-mo Aug 6, 2026
e418207
fix(opencode): add /experimental/capabilities and workspace/status ro…
Million-mo Aug 7, 2026
5ea6cb6
fix(opencode): guard OTel FastAPI route-details against _IncludedRouter
Million-mo Aug 7, 2026
c1fb0c5
fix(opencode): resolve OTel _IncludedRouter crash via upstream fix
Million-mo Aug 7, 2026
3000aaa
fix(opencode): restore OTel patch; document why not dependency upgrade
Million-mo Aug 7, 2026
464026b
Merge main into refactor/rename-to-wolfharness: resolve conflicts
Million-mo Aug 7, 2026
1351591
fix(lint): sort wolfharness_config imports in test_tool_call_snapshots
Million-mo Aug 7, 2026
1bc581d
chore(rename): rename leftover agentpool* test and session-pool dirs
Million-mo Aug 7, 2026
a198c13
docs(readme): rewrite README with logo, features, roadmap, and contri…
Million-mo Aug 7, 2026
10ec324
docs(readme): replace mermaid architecture diagram with image, fix ba…
Million-mo Aug 7, 2026
f7810ab
chore: remove stale dev scripts, prototypes, and empty overrides dir
Million-mo Aug 7, 2026
4744b9f
chore: add .codegraph/ to gitignore
Million-mo Aug 7, 2026
f50b6c0
chore: reorganize root directories and remove stale files
Million-mo Aug 7, 2026
d482be3
chore: move tool schemas alongside BackgroundTaskCapability
Million-mo Aug 7, 2026
7ec33e1
docs: add changelog directory and document release workflow in AGENTS.md
Million-mo Aug 7, 2026
23c27ea
feat: add backward-compatible agentpool import and CLI shims
Million-mo Aug 7, 2026
4432492
docs: add migration guide from AgentPool to WolfHarness in README
Million-mo Aug 7, 2026
bf89c41
fix: update test schema path after config/tools → schemas/ move
Million-mo Aug 7, 2026
f6bbab9
fix: suppress ToolResult return schema warning in QuestionCapability
Million-mo Aug 7, 2026
2f2e301
fix: shim packages now forward submodule imports via find_spec meta_p…
Million-mo Aug 7, 2026
ce131ee
feat: add compat/agentpool compatibility package for downstream projects
Million-mo Aug 7, 2026
0d41b5a
revert: remove compat/ directory — keep pyproject.toml name as wolfha…
Million-mo Aug 7, 2026
e15eaf6
fix: add return type annotations to shim packages for mypy strict mode
Million-mo Aug 7, 2026
3659ede
fix(docs): restore overrides/ directory for mkdocs Material theme
Million-mo Aug 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 4 additions & 4 deletions .agents/skills/sync-acp-spec/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,9 @@ Keep `src/acp/schema/` aligned with the official Agent Client Protocol reference
- `agent/implementations/debug_server/mock_agent.py` — add stubs to `MockAgent`

7. **Wire up in the ACP server** (if needed):
- `src/agentpool_server/acp_server/acp_agent.py` — implement new methods, advertise new capabilities
- `src/agentpool_server/acp_server/event_converter.py` — emit new session update types
- `src/agentpool_server/acp_server/session.py` — store new state
- `src/wolfharness_server/acp_server/acp_agent.py` — implement new methods, advertise new capabilities
- `src/wolfharness_server/acp_server/event_converter.py` — emit new session update types
- `src/wolfharness_server/acp_server/session.py` — store new state

8. **Update the synced commit hash** in `src/acp/__init__.py`:
```bash
Expand Down Expand Up @@ -106,7 +106,7 @@ Keep `src/acp/schema/` aligned with the official Agent Client Protocol reference
- `connection.py` (base JSON-RPC connection) — only if the wire protocol itself changes
- `transports.py` — transport layer is our own
- `stdio.py` — our process management layer
- `client/` implementations (`DefaultACPClient`, `HeadlessACPClient`, `NoOpClient`) — agentpool-specific
- `client/` implementations (`DefaultACPClient`, `HeadlessACPClient`, `NoOpClient`) — wolfharness-specific
- `registry/` — our agent registry, not part of ACP spec
- `task/` — our task abstraction
- `tool_call_reporter.py`, `tool_call_state.py` — our extensions
Expand Down
14 changes: 7 additions & 7 deletions .agents/skills/sync-skills-spec/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
name: sync-skills-spec
description: Sync the agentpool skills implementation with the official Agent Skills Spec by comparing against the reference repository.
description: Sync the wolfharness skills implementation with the official Agent Skills Spec by comparing against the reference repository.
---

# Sync Skills Spec

Keep `src/agentpool/skills/` aligned with the official Agent Skills Spec.
Keep `src/wolfharness/skills/` aligned with the official Agent Skills Spec.

## Steps

Expand All @@ -21,18 +21,18 @@ Keep `src/agentpool/skills/` aligned with the official Agent Skills Spec.
- Focus on the `SkillProperties` model, frontmatter fields, validation rules, and prompt generation

3. **Compare with our implementation**:
- `src/agentpool/skills/skill.py` — our `Skill` Pydantic model, validators, `parse_frontmatter()`, `to_prompt()`
- `src/agentpool/skills/registry.py` — discovery and registration (our extension, not part of the spec)
- `src/agentpool/skills/manager.py` — pool-wide management (our extension)
- `src/wolfharness/skills/skill.py` — our `Skill` Pydantic model, validators, `parse_frontmatter()`, `to_prompt()`
- `src/wolfharness/skills/registry.py` — discovery and registration (our extension, not part of the spec)
- `src/wolfharness/skills/manager.py` — pool-wide management (our extension)
- Check for missing fields, changed validation rules, new spec requirements

4. **Apply updates** to our code:
- Add any new frontmatter fields to the `Skill` model
- Update validators to match spec changes (name format, length limits, allowed fields)
- Update `to_prompt()` if the recommended XML format changed
- Do NOT replace our registry/manager — those are agentpool-specific extensions
- Do NOT replace our registry/manager — those are wolfharness-specific extensions

5. **Update the synced commit hash** in `src/agentpool/skills/skill.py`:
5. **Update the synced commit hash** in `src/wolfharness/skills/skill.py`:
- Get the current HEAD of the cloned repo: `git -C "$tmp/agentskills" rev-parse HEAD`
- Update the `SPEC_SYNCED_COMMIT` constant to the new hash
- This tracks which version of the spec we last synced against
Expand Down
21 changes: 0 additions & 21 deletions .copier-answers.yml

This file was deleted.

12 changes: 6 additions & 6 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
env:
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: uv run --no-group docs pytest --cov-report=xml --cov=src/agentpool/ --cov-report=term-missing
run: uv run --no-group docs pytest --cov-report=xml --cov=src/wolfharness/ --cov-report=term-missing

- name: VCR tests
run: uv run pytest tests/vcr/ --strict-vcr-cassette-usage --tb=short --no-cov -q
Expand Down Expand Up @@ -146,7 +146,7 @@ jobs:
run: uv sync --all-extras

- name: Build with PyInstaller
run: uv run pyinstaller agentpool.spec
run: uv run pyinstaller wolfharness.spec

- name: Get package version (Unix)
id: get_version_unix
Expand All @@ -167,23 +167,23 @@ jobs:
if: ${{ matrix.os != 'windows' }}
run: |
cd dist
zip agentpool-${{ matrix.os }}-${{ matrix.arch }}-${{ steps.get_version_unix.outputs.version }}.zip agentpool
zip wolfharness-${{ matrix.os }}-${{ matrix.arch }}-${{ steps.get_version_unix.outputs.version }}.zip wolfharness

- name: Zip binary (Windows)
if: ${{ matrix.os == 'windows' }}
shell: pwsh
run: |
cd dist
Compress-Archive -Path agentpool.exe -DestinationPath agentpool-${{ matrix.os }}-${{ matrix.arch }}-${{ steps.get_version_windows.outputs.version }}.zip
Compress-Archive -Path wolfharness.exe -DestinationPath wolfharness-${{ matrix.os }}-${{ matrix.arch }}-${{ steps.get_version_windows.outputs.version }}.zip

- name: Upload binary to release (Unix)
if: ${{ matrix.os != 'windows' }}
uses: softprops/action-gh-release@v2
with:
files: dist/agentpool-${{ matrix.os }}-${{ matrix.arch }}-${{ steps.get_version_unix.outputs.version }}.zip
files: dist/wolfharness-${{ matrix.os }}-${{ matrix.arch }}-${{ steps.get_version_unix.outputs.version }}.zip

- name: Upload binary to release (Windows)
if: ${{ matrix.os == 'windows' }}
uses: softprops/action-gh-release@v2
with:
files: dist/agentpool-${{ matrix.os }}-${{ matrix.arch }}-${{ steps.get_version_windows.outputs.version }}.zip
files: dist/wolfharness-${{ matrix.os }}-${{ matrix.arch }}-${{ steps.get_version_windows.outputs.version }}.zip
2 changes: 1 addition & 1 deletion .github/workflows/publish_docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}/agentpool
images: ghcr.io/${{ github.repository }}/wolfharness
tags: |
type=semver,pattern={{version}}
type=ref,event=branch
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pytest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ jobs:
run: uv sync --all-extras --no-group lint
- name: Import smoke test
run: |
uv run python -c "mods=['agentpool','agentpool_config','agentpool_cli','agentpool_commands','agentpool_storage','agentpool_prompts','agentpool_server','agentpool_toolsets','acp'];[(__import__(m),print(f' OK {m}')) for m in mods];print(f'All {len(mods)} modules imported successfully')"
uv run python -c "mods=['wolfharness','wolfharness_config','wolfharness_cli','wolfharness_commands','wolfharness_storage','wolfharness_prompts','wolfharness_server','wolfharness_toolsets','acp'];[(__import__(m),print(f' OK {m}')) for m in mods];print(f'All {len(mods)} modules imported successfully')"
- name: Test collection check
run: uv run pytest --co -q 2>&1 | tail -3

Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ test_configs/
# Prometheus / OpenCode workspace files
.omo/

# Codegraph local index cache
.codegraph/

# Git worktrees
.worktrees/

Expand Down
4 changes: 2 additions & 2 deletions .opencode/agents/review-code.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ code changes in a pull request and report findings. You do NOT edit files.
- No `asyncio.create_task()` without an active span

5. **Architecture**
- Config models import from `agentpool_config.*`, not `agentpool.models`
- New modules follow existing patterns in `src/agentpool/`
- Config models import from `wolfharness_config.*`, not `wolfharness.models`
- New modules follow existing patterns in `src/wolfharness/`
- New capabilities registered properly in the capability system

## Output Format
Expand Down
8 changes: 4 additions & 4 deletions .opencode/agents/review-docs.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ documentation. You do NOT edit files.
## What to Check

1. **Context Loading Table**
- New `src/agentpool/**/AGENTS.md` files MUST be registered in the root
- New `src/wolfharness/**/AGENTS.md` files MUST be registered in the root
`AGENTS.md` Context Loading table.
- Removed subsystem AGENTS.md files MUST be removed from the table.

2. **Subsystem Documentation**
- New modules under `src/agentpool/` that introduce a new directory SHOULD have
- New modules under `src/wolfharness/` that introduce a new directory SHOULD have
a corresponding `AGENTS.md` in that directory.
- Changes to `src/agentpool/lifecycle/`, `src/agentpool/capabilities/`,
`src/agentpool/skills/`, `src/agentpool/hooks/` MUST check whether the
- Changes to `src/wolfharness/lifecycle/`, `src/wolfharness/capabilities/`,
`src/wolfharness/skills/`, `src/wolfharness/hooks/` MUST check whether the
subsystem AGENTS.md needs updating.

3. **Explanation Docs**
Expand Down
4 changes: 2 additions & 2 deletions .opencode/agents/review-lead.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,10 @@ single review comment. You do NOT edit files or run commands.
## When to Invoke review-docs

Always invoke `@review-docs` when the PR:
- Adds or removes files under `src/agentpool/`
- Adds or removes files under `src/wolfharness/`
- Modifies any `AGENTS.md`
- Modifies anything under `docs/`
- Adds a new directory under `src/agentpool/` (potential new subsystem)
- Adds a new directory under `src/wolfharness/` (potential new subsystem)
- Changes code style conventions, testing rules, or telemetry rules
- Adds or removes lifecycle dimensions, capabilities, protocols, or tools

Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ repos:
name: check-jsonschema
entry: uv run check-jsonschema --schemafile schema/config-schema.json
language: system
files: ^src/agentpool/config_resources/.*\.yml$|^docs/examples/.*/config\.yml$
files: ^src/wolfharness/config_resources/.*\.yml$|^docs/examples/.*/config\.yml$
require_serial: true

# Phase 4: pre-push — heavier checks, only when pushing (~30-60s)
Expand Down
60 changes: 41 additions & 19 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,28 @@ All significant changes go through OpenSpec: `/opsx:explore` → `/opsx:propose`
- Location: `openspec/` (24 capability specs, 34 archived changes)
- CLI: `openspec` v1.4+ — see `openspec/config.yaml`

## Changelog

Every release requires a changelog entry. See `changelog/README.md` for the full convention.

### Release workflow

1. Development changes accumulate in `changelog/unreleased/` — one detail file per logical change (`YYYY-MM-DD-short-slug.md`).
2. At release time:
- Rename `unreleased/` to the version number (e.g. `2.10.0/`).
- Write `README.md` (summary linking each detail file) and `RELEASE.md` (GitHub Release body).
- Update `pyproject.toml` version.
- Commit **before** creating the git tag.
- Create a fresh empty `unreleased/` for the next cycle.

### Detail file format

```markdown
# Title

What changed and why. Use `##` sections once the entry covers more than one thing.
```

## Quick Commands

```bash
Expand All @@ -22,8 +44,8 @@ uv run ruff check src/ # Lint
uv run ruff format src/ # Format
uv run --no-group docs mypy src/ # Type check
duty lint # All checks
agentpool run <name> "prompt" # Run agent
agentpool serve-acp config.yml # Start ACP server
wolfharness run <name> "prompt" # Run agent
wolfharness serve-acp config.yml # Start ACP server
```

## Code Style — Red Lines
Expand All @@ -32,7 +54,7 @@ agentpool serve-acp config.yml # Start ACP server
- PEP 8 via Ruff. Google-style docstrings (no types in Args section).
- Type hints required (`mypy --strict`). **Never** use `as any`, `@ts-ignore`, or type suppressions.
- `from __future__ import annotations` for forward references.
- Use `TYPE_CHECKING` blocks to avoid circular imports. Config models import from `agentpool_config.*`, not `agentpool.models`.
- Use `TYPE_CHECKING` blocks to avoid circular imports. Config models import from `wolfharness_config.*`, not `wolfharness.models`.
- No `getattr`/`hasattr` — provide full type safety.
- NEVER use shortcuts or leave TODOs unless explicitly asked.

Expand All @@ -50,28 +72,28 @@ Instrument critical-path code (RunLoop, Turn, delegation, protocol entry points)

## Key Files

- `src/agentpool/delegation/pool.py` — AgentPool orchestration
- `src/agentpool/agents/agent.py` — Native agent implementation
- `src/agentpool/messaging/messagenode.py` — MessageNode base abstraction
- `src/agentpool/orchestrator/core.py` — EventBus, SessionController
- `src/agentpool/orchestrator/run.py` — RunHandle (RunLoop) lifecycle
- `src/agentpool/models/manifest.py` — Configuration schema
- `src/agentpool/capabilities/` — Capability system (M3)
- `src/agentpool/lifecycle/` — Lifecycle dimensions (M2)
- `src/wolfharness/delegation/pool.py` — AgentPool orchestration
- `src/wolfharness/agents/agent.py` — Native agent implementation
- `src/wolfharness/messaging/messagenode.py` — MessageNode base abstraction
- `src/wolfharness/orchestrator/core.py` — EventBus, SessionController
- `src/wolfharness/orchestrator/run.py` — RunHandle (RunLoop) lifecycle
- `src/wolfharness/models/manifest.py` — Configuration schema
- `src/wolfharness/capabilities/` — Capability system (M3)
- `src/wolfharness/lifecycle/` — Lifecycle dimensions (M2)

## Context Loading

| Working on | Read this |
|---|---|
| RunLoop / Turn / EventBus | `src/agentpool/orchestrator/AGENTS.md` |
| Lifecycle dimensions | `src/agentpool/lifecycle/AGENTS.md` |
| Capabilities / tools | `src/agentpool/capabilities/AGENTS.md` |
| Skills system | `src/agentpool/skills/AGENTS.md` |
| Hooks system | `src/agentpool/hooks/AGENTS.md` |
| RunLoop / Turn / EventBus | `src/wolfharness/orchestrator/AGENTS.md` |
| Lifecycle dimensions | `src/wolfharness/lifecycle/AGENTS.md` |
| Capabilities / tools | `src/wolfharness/capabilities/AGENTS.md` |
| Skills system | `src/wolfharness/skills/AGENTS.md` |
| Hooks system | `src/wolfharness/hooks/AGENTS.md` |
| Tests | `tests/AGENTS.md` |
| Protocol servers | `src/agentpool_server/AGENTS.md` |
| Protocol servers | `src/wolfharness_server/AGENTS.md` |
| ACP protocol | `src/acp/AGENTS.md` |
| Core framework overview | `src/agentpool/AGENTS.md` |
| Core framework overview | `src/wolfharness/AGENTS.md` |
| Architecture deep-dives | `docs/explanation/` |
| Module structure | `docs/explanation/module-structure.md` |
| Graph architecture | `docs/explanation/graph-architecture.md` |
Expand All @@ -83,7 +105,7 @@ Instrument critical-path code (RunLoop, Turn, delegation, protocol entry points)
| ToolDisplayCapability (tool rename + diff + rich display events) | `docs/explanation/tool-display-capability.md` |
| Telemetry rules | `docs/explanation/telemetry.md` |
| Usage examples | `docs/explanation/usage-examples.md` |
| Extending AgentPool | `docs/explanation/extending-agentpool.md` |
| Extending AgentPool | `docs/explanation/extending-wolfharness.md` |
| Where to put new docs | `docs/meta/documentation-guide.md` |

## Tool Compatibility
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@ RUN pip install --no-cache-dir "."
EXPOSE 8000

# Run the server
ENTRYPOINT ["agentpool", "serve-api"]
ENTRYPOINT ["wolfharness", "serve-api"]
CMD ["--auto-discover"]
Loading
Loading