Skip to content

Add support for more harnesses - #26

Open
armstrongl wants to merge 8 commits into
mainfrom
larah/more-harnesses
Open

Add support for more harnesses#26
armstrongl wants to merge 8 commits into
mainfrom
larah/more-harnesses

Conversation

@armstrongl

@armstrongl armstrongl commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

Summary

We've wanted broader harness support without having to rediscover each client's routing contract, so this adds three clients and documents the path for adding and testing more:

  • Pi (internal/clients/pi) - routes OpenAI Responses, Anthropic Messages, OpenAI Chat Completions, and Google Vertex through a generated per-launch extension. The extension leaves the user's Pi settings and sessions alone, namespaces Aperture providers, and cleans itself up after exit.
  • Oh My Pi (internal/clients/omp) - uses the same extension API for four protocols, with provider, backend, and model selection plus quick replay and yolo-mode support.
  • Hermes Agent (internal/clients/hermes) - routes OpenAI Chat Completions through CUSTOM_BASE_URL and a per-process custom-provider override, so the user's Hermes config stays in place.
  • Contributor workflow (docs/adding-a-client.md, .agents/skills/) - records the client contract, menu and replay conventions, CI gates, and live routing checks that catch failures unit tests can't.

Other changes

  • README.md: lists Pi, Oh My Pi, and Hermes Agent, and links to the contributor guide and repo skills
  • .gitignore: ignores local .artifacts/ output used during client testing
  • internal/clients/pi/pi_test.go: covers generated provider extensions, all supported protocols, replay staleness, menu flow, and cleanup behavior

Test plan

  • Run gofmt -l . -> no output
  • Run go vet ./... -> no findings
  • Run make test -> all packages pass
  • Run make build -> launcher builds successfully
  • Route a headless Hermes OpenAI Chat request through http://ai -> returns PONG
  • Run a Hermes terminal tool call through http://ai -> returns tool-ok
  • Walk each new client through provider, backend, and model selection in ./.build/aperture -debug, then confirm quick select after exit

Adds docs/adding-a-client.md, a step-by-step contributor guide covering the
clients.Client interface, both routing variants (environment variables and a
generated config file), the menu flow, replay, and the CI gates.

Also ignores .artifacts/, which holds local session scratch output.
Pi has no environment variable for a custom API base URL, so routing is
expressed as a provider definition. This client generates a per-launch
extension and loads it with 'pi -e', leaving the user's own ~/.pi/agent
directory (settings, logins, session history) untouched.

Supports the four wire protocols Aperture serves: OpenAI Responses,
Anthropic Messages, OpenAI Chat Completions, and Google Vertex. Bedrock is
omitted because Pi's bedrock API type fails at request time.

Registers the client in cmd/aperture/main.go and lists it in the README.
Two agent skills, kept in the repo so they stay in step with the code they
describe:

- adding-aperture-cli-client points at docs/adding-a-client.md and cites
  internal/clients/pi as the fullest worked example.
- testing-an-aperture-cli-client covers the four verification layers: the
  CI gates, a headless live request per protocol, tool calling, and the
  interactive TUI checks that need a human.
Audits README.md, docs/adding-a-client.md, and every .agents/skills/*/SKILL.md
against the code, including the skills themselves. Findings carry a tier label
proving each claim: static citation checks, executed CI gates and /api/providers
output, and live per-protocol requests through a client's own builders.

Read-only by default; only mechanical drift is offered for auto-fix, with a diff.
Records two findings verified present today: a dangling "Test it end to end"
cross-reference, and a README with no pointer to docs/ or .agents/skills/.
Add Oh My Pi as a registered Aperture CLI client with discovery, Bun-based installation, provider and backend selection, model selection, YOLO mode, and quick-select replay.

Generate a temporary per-launch OMP extension instead of replacing user configuration. The extension registers Aperture-backed providers for OpenAI Responses, Anthropic Messages, OpenAI Chat Completions, and Google Vertex, then removes itself when the launched process exits.

Document Oh My Pi as a supported agent and cover endpoint construction, provider filtering, generated extension content and permissions, launch arguments, replay validation, and install metadata. This means users can launch OMP through compatible Aperture providers while retaining their existing OMP settings, credentials, and sessions.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant