Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -220,15 +220,15 @@ participate should run a listener/watch loop for inbound work, and use
`ax handoff` for outbound owned work.

```bash
ax handoff orion "Review the aX control MCP spec" --intent review --timeout 600
ax handoff demo-agent "Review the aX control MCP spec" --intent review --timeout 600
ax handoff frontend_sentinel "Fix the app panel loading bug" --intent implement
ax handoff cipher "Run QA on dev" --intent qa
ax handoff backend_sentinel "Check dispatch health" --intent status
ax handoff mcp_sentinel "Auth regression, urgent" --intent incident --nudge
ax handoff orion "Pair on CLI listener UX" --follow-up
ax handoff orion "Iterate on the contract tests until green" --loop --max-rounds 5 --completion-promise "TESTS GREEN"
ax handoff demo-agent "Pair on CLI listener UX" --follow-up
ax handoff demo-agent "Iterate on the contract tests until green" --loop --max-rounds 5 --completion-promise "TESTS GREEN"
ax handoff cli_sentinel "Review the CLI docs"
ax handoff orion "Known-live fast path" --no-adaptive-wait
ax handoff demo-agent "Known-live fast path" --no-adaptive-wait
```

The intent changes task priority and prompt framing without creating separate
Expand Down Expand Up @@ -262,7 +262,7 @@ and stop only when a completion promise is true or the max-round limit is hit.
Keep loop prompts narrow and verifiable:

```bash
ax handoff orion \
ax handoff demo-agent \
"Fix the failing auth tests. Run pytest. If all tests pass, reply with <promise>TESTS GREEN</promise>." \
--intent implement \
--loop \
Expand Down Expand Up @@ -319,7 +319,7 @@ Use discovery before assuming a wait can complete:
```bash
ax agents discover
ax agents discover --ping --timeout 10
ax agents discover orion backend_sentinel --ping --json
ax agents discover demo-agent backend_sentinel --ping --json
```

`discover` shows each agent's apparent mesh role, roster status, listener
Expand Down Expand Up @@ -489,7 +489,7 @@ returned messages have actually been handled.
| `ax spaces create NAME` | Create a new space (`--visibility private/invite_only/public`) |
| `ax keys list` | List API keys |
| `ax profile list` | List named profiles |
| `ax agents ping orion --timeout 30` | Probe whether an agent is listening now |
| `ax agents ping demo-agent --timeout 30` | Probe whether an agent is listening now |

### Observability

Expand All @@ -503,7 +503,7 @@ returned messages have actually been handled.

| Command | Description |
|---------|-------------|
| `ax send --to orion "question" --wait` | Mention an agent and wait for the reply |
| `ax send --to demo-agent "question" --wait` | Mention an agent and wait for the reply |
| `ax send "message"` | Send + wait for a reply |
| `ax send "msg" --no-wait` | Send an intentional notification without waiting |
| `ax upload file FILE --mention @agent` | Upload context and leave an agent-visible signal |
Expand Down
2 changes: 1 addition & 1 deletion ax_cli/commands/agents.py
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,7 @@ def update_agent(

Examples:
ax agents update backend_sentinel --type sentinel --model claude-sonnet-4-6
ax agents update anvil --bio "Infra and ops" --specialization "server management"
ax agents update peer-agent --bio "Infra and ops" --specialization "server management"
"""
client = get_client()
fields = {}
Expand Down
2 changes: 1 addition & 1 deletion ax_cli/commands/alerts.py
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ def send(

Examples:

ax alerts send "dev ALB regressed on /auth/me" --target @orion --severity critical
ax alerts send "dev ALB regressed on /auth/me" --target @demo-agent --severity critical
ax alerts send "review needed" --kind reminder --source-task dfef4c92 --remind-at 2026-04-16T17:00Z
"""
severity_n = _normalize_severity(severity)
Expand Down
2 changes: 1 addition & 1 deletion ax_cli/commands/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ def upload_file(
Examples:
ax context upload-file ./report.md
ax context upload-file ./arch.png --key infra-diagram --vault
ax context upload-file ./data.csv --ttl 3600 --mention @orion
ax context upload-file ./data.csv --ttl 3600 --mention @demo-agent
"""
client = get_client()
sid = resolve_space_id(client, explicit=space_id)
Expand Down
2 changes: 1 addition & 1 deletion ax_cli/commands/mint.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ def mint(
ax token mint backend_sentinel --audience both --expires 30
ax token mint backend_sentinel --save-to /home/agent/.ax --profile prod-backend
ax token mint backend_sentinel --save-to /home/agent/.ax --no-print-token
ax token mint 70c1b445-c733-44d8-8e75-9620452374a8
ax token mint bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbbbb
"""

def status(message: str) -> None:
Expand Down
2 changes: 1 addition & 1 deletion ax_cli/commands/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ def _register_fingerprint(profile: dict) -> str | None:

@app.command("add")
def add(
name: str = typer.Argument(..., help="Profile name (e.g. next-orion)"),
name: str = typer.Argument(..., help="Profile name (e.g. demo-agent)"),
url: str = typer.Option(..., "--url", help="Base URL (e.g. https://next.paxai.app)"),
token_file: str = typer.Option(..., "--token-file", help="Path to token file"),
agent_name: str = typer.Option(..., "--agent-name", help="Agent name"),
Expand Down
8 changes: 4 additions & 4 deletions channel/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,11 @@ Use the smoke harness to test the channel runtime without restarting Claude Code

```bash
python3 scripts/channel_smoke.py \
--listener-profile next-orion \
--sender-profile next-chatgpt \
--listener-profile demo-agent \
--sender-profile peer-agent \
--profile-workdir /home/ax-agent \
--agent orion \
--space-id 49afd277-78d2-4a32-9858-3594cda684af \
--agent demo-agent \
--space-id aaaaaaaa-aaaa-4aaa-aaaa-aaaaaaaaaaaa \
--case reply \
--channel-command 'bun run --cwd /home/ax-agent/channel --shell=bun --silent start --debug'
```
Expand Down
16 changes: 8 additions & 8 deletions docs/login-e2e-runbook.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Token captured: axp_u_********

Connecting to https://next.paxai.app...
Token verified. Exchange successful.
Identity: madtank (...)
Identity: alex (...)

Saved user login: .../config/user.toml
```
Expand All @@ -62,34 +62,34 @@ Saved user login: .../config/user.toml
The setup agent may run this after the user login is complete.

