Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

TylerLeonhardt/ahpx

Open more actions menu

Repository files navigation

ahpx

Agent Host Protocol CLI — a thin command-line wrapper around the official @microsoft/agent-host-protocol client for managing AHP server connections, sessions, and agent interactions.

CI npm

What is ahpx?

ahpx is a command-line client for the Agent Host Protocol (AHP) — a WebSocket-based JSON-RPC protocol for managing AI agent sessions. Use ahpx to connect to AHP servers, create sessions, send prompts, stream responses, and handle tool confirmations from your terminal.

ahpx is a thin CLI wrapper: the protocol client itself is the official @microsoft/agent-host-protocol package. ahpx focuses on the command-line experience — connection profiles, session persistence, output formatting, fleet health, dev tunnels — and delegates the wire protocol to the official client.

Not a library. ahpx no longer ships an exported SDK. If you need to speak AHP programmatically, depend on @microsoft/agent-host-protocol directly. ahpx exposes only the ahpx CLI.

Features

  • 🔌 Connect to AHP servers via WebSocket with saved connection profiles
  • 💬 Interactive and one-shot prompting with streaming output
  • 📡 Multi-session management — concurrent sessions on a single connection
  • 🔄 Event forwarding — webhook and WebSocket targets for dashboards and pipelines
  • 🏗️ Fleet management — health checks, status monitoring, and server tagging
  • 💾 Session persistence — resume sessions, export/import history
  • 🔒 Configurable permission modes — approve-all, approve-reads, deny-all, autopilot
  • 🔑 Automatic auth — token resolution from env vars, CLI, or interactive prompt
  • 🌐 Dev Tunnel support — connect to remote agent hosts via Dev Tunnels
  • ⚙️ Session config — agent-specific settings (auto-approve, isolation, mode)
  • 🧩 Customizations — auto-discovered agent and skill files from .github/

Quick Start

npm install -g @tylerl0706/ahpx

# Add a server
ahpx server add local --url ws://localhost:8082 --default

# Start prompting
ahpx "what files are in this directory?"

Or use exec for one-shot tasks that create and dispose of a session automatically:

ahpx exec "summarize this repo"

CLI Commands

Prompting