```bash
axdev token mint orion-e2e \
axdev token mint demo-agent-e2e \
--create \
--audience both \
--expires 30 \
--save-to "$AX_E2E_ROOT/agents/orion-e2e" \
--profile next-orion-e2e \
--save-to "$AX_E2E_ROOT/agents/demo-agent-e2e" \
--profile demo-e2e \
--no-print-token
```

Expected:

- token file is created with mode `0600`
- `.ax/config.toml` is created under the agent directory
- profile `next-orion-e2e` is created
- profile `demo-e2e` is created
- raw `axp_a_...` token is not printed

## Verify Agent Runtime

```bash
axdev profile verify next-orion-e2e
eval "$(axdev profile env next-orion-e2e)"
axdev profile verify demo-e2e
eval "$(axdev profile env demo-e2e)"
axdev auth whoami --json
```

Expected:

- `whoami` uses an agent-bound profile
- `bound_agent.agent_name` or resolved agent metadata points at `orion-e2e`
- `bound_agent.agent_name` or resolved agent metadata points at `demo-agent-e2e`
- runtime commands use the agent PAT/JWT, not the user PAT

## Cleanup
Expand Down
4 changes: 2 additions & 2 deletions docs/mcp-app-signal-adapter.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ axctl apps signal context \
--title 'Architecture diagram' \
--summary 'Open this in the Context Explorer panel.' \
--message 'context-backed app signal ready' \
--to madtank \
--to alex \
--alert-kind context_artifact \
--json
```
Expand All @@ -65,7 +65,7 @@ Create a task with a task card and task-detail widget metadata:
```bash
axctl tasks create 'Review the launch checklist' \
--description 'Check API, CLI, MCP, and UI smoke paths before promotion.' \
--assign orion \
--assign demo-agent \
--json
```

Expand Down
6 changes: 3 additions & 3 deletions docs/mcp-headless-pat.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,16 @@ Three moving parts:
- A PAT with `audience="mcp"` or `audience="both"`. A PAT with
`audience="cli"` will be rejected at exchange time with
`audience_not_allowed`.
- The `agent_name` you want to act as (e.g. `"orion"`), or the
- The `agent_name` you want to act as (e.g. `"demo-agent"`), or the
`agent_id` UUID if your PAT is agent-bound.

Recommended: use the same `.ax/config.toml` generated by
`axctl token mint --save-to`:

```toml
token_file = "/home/ax-agent/agents/orion/.ax/orion_token"
token_file = "/home/ax-agent/agents/demo-agent/.ax/orion_token"
base_url = "https://next.paxai.app"
agent_name = "orion"
agent_name = "demo-agent"
agent_id = "agent-uuid"
space_id = "optional-default-space-uuid"
```
Expand Down
2 changes: 1 addition & 1 deletion docs/reminder-lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,4 @@ See `tests/test_reminders_commands.py`:

## Change log

- 2026-04-16 — Initial contract (@orion). Ships with tests + `_task_lifecycle` helper in `alerts.py`. Picks up source task status on every `_fire_policy` call; one extra GET per due policy (cost acceptable for local dogfood loop).
- 2026-04-16 — Initial contract (@demo-agent). Ships with tests + `_task_lifecycle` helper in `alerts.py`. Picks up source task status on every `_fire_policy` call; one extra GET per due policy (cost acceptable for local dogfood loop).
4 changes: 2 additions & 2 deletions examples/hermes_sentinel/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ A minimal, runnable example of giving an aX agent a capable brain.

Most aX agent examples (`examples/echo_agent.*`) are one-liners that prove
the integration surface works. This example goes one step further: it
wires [hermes-agent](https://github.com/madtank/hermes-agent) —
wires [hermes-agent](https://github.com/alex/hermes-agent) —
a batteries-included agentic runtime with tool use, file edits, terminal
access, and multi-provider LLM support — to the `ax listen` dispatch loop.

Expand Down Expand Up @@ -93,7 +93,7 @@ threading separate from runtime memory/session continuity.
3. **hermes-agent cloned and installed.**

```bash
git clone https://github.com/madtank/hermes-agent
git clone https://github.com/alex/hermes-agent
cd hermes-agent
python3 -m venv .venv
source .venv/bin/activate
Expand Down
2 changes: 1 addition & 1 deletion examples/hermes_sentinel/hermes_bridge.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
-------------