Command Description
ahpx <text> Send a prompt (implicit — any text that isn't a command)
ahpx prompt <text> Send a prompt to an existing session
ahpx exec <text> One-shot: create a temp session, prompt, dispose
ahpx cancel Cancel the active turn in a session

Prompt options: -s <server>, -n <session-name>, -S <session-id>, -f <file>, --cwd <dir>, --config <key=value> (repeatable), --approve-all, --approve-reads, --deny-all, --idle-timeout <seconds>, --tag <key=value>, --forward-webhook <url>, --forward-ws <url>, --forward-filter <types>, --forward-headers <json>

Use -S <session-id> to target a session by its ID instead of name — useful for scripting and automation.

exec also accepts: -p <provider>, -m <model>, --config <key=value>

Server Management

Command Description
ahpx server add <name> --url <url> Save a named connection profile
ahpx server list List saved connections
ahpx server remove <name> Remove a saved connection
ahpx server test <target> Test connectivity to a server
ahpx server status Health check all saved servers
ahpx server health <name> Detailed health check for a single server

server add options: --token <token>, --default, --tag <tag> (repeatable), --tunnel <tunnel-id>

Dev Tunnels

Connect to remote AHP agent hosts via Dev Tunnels. Discovers tunnels tagged with protocolv5. Requires GITHUB_TOKEN, GH_TOKEN, or gh auth token.

Command Description
ahpx tunnel list List remote agent hosts
ahpx tunnel connect <tunnel-id> Connect to a remote agent host
# Save a tunnel as a named server connection
ahpx server add my-remote --tunnel <tunnel-id>

# Use the remote server for sessions
ahpx session new -s my-remote -n remote-session --cwd C:/Users/me/project
ahpx prompt -s my-remote -n remote-session "fix the bug"

Session Management

Command Description
ahpx session new Create a new agent session
ahpx session list List sessions (default: active only)
ahpx session show [id] Show session details
ahpx session close [id] Close a session (keeps record for history)
ahpx session history [id] Show turn history for a session (--full for complete transcript)
ahpx session active Show all active sessions on the server (live query)
ahpx session config View session configuration
ahpx session config set <key> <value> Set a mutable config property
ahpx session customization list List customizations on a session
ahpx session customization toggle <uri> Toggle a customization on/off
ahpx session export <id|name> Export a session's full transcript (json record or markdown)
ahpx session import <file> Import a session record from JSON

session new options: -s <server>, -p <provider>, -m <model>, -n <name>, --cwd <dir>, -t <timeout>, --config <key=value> (repeatable), --no-customizations

Session Config

Set agent-specific configuration at session creation or modify it on an active session.

ahpx session new -n my-session --cwd /path/to/repo --config autoApprove=autopilot --config isolation=worktree
ahpx session config -n my-session              # view config
ahpx session config set autoApprove autopilot -n my-session   # update config

Available config keys depend on the agent. For copilotcli: autoApprove (default/autoApprove/autopilot), isolation (folder/worktree), mode (interactive/plan), branch, permissions.

Transcripts & history

Every completed turn is persisted locally with its complete prompt and response text (not just a preview), so the full transcript survives session close and host disposal.

ahpx session history my-session                 # compact: one truncated line per turn
ahpx session history my-session --full          # complete prompt + response for every turn
ahpx --format json session history my-session   # adds the full `response`/`prompt` per turn

ahpx session export my-session                          # json record (re-importable, full turns)
ahpx session export my-session --format markdown        # human-readable transcript to stdout
ahpx session export my-session --format markdown --out transcript.md

session export and session history accept the session name positionally. Records written before 0.4.0 only have a 200-char preview; those turns render the preview with a clear "full text not recorded — pre-0.4.0 session" note (no migration required).

Customizations

ahpx automatically discovers .github/agents/*.md and .github/skills/*/SKILL.md files in the workspace and loads them into the agent session. Use --no-customizations to skip discovery.

ahpx session customization list -n my-session
ahpx session customization toggle <uri> -n my-session

Configuration

Command Description
ahpx config show Print resolved config with source annotations (alias: config list)
ahpx config get <key> Print a single resolved value (dotted path supported)
ahpx config set <key> <value> Set a value in ~/.ahpx/config.json (dotted path supported)
ahpx config init Create ~/.ahpx/config.json with defaults

Utilities

Command Description
ahpx connect [target] Connect to a server and print server info
ahpx agents List available agents and models on the server
ahpx content <uri> Fetch content by URI from the server
ahpx model <model-id> Switch the model for a session
ahpx watch [id] Attach to a session as an observer and stream activity
ahpx browse [directory] Browse server filesystem
ahpx completions bash|zsh|fish Generate shell completion scripts

Global Options

Flag Description
--format <format> Output format: text, json, or quiet (default: text)
--json-strict Suppress non-JSON stderr output (use with --format json)
-v, --verbose Enable debug logging to stderr
--version Print version
--help Show help

Using AHP programmatically

ahpx is a CLI, not a library — it does not export an SDK. To speak the Agent Host Protocol from your own Node.js or TypeScript code, depend on the official client directly:

npm install @microsoft/agent-host-protocol
import { AhpClient } from '@microsoft/agent-host-protocol/client';
import { WebSocketTransport } from '@microsoft/agent-host-protocol/ws';

// See the @microsoft/agent-host-protocol docs for the full client API.

ahpx itself is built on top of this package and simply adds a polished command-line experience (connection profiles, session persistence, output formatting, fleet health, dev tunnels) around it.

Exit Codes

ahpx uses semantic exit codes so scripts and automation can react to failures:

Code Meaning Description
0 Success Command completed successfully
1 Runtime error Unexpected error during execution
2 Usage error Bad CLI arguments or missing required flags
3 Timeout Connection or request timed out
4 No session Session not found — run session new first
5 Permission denied All permission requests were denied
130 Interrupted Process was interrupted (Ctrl+C)

See docs/errors.md for the full error reference.

Configuration

ahpx uses a layered configuration system. Settings are resolved in order of precedence:

  1. CLI flags — highest priority (e.g. --format json)
  2. Project config.ahpxrc.json in the current directory or git root
  3. Global config~/.ahpx/config.json
  4. Defaults — built-in fallback values
# Initialize global config
ahpx config init

# View resolved config with source annotations
ahpx config show

Recognized keys: defaultServer, defaultProvider, defaultModel, permissions, timeout, format, verbose, and defaultSessionConfig.

Persistent session defaults (defaultSessionConfig)

The Agent Host Protocol exposes per-session agent configuration (the server advertises a schema — e.g. copilotcli has an isolation property with allowed values folder/worktree). You can pass these per session with -c key=value, but defaultSessionConfig lets you persist a default once so it applies to every new session automatically.

# Persist a default once (dotted path sets a nested member):
ahpx config set defaultSessionConfig.isolation folder

# Equivalent, setting the whole map as JSON:
ahpx config set defaultSessionConfig '{"isolation":"folder"}'

# Read it back:
ahpx config get defaultSessionConfig.isolation   # -> folder

# Now every new session runs in folder mode — no -c needed:
ahpx exec "fix the tests"

# A per-call -c always wins over the persisted default:
ahpx exec -c isolation=worktree "fix the tests"  # this session uses a worktree

Precedence (lowest → highest):

  1. defaultSessionConfig from global config (~/.ahpx/config.json)
  2. defaultSessionConfig from project config (.ahpxrc.json) — shallow-merged per-key over global (each key overrides individually; other keys survive)
  3. Explicit -c key=value flags on the command (always win)

The merged map is applied at session creation everywhere a session is made (session new, prompt, exec, and the implicit prompt path). Keys are sent to the server as-is; the server validates them against its advertised schema, so an unknown key surfaces the server's own error rather than crashing the client.

Canonical example: persisting isolation=folder makes copilotcli sessions run in-place in your working directory instead of creating a git worktree — handy when you want the agent to operate directly on your checkout.

Authentication

ahpx resolves auth tokens automatically, checked in order:

  1. Connection profile token (from ahpx server add --token)
  2. AHPX_TOKEN env var
  3. GITHUB_TOKEN env var
  4. GH_TOKEN env var
  5. gh auth token CLI output
  6. Interactive prompt

No explicit login command is needed — just ensure one of the above is available.

Approval Flow

When an agent calls a tool, ahpx handles approval based on the tool's confirmation status:

  • Server-confirmed tools — show [auto-approved] and proceed without prompting.
  • Unconfirmed tools — show Allow Tool: ...? (y/N): and wait for user input.

Override with flags or session config:

ahpx exec --approve-all "fix the tests"                         # skip all prompts
ahpx exec --config autoApprove=autopilot "fix the tests"        # server-side auto-approval

Documentation

Document Description
PUBLISHING.md Publishing setup — OIDC trusted publishers, auto-bump pipeline, first-time config
docs/quick-reference.md One-page command cheat sheet
docs/user-guide.md Comprehensive user guide — CLI reference and architecture
docs/roadmap.md v0.2 roadmap with phase details and acceptance criteria
docs/errors.md Error catalog and exit code reference
docs/george-integration.md Integration guide for George agent dispatch
docs/protocol-feedback.md AHP protocol gap analysis and workarounds

Development

Requires Node.js ≥ 20.

npm install          # Install dependencies
npm run build        # Build with tsup
npm run dev          # Watch mode
npm run typecheck    # Type check with tsc
npm run lint         # Lint with Biome
npm test             # Run tests with Vitest

All four quality gates must pass before committing:

npm run typecheck && npm run lint && npm test && npm run build

Contributing

Project knowledge lives in .github/ so both humans and agents can find it:

Read the relevant skill docs before making changes — they'll save you time.

License

MIT

About

Agent Host Protocol CLI — manage AHP server connections, sessions, and agent interactions

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.