1. The hermes-agent repo is cloned locally and installed in a venv.
See https://github.com/madtank/hermes-agent for install steps.
See https://github.com/alex/hermes-agent for install steps.

2. `HERMES_REPO_PATH` env var points at the hermes-agent checkout
(or the default `~/hermes-agent` exists).
Expand Down
6 changes: 3 additions & 3 deletions skills/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -231,10 +231,10 @@ axctl tasks create "Next step: deploy to staging" --priority high --assign ops-a
### Delegate and wait
```bash
axctl handoff backend-agent "Fix the auth regression" --intent implement --timeout 600
axctl handoff orion "Review the API contract" --intent review --follow-up
axctl handoff orion "Iterate until contract tests pass" --intent implement --loop --max-rounds 5 --completion-promise "TESTS GREEN"
axctl handoff demo-agent "Review the API contract" --intent review --follow-up
axctl handoff demo-agent "Iterate until contract tests pass" --intent implement --loop --max-rounds 5 --completion-promise "TESTS GREEN"
axctl handoff cli_sentinel "Review CLI docs"
axctl handoff orion "Known-live fast path" --no-adaptive-wait
axctl handoff demo-agent "Known-live fast path" --no-adaptive-wait
```

A sent message is not completion. For owned collaboration, completion means a
Expand Down
8 changes: 4 additions & 4 deletions specs/AGENT-CONTACT-001/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ orchestrator-subagent pattern depends on a reachable supervisor.
The current practical probe is:

```bash
ax agents ping orion --timeout 30
ax agents ping demo-agent --timeout 30
```

Behavior:
Expand All @@ -123,7 +123,7 @@ The no-reply result is not a rejection signal.
Use mention signals for attention:

```bash
ax send --to orion "quick question" --wait
ax send --to demo-agent "quick question" --wait
ax tasks create "Run smoke test" --assign @cipher
ax upload file ./diagram.png --mention @frontend_sentinel
ax context set spec:cli ready --mention @mcp_sentinel
Expand All @@ -132,8 +132,8 @@ ax context set spec:cli ready --mention @mcp_sentinel
Use `ax handoff` for owned work:

```bash
ax handoff orion "Review the CLI contact mode spec" --intent review --timeout 600
ax handoff orion "Known-live fast path" --intent review --no-adaptive-wait
ax handoff demo-agent "Review the CLI contact mode spec" --intent review --timeout 600
ax handoff demo-agent "Known-live fast path" --intent review --no-adaptive-wait
```

If an agent's contact mode is unknown, do not treat timeout as proof the work was
Expand Down
6 changes: 3 additions & 3 deletions specs/AGENT-MESH-PATTERNS-001/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ On 2026-04-14, `ax agents ping` showed:

| Agent | Result |
|-------|--------|
| `orion` | `event_listener` |
| `demo-agent` | `event_listener` |
| `backend_sentinel` | `event_listener` |
| `frontend_sentinel` | `event_listener` |
| `mcp_sentinel` | `event_listener` |
Expand Down Expand Up @@ -136,7 +136,7 @@ Current command:
```bash
ax agents discover
ax agents discover --ping --timeout 10
ax agents discover orion backend_sentinel --ping --json
ax agents discover demo-agent backend_sentinel --ping --json
```

`--ping` is an active probe. It sends a mention and waits for a reply. No reply
Expand All @@ -146,7 +146,7 @@ For owned work, `ax handoff` uses the same idea inline by default:

```bash
ax handoff supervisor_sentinel "Coordinate frontend and MCP QA"
ax handoff orion "Known-live fast path" --no-adaptive-wait
ax handoff demo-agent "Known-live fast path" --no-adaptive-wait
```

If the probe succeeds, the CLI waits. If the probe fails, the CLI still creates
Expand Down
6 changes: 3 additions & 3 deletions specs/AGENT-PAT-001/spec.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# AGENT-PAT-001: Agent PAT Minting and JWT Exchange

**Status:** Draft
**Owner:** @madtank / @ChatGPT
**Owner:** @alex / @ChatGPT
**Date:** 2026-04-13
**Related:** AXCTL-BOOTSTRAP-001, DEVICE-TRUST-001, CLI-WORKFLOW-001, LISTENER-001

Expand Down Expand Up @@ -106,7 +106,7 @@ Request:
"audience": "cli",
"expires_in_days": 30,
"space_id": "space-uuid",
"name": "orion-cli-local",
"name": "demo-agent-cli-local",
"requested_capabilities": ["messages:send", "context:read", "tasks:write"]
}
```
Expand Down Expand Up @@ -175,7 +175,7 @@ Required behavior:
Example:

```bash
axctl token mint orion --audience cli --expires 30 --profile next-orion
axctl token mint demo-agent --audience cli --expires 30 --profile demo-agent
```

## Approval Policy
Expand Down
2 changes: 1 addition & 1 deletion specs/ATTACHMENT-FLOW-001/spec.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# ATTACHMENT-FLOW-001: CLI Context Attachment Flow

**Status:** Draft
**Owner:** @madtank
**Owner:** @alex
**Date:** 2026-04-12
**Related:** ax-backend ATTACHMENTS-001, LISTENER-001

Expand Down
8 changes: 4 additions & 4 deletions specs/AX-SCHEDULE-001/spec.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# AX-SCHEDULE-001: Agent Wake-Up Scheduler

**Status:** Draft
**Authors:** @orion, @anvil
**Authors:** @demo-agent, @peer-agent
**Date:** 2026-04-06

## Summary
Expand Down Expand Up @@ -52,10 +52,10 @@ Stored in `~/.ax/schedules/<name>.json`:
{
"name": "health-check",
"description": "Check staging services every 15 minutes",
"command": "ax send \"@orion Run staging health checks\" --wait --timeout 120",
"command": "ax send \"@demo-agent Run staging health checks\" --wait --timeout 120",
"interval_seconds": 900,
"anchor_time": null,
"space_id": "49afd277-78d2-4a32-9858-3594cda684af",
"space_id": "aaaaaaaa-aaaa-4aaa-aaaa-aaaaaaaaaaaa",
"report_to": "main",
"enabled": true,
"created_at": "2026-04-06T22:30:00Z",
Expand Down Expand Up @@ -164,7 +164,7 @@ If either exists, skip execution and log. Same pattern as `ax listen`.

```crontab
# ax-schedule: health-check (every 15m)
*/15 * * * * /usr/local/bin/ax send --to orion "Run staging health checks" --no-wait 2>&1 | /usr/local/bin/ax send --stdin --channel main
*/15 * * * * /usr/local/bin/ax send --to demo-agent "Run staging health checks" --no-wait 2>&1 | /usr/local/bin/ax send --stdin --channel main

# ax-schedule: morning-briefing (daily at 09:00 UTC)
0 9 * * * /usr/local/bin/ax send "@project_lead_ai Morning status update" --wait --timeout 120
Expand Down
Loading
Loading