diff --git a/README.md b/README.md
index 762b655..6713622 100644
--- a/README.md
+++ b/README.md
@@ -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
@@ -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 TESTS GREEN." \
--intent implement \
--loop \
@@ -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
@@ -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
@@ -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 |
diff --git a/ax_cli/commands/agents.py b/ax_cli/commands/agents.py
index 822d168..ee2cf5d 100644
--- a/ax_cli/commands/agents.py
+++ b/ax_cli/commands/agents.py
@@ -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 = {}
diff --git a/ax_cli/commands/alerts.py b/ax_cli/commands/alerts.py
index 064d6be..29255e7 100644
--- a/ax_cli/commands/alerts.py
+++ b/ax_cli/commands/alerts.py
@@ -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)
diff --git a/ax_cli/commands/context.py b/ax_cli/commands/context.py
index 4127035..c6dd75c 100644
--- a/ax_cli/commands/context.py
+++ b/ax_cli/commands/context.py
@@ -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)
diff --git a/ax_cli/commands/mint.py b/ax_cli/commands/mint.py
index f2cef34..a6ff09e 100644
--- a/ax_cli/commands/mint.py
+++ b/ax_cli/commands/mint.py
@@ -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:
diff --git a/ax_cli/commands/profile.py b/ax_cli/commands/profile.py
index 2221b78..f25bba6 100644
--- a/ax_cli/commands/profile.py
+++ b/ax_cli/commands/profile.py
@@ -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"),
diff --git a/channel/README.md b/channel/README.md
index 78cac1f..1ca6d42 100644
--- a/channel/README.md
+++ b/channel/README.md
@@ -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'
```
diff --git a/docs/login-e2e-runbook.md b/docs/login-e2e-runbook.md
index 8087fa6..7840422 100644
--- a/docs/login-e2e-runbook.md
+++ b/docs/login-e2e-runbook.md
@@ -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
```
@@ -62,12 +62,12 @@ 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
```
@@ -75,21 +75,21 @@ 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
diff --git a/docs/mcp-app-signal-adapter.md b/docs/mcp-app-signal-adapter.md
index 0a051bc..8ca34af 100644
--- a/docs/mcp-app-signal-adapter.md
+++ b/docs/mcp-app-signal-adapter.md
@@ -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
```
@@ -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
```
diff --git a/docs/mcp-headless-pat.md b/docs/mcp-headless-pat.md
index d8379af..462dd33 100644
--- a/docs/mcp-headless-pat.md
+++ b/docs/mcp-headless-pat.md
@@ -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"
```
diff --git a/docs/reminder-lifecycle.md b/docs/reminder-lifecycle.md
index 673028d..9d63376 100644
--- a/docs/reminder-lifecycle.md
+++ b/docs/reminder-lifecycle.md
@@ -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).
diff --git a/examples/hermes_sentinel/README.md b/examples/hermes_sentinel/README.md
index 3e690c3..3cdc3ae 100644
--- a/examples/hermes_sentinel/README.md
+++ b/examples/hermes_sentinel/README.md
@@ -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.
@@ -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
diff --git a/examples/hermes_sentinel/hermes_bridge.py b/examples/hermes_sentinel/hermes_bridge.py
index 01df109..e90ea77 100755
--- a/examples/hermes_sentinel/hermes_bridge.py
+++ b/examples/hermes_sentinel/hermes_bridge.py
@@ -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).
diff --git a/skills/SKILL.md b/skills/SKILL.md
index 59230ef..58fc2c5 100644
--- a/skills/SKILL.md
+++ b/skills/SKILL.md
@@ -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
diff --git a/specs/AGENT-CONTACT-001/spec.md b/specs/AGENT-CONTACT-001/spec.md
index 742de6a..cd1753e 100644
--- a/specs/AGENT-CONTACT-001/spec.md
+++ b/specs/AGENT-CONTACT-001/spec.md
@@ -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:
@@ -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
@@ -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
diff --git a/specs/AGENT-MESH-PATTERNS-001/spec.md b/specs/AGENT-MESH-PATTERNS-001/spec.md
index 290bbe2..140e389 100644
--- a/specs/AGENT-MESH-PATTERNS-001/spec.md
+++ b/specs/AGENT-MESH-PATTERNS-001/spec.md
@@ -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` |
@@ -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
@@ -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
diff --git a/specs/AGENT-PAT-001/spec.md b/specs/AGENT-PAT-001/spec.md
index f5e9939..f7125d9 100644
--- a/specs/AGENT-PAT-001/spec.md
+++ b/specs/AGENT-PAT-001/spec.md
@@ -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
@@ -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"]
}
```
@@ -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
diff --git a/specs/ATTACHMENT-FLOW-001/spec.md b/specs/ATTACHMENT-FLOW-001/spec.md
index c6a12bf..591799c 100644
--- a/specs/ATTACHMENT-FLOW-001/spec.md
+++ b/specs/ATTACHMENT-FLOW-001/spec.md
@@ -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
diff --git a/specs/AX-SCHEDULE-001/spec.md b/specs/AX-SCHEDULE-001/spec.md
index 2ff8410..83dc1ad 100644
--- a/specs/AX-SCHEDULE-001/spec.md
+++ b/specs/AX-SCHEDULE-001/spec.md
@@ -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
@@ -52,10 +52,10 @@ Stored in `~/.ax/schedules/.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",
@@ -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
diff --git a/specs/AXCTL-BOOTSTRAP-001/spec.md b/specs/AXCTL-BOOTSTRAP-001/spec.md
index b579def..1b114fb 100644
--- a/specs/AXCTL-BOOTSTRAP-001/spec.md
+++ b/specs/AXCTL-BOOTSTRAP-001/spec.md
@@ -1,7 +1,7 @@
# AXCTL-BOOTSTRAP-001: Bootstrap and Secure Storage
**Status:** Draft
-**Owner:** @madtank / @ChatGPT
+**Owner:** @alex / @ChatGPT
**Date:** 2026-04-13
**Related:** DEVICE-TRUST-001, AGENT-PAT-001, docs/agent-authentication.md, docs/credential-security.md
@@ -109,7 +109,7 @@ sequenceDiagram
User->>CLI: axctl login
CLI->>API: Verify user setup credential
API-->>CLI: User/device authorization
- User->>Agent: Set up @orion, @cipher, @sentinel
+ User->>Agent: Set up @demo-agent, @cipher, @sentinel
Agent->>CLI: axctl token mint --create --profile --save-to
CLI->>API: Device/user authorized PAT request
API-->>CLI: Scoped agent PAT shown once
@@ -165,7 +165,7 @@ future device-enrollment command
aX URL: https://next.paxai.app
Bootstrap token: ********
-Device name: Jacob MacBook Pro
+Device name: Alex's Laptop
Device fingerprint:
SHA256: 4F2A 91C7 9B10 55E0
@@ -173,7 +173,7 @@ SHA256: 4F2A 91C7 9B10 55E0
Authorize this device in aX? [Y/n]
✓ Device enrolled
✓ Credential stored in macOS Keychain
-✓ Verified as madtank in madtank's Workspace
+✓ Verified as alex in Alex's Workspace
```
## Storage Contract
@@ -224,7 +224,7 @@ Request:
{
"bootstrap_token": "axp_u_bootstrap_...",
"device_public_key": "base64url...",
- "device_name": "Jacob MacBook Pro",
+ "device_name": "Alex's Laptop",
"device_fingerprint": "sha256:...",
"space_id": "optional-default-space",
"client": {
diff --git a/specs/CLI-WORKFLOW-001/spec.md b/specs/CLI-WORKFLOW-001/spec.md
index dc6df79..4c15674 100644
--- a/specs/CLI-WORKFLOW-001/spec.md
+++ b/specs/CLI-WORKFLOW-001/spec.md
@@ -86,7 +86,7 @@ When a task can be advanced by another agent without human judgment, `--loop`
keeps the feedback loop active:
```bash
-ax handoff orion \
+ax handoff demo-agent \
"Fix the failing contract tests. Run pytest. Reply with TESTS GREEN only when true." \
--intent implement \
--loop \
@@ -119,7 +119,7 @@ operator remembering a flag. The CLI probes before deciding whether to wait:
```bash
ax handoff cli_sentinel "Review CLI docs"
-ax handoff orion "Known-live fast path" --no-adaptive-wait
+ax handoff demo-agent "Known-live fast path" --no-adaptive-wait
```
Behavior:
@@ -382,12 +382,12 @@ Expected flow:
### Task delegation + wait
```bash
-ax task create "Run smoke tests" --assign @orion --notify --wait
+ax task create "Run smoke tests" --assign @demo-agent --notify --wait
```
Expected flow:
-1. Create task with owner resolved to `@orion`
-2. Notify `@orion` with task id + owner metadata
+1. Create task with owner resolved to `@demo-agent`
+2. Notify `@demo-agent` with task id + owner metadata
3. Wait for response using the watch pipeline
## Documentation Plan
diff --git a/specs/CONTRACT-QA-001/spec.md b/specs/CONTRACT-QA-001/spec.md
index 1c1a997..ee65c9b 100644
--- a/specs/CONTRACT-QA-001/spec.md
+++ b/specs/CONTRACT-QA-001/spec.md
@@ -1,7 +1,7 @@
# CONTRACT-QA-001: API-First Regression Harness
**Status:** Draft
-**Owner:** @ChatGPT / @madtank
+**Owner:** @ChatGPT / @alex
**Date:** 2026-04-13
**Related:** AXCTL-BOOTSTRAP-001, AGENT-PAT-001, ATTACHMENT-FLOW-001, LISTENER-001, frontend FRONTEND-021, MCP-APPS
diff --git a/specs/DEVICE-TRUST-001/spec.md b/specs/DEVICE-TRUST-001/spec.md
index 1b2a0f5..7bd8041 100644
--- a/specs/DEVICE-TRUST-001/spec.md
+++ b/specs/DEVICE-TRUST-001/spec.md
@@ -1,7 +1,7 @@
# DEVICE-TRUST-001: Device Trust and Approval
**Status:** Draft
-**Owner:** @madtank / @ChatGPT
+**Owner:** @alex / @ChatGPT
**Date:** 2026-04-13
**Related:** AXCTL-BOOTSTRAP-001, AGENT-PAT-001, docs/credential-security.md
@@ -109,7 +109,7 @@ Example copy:
```text
Authorize new device
-Device: Jacob MacBook Pro
+Device: Alex's Laptop
CLI: axctl 0.4.0
Fingerprint: SHA256 4F2A 91C7 9B10 55E0
Requested access: Mint agent credentials for this workspace
diff --git a/specs/IDENTIFIER-DISPLAY-001/spec.md b/specs/IDENTIFIER-DISPLAY-001/spec.md
index 945a632..e886516 100644
--- a/specs/IDENTIFIER-DISPLAY-001/spec.md
+++ b/specs/IDENTIFIER-DISPLAY-001/spec.md
@@ -1,7 +1,7 @@
# IDENTIFIER-DISPLAY-001: Human-Readable Identifier Display
**Status:** Draft
-**Owner:** @madtank / @ChatGPT
+**Owner:** @alex / @ChatGPT
**Date:** 2026-04-13
**Related:** AXCTL-BOOTSTRAP-001, AGENT-PAT-001, LISTENER-001
@@ -43,9 +43,9 @@ Default text output should prefer readable fields.
Examples:
```text
-Account: madtank
+Account: alex
Space: team-hub
-Agent: orion
+Agent: demo-agent
```
If the UUID is useful, show it as supporting detail:
@@ -58,7 +58,7 @@ Space: team-hub (12d6eafd...)
```json
{
- "space_id": "12d6eafd-0316-4f3e-be33-fd8a3fd90f67",
+ "space_id": "aaaaaaaa-aaaa-4aaa-aaaa-aaaaaaaaaaaa",
"space_slug": "team-hub",
"space_name": "Team Hub"
}
diff --git a/specs/LISTENER-001/spec.md b/specs/LISTENER-001/spec.md
index 3f581e8..c53bbbf 100644
--- a/specs/LISTENER-001/spec.md
+++ b/specs/LISTENER-001/spec.md
@@ -1,7 +1,7 @@
# LISTENER-001: Mention and Reply Delivery for CLI Listeners
**Status:** Draft
-**Owner:** @madtank
+**Owner:** @alex
**Date:** 2026-04-12
**Related:** ATTACHMENTS-001, ax-backend PLATFORM-001/SPEC-SSE-001
diff --git a/specs/RUNTIME-CONFIG-001/spec.md b/specs/RUNTIME-CONFIG-001/spec.md
index 86b6097..b0bccef 100644
--- a/specs/RUNTIME-CONFIG-001/spec.md
+++ b/specs/RUNTIME-CONFIG-001/spec.md
@@ -1,7 +1,7 @@
# RUNTIME-CONFIG-001: Shared Agent Runtime Configuration
**Status:** Draft
-**Owner:** @madtank / @ChatGPT
+**Owner:** @alex / @ChatGPT
**Date:** 2026-04-13
**Related:** AGENT-PAT-001, AXCTL-BOOTSTRAP-001, IDENTIFIER-DISPLAY-001
@@ -15,9 +15,9 @@ An agent runtime should have one portable config shape that every headless
client can consume:
```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"
```
diff --git a/specs/SEND-TO-AGENT-001/spec.md b/specs/SEND-TO-AGENT-001/spec.md
index 812f8a8..eec57d3 100644
--- a/specs/SEND-TO-AGENT-001/spec.md
+++ b/specs/SEND-TO-AGENT-001/spec.md
@@ -2,11 +2,11 @@
```
Spec-ID: SEND-TO-AGENT-001
-Owner: @orion (CLI contract) + @frontend_sentinel (card surfaces)
+Owner: @demo-agent (CLI contract) + @frontend_sentinel (card surfaces)
Status: DRAFT — ready for team review
Date: 2026-04-16
Task: b38a7475-8bf6-445e-bd6e-1845222885dd
-Trigger: live repro message 1a365934-b596-41fc-adb1-4dce52dfadb1 (madtank
+Trigger: live repro message 1a365934-b596-41fc-adb1-4dce52dfadb1 (alex
+ screenshots: users need an obvious way to send a task or alert
to an agent as a real request with structured context).
Composes: SEND-RECEIPTS-001 (PR #108 in ax-agents, delivery-receipts contract)
@@ -105,10 +105,10 @@ the PR #54 task snapshot pattern.
"source": "axctl_tasks_send",
"state": "sent",
"fired_at": "2026-04-16T18:40:00Z",
- "title": "orion sent you a task: Ship delivery receipts",
+ "title": "demo-agent sent you a task: Ship delivery receipts",
"summary": "{message text or default copy}",
"target_agent": "backend_sentinel",
- "sender_agent_name": "orion",
+ "sender_agent_name": "demo-agent",
"source_task_id": "task-snap",
"task": { // task snapshot, per PR #54 pattern
"id": "task-snap",
@@ -127,7 +127,7 @@ the PR #54 task snapshot pattern.
"type": "alert", // re-uses AlertCardBody
"version": 1,
"payload": {
- "title": "orion sent you a task: Ship delivery receipts",
+ "title": "demo-agent sent you a task: Ship delivery receipts",
"summary": "...",
"severity": "info",
"intent": "task_send", // distinguishes from plain alerts
@@ -195,16 +195,16 @@ transcript.
| Layer | Owner | Scope |
|---------------|----------------------|----------------------------------------------------|
-| CLI contract | @orion (this spec) | §3.1 command shape, §3.2 envelope |
-| CLI impl | @orion | `ax_cli/commands/tasks.py::send`, mirror in alerts.py |
+| CLI contract | @demo-agent (this spec) | §3.1 command shape, §3.2 envelope |
+| CLI impl | @demo-agent | `ax_cli/commands/tasks.py::send`, mirror in alerts.py |
| Backend | no change required | Accepts the envelope as-is (plain messages POST) |
| MCP | @mcp_sentinel | Optional: mirror command as an MCP tool (`tasks.send`, `alerts.send`) so aX can invoke it |
| Frontend card | @frontend_sentinel | Task `60113fd7` + `e55be7c8`; render `intent=task_send` cards, wire Open Task + Ack + Reassign action buttons |
-| Wiki | @orion | Update ax-cli wiki "Agent-Activity-and-Final-Reply-Contract" + a new "Sending tasks and alerts" page |
+| Wiki | @demo-agent | Update ax-cli wiki "Agent-Activity-and-Final-Reply-Contract" + a new "Sending tasks and alerts" page |
## 5. Implementation plan (smallest slice)
-1. **CLI scaffold** (orion, this task): add `ax_cli/commands/tasks.py::send`
+1. **CLI scaffold** (demo-agent, this task): add `ax_cli/commands/tasks.py::send`
and the matching entry in `ax_cli/commands/alerts.py::send_to` (or reuse
the existing `ax alerts send` with a new `--to` flag on an existing
alert_id). Reuses `_build_alert_metadata` + `_fetch_task_snapshot` from
@@ -215,7 +215,7 @@ transcript.
(depends on backend emission — trail behind PR #108).
4. **Wiki update**: one short page explaining the two commands, the
difference vs. `ax send`, and how receipts appear.
-5. **Dogfood**: orion runs `axctl tasks send --to @backend_sentinel`.
+5. **Dogfood**: demo-agent runs `axctl tasks send --to @backend_sentinel`.
Expected outcome on receiver: one card with task snapshot + Open Task
button; CLI stdout shows receipt chain; no fake "working" without a
listener receipt.
@@ -229,7 +229,7 @@ transcript.
- [ ] Receiver's frontend renders one card with task/alert context + Open button
- [ ] Delivery receipts stream per SEND-RECEIPTS-001
- [ ] No synthetic ACK replies from tooling; the agent's subsequent action is the reply
-- [ ] Dogfood: orion → backend_sentinel with a live task, evidence captured
+- [ ] Dogfood: demo-agent → backend_sentinel with a live task, evidence captured
## 7. Open questions
@@ -253,7 +253,7 @@ transcript.
## 8. Change log
-- 2026-04-16 — Initial draft (@orion) from task b38a7475. Cross-links to
+- 2026-04-16 — Initial draft (@demo-agent) from task b38a7475. Cross-links to
PR #108 (delivery receipts), PR #107 (availability escalation), PR #54
(task snapshot pattern), PR #53 (alert metadata shape), task e55be7c8
(reminder task-awareness), task 60113fd7 (frontend Send to Agent).
diff --git a/tests/test_agents_commands.py b/tests/test_agents_commands.py
index d5ae7c6..d892222 100644
--- a/tests/test_agents_commands.py
+++ b/tests/test_agents_commands.py
@@ -84,7 +84,7 @@ def list_agents(self, *, space_id=None, limit=None):
"agents": [
{
"id": "agent-1",
- "name": "orion",
+ "name": "demo-agent",
"origin": "mcp",
"agent_type": "mcp",
"status": "active",
@@ -98,22 +98,22 @@ def send_message(self, space_id, content):
def fake_wait(client, **kwargs):
calls["wait"] = kwargs
- return {"id": "reply-1", "content": f"received {kwargs['token']}", "display_name": "orion"}
+ return {"id": "reply-1", "content": f"received {kwargs['token']}", "display_name": "demo-agent"}
monkeypatch.setattr("ax_cli.commands.agents.get_client", lambda: FakeClient())
monkeypatch.setattr("ax_cli.commands.agents.resolve_space_id", lambda client, explicit=None: "space-1")
monkeypatch.setattr("ax_cli.commands.agents.resolve_agent_name", lambda client=None: "ChatGPT")
monkeypatch.setattr("ax_cli.commands.agents._wait_for_handoff_reply", fake_wait)
- result = runner.invoke(app, ["agents", "ping", "orion", "--timeout", "5", "--json"])
+ result = runner.invoke(app, ["agents", "ping", "demo-agent", "--timeout", "5", "--json"])
assert result.exit_code == 0, result.output
data = json.loads(result.output)
assert data["contact_mode"] == "event_listener"
assert data["listener_status"] == "replied"
assert data["agent_id"] == "agent-1"
- assert calls["message"]["content"].startswith("@orion Contact-mode ping")
- assert calls["wait"]["agent_name"] == "orion"
+ assert calls["message"]["content"].startswith("@demo-agent Contact-mode ping")
+ assert calls["wait"]["agent_name"] == "demo-agent"
assert calls["wait"]["sent_message_id"] == "msg-1"
@@ -151,7 +151,7 @@ def send_message(self, space_id, content):
def test_agents_ping_unknown_agent_fails(monkeypatch):
class FakeClient:
def list_agents(self, *, space_id=None, limit=None):
- return {"agents": [{"id": "agent-1", "name": "orion"}]}
+ return {"agents": [{"id": "agent-1", "name": "demo-agent"}]}
monkeypatch.setattr("ax_cli.commands.agents.get_client", lambda: FakeClient())
monkeypatch.setattr("ax_cli.commands.agents.resolve_space_id", lambda client, explicit=None: "space-1")
diff --git a/tests/test_alerts_commands.py b/tests/test_alerts_commands.py
index b71bb54..057cfb9 100644
--- a/tests/test_alerts_commands.py
+++ b/tests/test_alerts_commands.py
@@ -106,7 +106,7 @@ def _install_fake_client(monkeypatch, client: _FakeClient) -> None:
)
monkeypatch.setattr(
"ax_cli.commands.alerts.resolve_agent_name",
- lambda client=None: "orion",
+ lambda client=None: "demo-agent",
)
@@ -121,7 +121,7 @@ def test_send_builds_alert_metadata_with_ui_card_type_alert(monkeypatch):
"send",
"ALB /auth/me is 5xx",
"--target",
- "@orion",
+ "@demo-agent",
"--severity",
"critical",
],
@@ -135,7 +135,7 @@ def test_send_builds_alert_metadata_with_ui_card_type_alert(monkeypatch):
alert = metadata["alert"]
assert alert["kind"] == "alert"
assert alert["severity"] == "critical"
- assert alert["target_agent"] == "orion"
+ assert alert["target_agent"] == "demo-agent"
assert alert["state"] == "triggered"
assert alert["response_required"] is False
assert "fired_at" in alert
@@ -150,7 +150,7 @@ def test_send_builds_alert_metadata_with_ui_card_type_alert(monkeypatch):
assert card["payload"]["alert"]["severity"] == "critical"
# Content should @-mention the target so notification routing fires
- assert fake.sent["content"].startswith("@orion ")
+ assert fake.sent["content"].startswith("@demo-agent ")
# message_type = "alert" so stream filters can distinguish from text
assert fake.sent["message_type"] == "alert"
@@ -179,7 +179,7 @@ def test_reminder_requires_source_task_and_marks_kind_task_reminder(monkeypatch)
"--source-task",
"dfef4c92",
"--target",
- "@orion",
+ "@demo-agent",
"--remind-at",
"2026-04-16T17:00:00Z",
"--due-at",
@@ -221,7 +221,7 @@ def test_reminder_shortcut_command_equivalent_to_send_kind_reminder(monkeypatch)
"--source-task",
"dfef4c92",
"--target",
- "orion",
+ "demo-agent",
],
)
assert result.exit_code == 0, _strip_ansi(result.stdout)
@@ -257,7 +257,7 @@ def test_ack_posts_state_change_reply_linked_to_parent(monkeypatch):
"kind": "alert",
"severity": "warn",
"state": "triggered",
- "target_agent": "orion",
+ "target_agent": "demo-agent",
},
},
}
@@ -343,7 +343,7 @@ def test_source_task_auto_targets_assignee_when_target_omitted(monkeypatch):
}
}
agent_payloads = {
- "agent-assignee-id": {"agent": {"id": "agent-assignee-id", "name": "orion"}},
+ "agent-assignee-id": {"agent": {"id": "agent-assignee-id", "name": "demo-agent"}},
"agent-creator-id": {"agent": {"id": "agent-creator-id", "name": "chatgpt"}},
}
@@ -378,9 +378,9 @@ def json(self):
)
assert result.exit_code == 0, _strip_ansi(result.stdout)
- # Auto-resolved to assignee (orion)
- assert fake.sent["metadata"]["alert"]["target_agent"] == "orion"
- assert fake.sent["content"].startswith("@orion "), "auto-target must @-mention assignee"
+ # Auto-resolved to assignee (demo-agent)
+ assert fake.sent["metadata"]["alert"]["target_agent"] == "demo-agent"
+ assert fake.sent["content"].startswith("@demo-agent "), "auto-target must @-mention assignee"
def test_source_task_falls_back_to_creator_when_no_assignee(monkeypatch):
@@ -394,7 +394,7 @@ def test_source_task_falls_back_to_creator_when_no_assignee(monkeypatch):
}
}
agent_payloads = {
- "agent-creator-id": {"agent": {"id": "agent-creator-id", "name": "madtank"}},
+ "agent-creator-id": {"agent": {"id": "agent-creator-id", "name": "alex"}},
}
class _TaskAwareHttp:
@@ -427,7 +427,7 @@ def json(self):
["alerts", "send", "check", "--kind", "reminder", "--source-task", "t-noa"],
)
assert result.exit_code == 0, _strip_ansi(result.stdout)
- assert fake.sent["metadata"]["alert"]["target_agent"] == "madtank"
+ assert fake.sent["metadata"]["alert"]["target_agent"] == "alex"
def test_explicit_target_beats_task_auto_resolution(monkeypatch):
@@ -458,11 +458,11 @@ def get(self, path: str, *, headers: dict) -> Any:
"--source-task",
"dfef4c92",
"--target",
- "@madtank",
+ "@alex",
],
)
assert result.exit_code == 0, _strip_ansi(result.stdout)
- assert fake.sent["metadata"]["alert"]["target_agent"] == "madtank"
+ assert fake.sent["metadata"]["alert"]["target_agent"] == "alex"
def test_state_change_on_non_alert_message_errors_clearly(monkeypatch):
@@ -492,7 +492,7 @@ def test_rejects_pre_2020_timestamps_as_clock_skew(monkeypatch):
"send",
"clock-skew test",
"--target",
- "orion",
+ "demo-agent",
"--remind-at",
"2000-01-01T00:00:00Z",
],
@@ -507,7 +507,7 @@ def test_rejects_pre_2020_timestamps_as_clock_skew(monkeypatch):
"send",
"clock-skew test",
"--target",
- "orion",
+ "demo-agent",
"--due-at",
"1999-12-31T23:59:59Z",
],
@@ -517,7 +517,7 @@ def test_rejects_pre_2020_timestamps_as_clock_skew(monkeypatch):
# Gibberish timestamps also get rejected with a clear message
malformed = runner.invoke(
app,
- ["alerts", "send", "bad iso", "--target", "orion", "--remind-at", "not-a-date"],
+ ["alerts", "send", "bad iso", "--target", "demo-agent", "--remind-at", "not-a-date"],
)
assert malformed.exit_code != 0
assert "ISO-8601" in _strip_ansi(malformed.stdout + (malformed.stderr or ""))
@@ -538,7 +538,7 @@ def test_valid_future_timestamps_accepted(monkeypatch):
"--source-task",
"t1",
"--target",
- "orion",
+ "demo-agent",
"--remind-at",
"2026-04-16T17:00:00Z",
"--due-at",
@@ -569,7 +569,7 @@ def test_reminder_defaults_response_required_true(monkeypatch):
"--source-task",
"t1",
"--target",
- "orion",
+ "demo-agent",
],
)
assert r1.exit_code == 0
@@ -582,7 +582,7 @@ def test_reminder_defaults_response_required_true(monkeypatch):
_install_fake_client(monkeypatch, fake2)
r2 = runner.invoke(
app,
- ["alerts", "send", "heads up", "--target", "orion"],
+ ["alerts", "send", "heads up", "--target", "demo-agent"],
)
assert r2.exit_code == 0
assert fake2.sent["metadata"]["alert"]["response_required"] is False, (
@@ -596,7 +596,7 @@ def test_json_output_returns_send_response(monkeypatch):
result = runner.invoke(
app,
- ["alerts", "send", "test", "--target", "@orion", "--json"],
+ ["alerts", "send", "test", "--target", "@demo-agent", "--json"],
)
assert result.exit_code == 0
data = json.loads(result.stdout)
diff --git a/tests/test_apps_commands.py b/tests/test_apps_commands.py
index e1ffc16..cc7978f 100644
--- a/tests/test_apps_commands.py
+++ b/tests/test_apps_commands.py
@@ -73,7 +73,7 @@ def send_message(
"--message",
"context artifact ready",
"--to",
- "orion",
+ "demo-agent",
"--channel",
"automation-alerts",
"--alert-kind",
@@ -86,7 +86,7 @@ def send_message(
assert result.exit_code == 0, result.output
assert calls["get_context"] == {"key": "design:architecture", "space_id": "space-1"}
- assert calls["message"]["content"] == "@orion context artifact ready"
+ assert calls["message"]["content"] == "@demo-agent context artifact ready"
assert calls["message"]["channel"] == "automation-alerts"
assert calls["message"]["message_type"] == "system"
@@ -99,7 +99,7 @@ def send_message(
assert widget["initial_data"]["selected_key"] == "design:architecture"
assert widget["initial_data"]["items"][0]["file_content"] == "# Architecture\n"
assert metadata["alert"]["kind"] == "design_review"
- assert metadata["alert"]["target_agent"] == "orion"
+ assert metadata["alert"]["target_agent"] == "demo-agent"
assert metadata["alert"]["response_required"] is True
assert metadata["alert"]["summary"] == "Review this diagram"
assert "top_level_ingress" not in metadata
@@ -126,7 +126,7 @@ def get_context(self, key, *, space_id=None):
"url": "https://dev.paxai.app/api/v1/uploads/files/channel-flow.svg",
}
),
- "agent_name": "user:madtank",
+ "agent_name": "user:alex",
"summary": "SVG upload",
"ttl": 86400,
},
@@ -182,21 +182,21 @@ def whoami(self):
calls["whoami"] = True
return {
"id": "user-1",
- "email": "madtank@example.com",
- "full_name": "Jacob Taunton",
- "username": "madtank",
+ "email": "alex@example.com",
+ "full_name": "Alex Example",
+ "username": "alex",
"role": "admin",
"bound_agent": {
"agent_id": "agent-1",
- "agent_name": "chatgpt_dev",
+ "agent_name": "demo_agent",
"default_space_id": "space-1",
- "default_space_name": "madtank's Workspace",
+ "default_space_name": "Alex's Workspace",
"allowed_spaces": [
- {"space_id": "space-1", "name": "madtank's Workspace", "is_default": True},
+ {"space_id": "space-1", "name": "alex's Workspace", "is_default": True},
],
},
"resolved_space_id": "space-1",
- "resolved_agent": "chatgpt_dev",
+ "resolved_agent": "demo_agent",
}
def send_message(
@@ -248,12 +248,12 @@ def send_message(
"principal_kind": "agent",
"role_label": "Agent",
"status": "active",
- "handle": "chatgpt_dev",
- "display_name": "chatgpt_dev",
+ "handle": "demo_agent",
+ "display_name": "demo_agent",
"id": "agent-1",
}
- assert initial_data["data"]["context"]["workspace_name"] == "madtank's Workspace"
- assert initial_data["data"]["context"]["owner"]["handle"] == "madtank"
+ assert initial_data["data"]["context"]["workspace_name"] == "alex's Workspace"
+ assert initial_data["data"]["context"]["owner"]["handle"] == "alex"
assert calls["message"]["metadata"]["top_level_ingress"] is False
assert calls["message"]["metadata"]["signal_only"] is True
assert calls["message"]["metadata"]["app_signal"]["signal_only"] is True
@@ -269,7 +269,7 @@ def list_agents(self, *, space_id=None, limit=None):
"agents": [
{
"id": "agent-1",
- "name": "orion",
+ "name": "demo-agent",
"status": "active",
"description": "QA reviewer",
},
@@ -314,7 +314,7 @@ def send_message(
assert initial_data["items"] == [
{
"id": "agent-1",
- "name": "orion",
+ "name": "demo-agent",
"status": "active",
"description": "QA reviewer",
},
diff --git a/tests/test_auth_commands.py b/tests/test_auth_commands.py
index 83691f4..974deb0 100644
--- a/tests/test_auth_commands.py
+++ b/tests/test_auth_commands.py
@@ -37,7 +37,7 @@ def fake_login_user(token, *, base_url, agent, space_id, env_name):
"--env",
"next",
"--agent",
- "anvil",
+ "peer-agent",
"--space-id",
"space-123",
],
@@ -47,7 +47,7 @@ def fake_login_user(token, *, base_url, agent, space_id, env_name):
assert called == {
"token": "axp_u_test.token",
"base_url": "https://next.paxai.app",
- "agent": "anvil",
+ "agent": "peer-agent",
"space_id": "space-123",
"env_name": "next",
}
@@ -125,8 +125,8 @@ def test_user_login_does_not_modify_local_agent_config(monkeypatch, write_config
write_config(
token="axp_a_old.secret",
base_url="https://old.example.com",
- agent_name="orion",
- agent_id="agent-orion",
+ agent_name="demo-agent",
+ agent_id="agent-demo-agent",
space_id="old-space",
)
@@ -149,7 +149,7 @@ def __init__(self, *, base_url, token):
self.token = token
def whoami(self):
- return {"username": "madtank", "email": "madtank@example.com"}
+ return {"username": "alex", "email": "alex@example.com"}
def list_spaces(self):
return {"spaces": [{"id": "space-current", "name": "Team Hub", "is_current": True}]}
@@ -167,8 +167,8 @@ def list_agents(self):
assert local_cfg == {
"token": "axp_a_old.secret",
"base_url": "https://old.example.com",
- "agent_name": "orion",
- "agent_id": "agent-orion",
+ "agent_name": "demo-agent",
+ "agent_id": "agent-demo-agent",
"space_id": "old-space",
}
user_cfg = tomllib.loads((config_dir.parent / "_global_config" / "user.toml").read_text())
@@ -182,7 +182,7 @@ def list_agents(self):
def test_user_login_env_stores_named_login_and_marks_active(monkeypatch, write_config, config_dir):
"""Admins can keep separate user bootstrap tokens for dev/next/prod."""
- write_config(token="axp_a_old.secret", base_url="https://old.example.com", agent_name="orion")
+ write_config(token="axp_a_old.secret", base_url="https://old.example.com", agent_name="demo-agent")
class FakeTokenExchanger:
def __init__(self, base_url, token):
@@ -200,7 +200,7 @@ def __init__(self, *, base_url, token):
self.token = token
def whoami(self):
- return {"username": "madtank", "email": "madtank@example.com"}
+ return {"username": "alex", "email": "alex@example.com"}
def list_spaces(self):
return {"spaces": []}
diff --git a/tests/test_channel.py b/tests/test_channel.py
index edf5a37..7c8b080 100644
--- a/tests/test_channel.py
+++ b/tests/test_channel.py
@@ -37,7 +37,7 @@ class CaptureBridge(ChannelBridge):
def __init__(self, client, *, agent_id="agent-123", processing_status=True):
super().__init__(
client=client,
- agent_name="anvil",
+ agent_name="peer-agent",
agent_id=agent_id,
space_id="space-123",
queue_size=10,
@@ -103,7 +103,7 @@ def test_channel_sends_with_agent_bound_pat():
{
"message_id": "incoming-123",
"status": "completed",
- "agent_name": "anvil",
+ "agent_name": "peer-agent",
"space_id": "space-123",
}
]
@@ -122,7 +122,7 @@ def test_channel_can_publish_working_status_on_delivery():
{
"message_id": "incoming-123",
"status": "working",
- "agent_name": "anvil",
+ "agent_name": "peer-agent",
"space_id": "space-123",
}
]
@@ -142,9 +142,9 @@ def connect_sse(self, *, space_id):
return FakeSseResponse(
{
"id": "incoming-123",
- "content": "@anvil please check this",
- "author": {"id": "user-123", "name": "madtank", "type": "user"},
- "mentions": ["anvil"],
+ "content": "@peer-agent please check this",
+ "author": {"id": "user-123", "name": "alex", "type": "user"},
+ "mentions": ["peer-agent"],
}
)
@@ -212,9 +212,9 @@ def test_channel_get_messages_returns_pending_mentions():
message_id="incoming-123",
parent_id=None,
conversation_id=None,
- author="madtank",
+ author="alex",
prompt="please check this",
- raw_content="@anvil please check this",
+ raw_content="@peer-agent please check this",
created_at="2026-04-15T23:00:00Z",
space_id="space-123",
)
@@ -238,9 +238,9 @@ async def run():
message_id="incoming-123",
parent_id=None,
conversation_id="conversation-ignored",
- author="madtank",
+ author="alex",
prompt="please check this",
- raw_content="@anvil please check this",
+ raw_content="@peer-agent please check this",
created_at=None,
space_id="space-123",
)
@@ -289,11 +289,11 @@ def test_listener_treats_parent_reply_as_delivery_signal():
"id": "reply-1",
"content": "I looked at this",
"parent_id": "agent-message-1",
- "author": {"id": "other-agent", "name": "orion", "type": "agent"},
+ "author": {"id": "other-agent", "name": "demo-agent", "type": "agent"},
"mentions": [],
}
- assert _should_respond(data, "anvil", "agent-123", reply_anchor_ids=anchors) is True
+ assert _should_respond(data, "peer-agent", "agent-123", reply_anchor_ids=anchors) is True
def test_listener_treats_conversation_reply_as_delivery_signal():
@@ -302,23 +302,23 @@ def test_listener_treats_conversation_reply_as_delivery_signal():
"id": "reply-1",
"content": "I looked at this",
"conversation_id": "agent-message-1",
- "author": {"id": "other-agent", "name": "orion", "type": "agent"},
+ "author": {"id": "other-agent", "name": "demo-agent", "type": "agent"},
"mentions": [],
}
- assert _should_respond(data, "anvil", "agent-123", reply_anchor_ids=anchors) is True
+ assert _should_respond(data, "peer-agent", "agent-123", reply_anchor_ids=anchors) is True
def test_listener_tracks_self_authored_messages_without_responding():
anchors: set[str] = set()
data = {
"id": "agent-message-1",
- "content": "@orion please check this",
- "author": {"id": "agent-123", "name": "anvil", "type": "agent"},
- "mentions": ["orion"],
+ "content": "@demo-agent please check this",
+ "author": {"id": "agent-123", "name": "peer-agent", "type": "agent"},
+ "mentions": ["demo-agent"],
}
- assert _is_self_authored(data, "anvil", "agent-123") is True
+ assert _is_self_authored(data, "peer-agent", "agent-123") is True
_remember_reply_anchor(anchors, data["id"])
- assert _should_respond(data, "anvil", "agent-123", reply_anchor_ids=anchors) is False
+ assert _should_respond(data, "peer-agent", "agent-123", reply_anchor_ids=anchors) is False
assert anchors == {"agent-message-1"}
diff --git a/tests/test_config.py b/tests/test_config.py
index d07e47f..8a5bf3c 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -18,15 +18,15 @@
)
-def _write_active_profile(global_dir: Path, *, name: str = "next-orion") -> Path:
+def _write_active_profile(global_dir: Path, *, name: str = "demo-agent") -> Path:
token_file = global_dir / "profiles" / name / "token"
token_file.parent.mkdir(parents=True)
token_file.write_text("axp_a_agent.secret")
(global_dir / "profiles" / ".active").write_text(f"{name}\n")
(global_dir / "profiles" / name / "profile.toml").write_text(
f'base_url = "https://next.paxai.app"\n'
- f'agent_name = "orion"\n'
- f'agent_id = "agent-orion"\n'
+ f'agent_name = "demo-agent"\n'
+ f'agent_id = "agent-demo-agent"\n'
f'space_id = "next-space"\n'
f'token_file = "{token_file}"\n'
)
@@ -133,8 +133,8 @@ def test_ax_config_file_overrides_local_runtime_config(self, tmp_path, monkeypat
runtime_config.write_text(
f'token_file = "{token_file.name}"\n'
'base_url = "https://next.paxai.app"\n'
- 'agent_name = "orion"\n'
- 'agent_id = "agent-orion"\n'
+ 'agent_name = "demo-agent"\n'
+ 'agent_id = "agent-demo-agent"\n'
'space_id = "space-next"\n'
)
monkeypatch.chdir(tmp_path)
@@ -144,8 +144,8 @@ def test_ax_config_file_overrides_local_runtime_config(self, tmp_path, monkeypat
assert cfg["token"] == "axp_a_runtime.secret"
assert cfg["base_url"] == "https://next.paxai.app"
- assert cfg["agent_name"] == "orion"
- assert cfg["agent_id"] == "agent-orion"
+ assert cfg["agent_name"] == "demo-agent"
+ assert cfg["agent_id"] == "agent-demo-agent"
assert cfg["space_id"] == "space-next"
assert cfg["principal_type"] == "agent"
@@ -185,8 +185,8 @@ def test_local_agent_config_overrides_user_login_principal(self, tmp_path, monke
(local_ax / "config.toml").write_text(
'token = "axp_a_agent.secret"\n'
'base_url = "https://next.paxai.app"\n'
- 'agent_name = "orion"\n'
- 'agent_id = "agent-orion"\n'
+ 'agent_name = "demo-agent"\n'
+ 'agent_id = "agent-demo-agent"\n'
)
monkeypatch.chdir(tmp_path)
@@ -194,7 +194,7 @@ def test_local_agent_config_overrides_user_login_principal(self, tmp_path, monke
assert cfg["token"] == "axp_a_agent.secret"
assert cfg["principal_type"] == "agent"
- assert cfg["agent_name"] == "orion"
+ assert cfg["agent_name"] == "demo-agent"
def test_unsafe_local_user_pat_agent_config_does_not_override_active_profile(
self, tmp_path, monkeypatch, capsys
@@ -204,14 +204,14 @@ def test_unsafe_local_user_pat_agent_config_does_not_override_active_profile(
monkeypatch.setenv("AX_CONFIG_DIR", str(global_dir))
monkeypatch.setattr(config_module, "_unsafe_local_config_warned", False)
- token_file = global_dir / "profiles" / "next-orion" / "token"
+ token_file = global_dir / "profiles" / "demo-agent" / "token"
token_file.parent.mkdir(parents=True)
token_file.write_text("axp_a_agent.secret")
- (global_dir / "profiles" / ".active").write_text("next-orion\n")
- (global_dir / "profiles" / "next-orion" / "profile.toml").write_text(
+ (global_dir / "profiles" / ".active").write_text("demo-agent\n")
+ (global_dir / "profiles" / "demo-agent" / "profile.toml").write_text(
f'base_url = "https://next.paxai.app"\n'
- f'agent_name = "orion"\n'
- f'agent_id = "agent-orion"\n'
+ f'agent_name = "demo-agent"\n'
+ f'agent_id = "agent-demo-agent"\n'
f'space_id = "next-space"\n'
f'token_file = "{token_file}"\n'
)
@@ -231,8 +231,8 @@ def test_unsafe_local_user_pat_agent_config_does_not_override_active_profile(
assert cfg["token"] == "axp_a_agent.secret"
assert cfg["base_url"] == "https://next.paxai.app"
- assert cfg["agent_name"] == "orion"
- assert cfg["agent_id"] == "agent-orion"
+ assert cfg["agent_name"] == "demo-agent"
+ assert cfg["agent_id"] == "agent-demo-agent"
assert cfg["space_id"] == "next-space"
assert "Ignoring unsafe local aX config" in capsys.readouterr().err
@@ -329,8 +329,8 @@ def test_active_profile_reports_agent_runtime_source(self, tmp_path, monkeypatch
diagnostic = diagnose_auth_config()
assert diagnostic["ok"] is True
- assert diagnostic["selected_profile"] == "next-orion"
- assert diagnostic["effective"]["auth_source"] == "active_profile:next-orion"
+ assert diagnostic["selected_profile"] == "demo-agent"
+ assert diagnostic["effective"]["auth_source"] == "active_profile:demo-agent"
assert diagnostic["effective"]["token_kind"] == "agent_pat"
assert diagnostic["effective"]["principal_intent"] == "agent"
assert diagnostic["effective"]["space_id"] == "next-space"
@@ -376,8 +376,8 @@ def test_unsafe_local_config_reports_ignored_reason_and_uses_profile(self, tmp_p
diagnostic = diagnose_auth_config()
assert diagnostic["ok"] is True
- assert diagnostic["effective"]["auth_source"] == "active_profile:next-orion"
- assert diagnostic["effective"]["agent_name"] == "orion"
+ assert diagnostic["effective"]["auth_source"] == "active_profile:demo-agent"
+ assert diagnostic["effective"]["agent_name"] == "demo-agent"
assert diagnostic["effective"]["space_id"] == "next-space"
assert any(warning["code"] == "unsafe_local_config_ignored" for warning in diagnostic["warnings"])
local_source = next(source for source in diagnostic["sources"] if source["name"] == "local_config")
@@ -486,7 +486,7 @@ def test_resolve_user_token_uses_user_login_even_with_local_agent(self, tmp_path
local_ax = tmp_path / ".ax"
local_ax.mkdir()
(local_ax / "config.toml").write_text(
- 'token = "axp_a_agent.secret"\nagent_name = "orion"\nagent_id = "agent-orion"\n'
+ 'token = "axp_a_agent.secret"\nagent_name = "demo-agent"\nagent_id = "agent-demo-agent"\n'
)
monkeypatch.chdir(tmp_path)
diff --git a/tests/test_context_commands.py b/tests/test_context_commands.py
index 93c2d61..5e0f58e 100644
--- a/tests/test_context_commands.py
+++ b/tests/test_context_commands.py
@@ -296,12 +296,12 @@ def send_message(self, space_id, content):
result = runner.invoke(
app,
- ["context", "upload-file", str(sample), "--mention", "@orion", "--json"],
+ ["context", "upload-file", str(sample), "--mention", "@demo-agent", "--json"],
)
assert result.exit_code == 0, result.output
assert calls["message"]["space_id"] == "space-1"
- assert calls["message"]["content"].startswith("@orion Context uploaded:")
+ assert calls["message"]["content"].startswith("@demo-agent Context uploaded:")
assert calls["context"]["key"] in calls["message"]["content"]
assert '"message_id": "msg-1"' in result.output
diff --git a/tests/test_handoff.py b/tests/test_handoff.py
index 8358ab2..5828ee5 100644
--- a/tests/test_handoff.py
+++ b/tests/test_handoff.py
@@ -27,13 +27,13 @@ def test_handoff_matches_thread_reply_from_target_agent():
"id": "reply-1",
"content": "Reviewed and done.",
"parent_id": "sent-1",
- "display_name": "orion",
+ "display_name": "demo-agent",
"created_at": "2026-04-13T04:31:00+00:00",
}
assert _matches_handoff_reply(
message,
- agent_name="orion",
+ agent_name="demo-agent",
sent_message_id="sent-1",
token="handoff:abc123",
current_agent_name="ChatGPT",
@@ -47,13 +47,13 @@ def test_handoff_matches_fast_top_level_reply_with_token_and_mention():
"id": "reply-1",
"content": "@ChatGPT handoff:abc123 reviewed the spec.",
"conversation_id": "reply-1",
- "display_name": "orion",
+ "display_name": "demo-agent",
"created_at": "2026-04-13T04:31:00+00:00",
}
assert _matches_handoff_reply(
message,
- agent_name="@orion",
+ agent_name="@demo-agent",
sent_message_id="sent-1",
token="handoff:abc123",
current_agent_name="ChatGPT",
@@ -71,7 +71,7 @@ def test_handoff_does_not_match_other_agent():
assert not _matches_handoff_reply(
message,
- agent_name="orion",
+ agent_name="demo-agent",
sent_message_id="sent-1",
token="handoff:abc123",
current_agent_name="ChatGPT",
@@ -173,7 +173,7 @@ def test_handoff_loop_repeats_until_completion_promise(monkeypatch):
class FakeClient:
def list_agents(self):
- return {"agents": [{"id": "agent-1", "name": "orion"}]}
+ return {"agents": [{"id": "agent-1", "name": "demo-agent"}]}
def create_task(self, space_id, title, description=None, priority=None, assignee_id=None):
calls["task"] = {
@@ -191,8 +191,8 @@ def send_message(self, space_id, content, parent_id=None):
return {"message": {"id": message_id}}
replies = [
- {"id": "reply-1", "content": "handoff:abc still working", "display_name": "orion"},
- {"id": "reply-2", "content": "DONE", "display_name": "orion"},
+ {"id": "reply-1", "content": "handoff:abc still working", "display_name": "demo-agent"},
+ {"id": "reply-2", "content": "DONE", "display_name": "demo-agent"},
]
monkeypatch.setattr("ax_cli.commands.handoff.get_client", lambda: FakeClient())
@@ -205,7 +205,7 @@ def send_message(self, space_id, content, parent_id=None):
app,
[
"handoff",
- "orion",
+ "demo-agent",
"Fix the regression with tests",
"--loop",
"--max-rounds",
@@ -221,7 +221,7 @@ def send_message(self, space_id, content, parent_id=None):
data = _json_tail(result.output)
assert len(calls["messages"]) == 2
assert "Agentic loop mode is enabled" in calls["messages"][0]["content"]
- assert calls["messages"][1]["content"].startswith("@orion Continue agentic loop")
+ assert calls["messages"][1]["content"].startswith("@demo-agent Continue agentic loop")
assert calls["messages"][1]["parent_id"] == "reply-1"
assert data["reply"]["id"] == "reply-2"
assert data["loop"]["completed"] is True
@@ -235,7 +235,7 @@ def test_handoff_loop_stops_at_max_rounds_without_promise(monkeypatch):
class FakeClient:
def list_agents(self):
- return {"agents": [{"id": "agent-1", "name": "orion"}]}
+ return {"agents": [{"id": "agent-1", "name": "demo-agent"}]}
def create_task(self, space_id, title, description=None, priority=None, assignee_id=None):
return {"task": {"id": "task-1"}}
@@ -246,8 +246,8 @@ def send_message(self, space_id, content, parent_id=None):
return {"message": {"id": message_id}}
replies = [
- {"id": "reply-1", "content": "round one", "display_name": "orion"},
- {"id": "reply-2", "content": "round two", "display_name": "orion"},
+ {"id": "reply-1", "content": "round one", "display_name": "demo-agent"},
+ {"id": "reply-2", "content": "round two", "display_name": "demo-agent"},
]
monkeypatch.setattr("ax_cli.commands.handoff.get_client", lambda: FakeClient())
@@ -257,7 +257,7 @@ def send_message(self, space_id, content, parent_id=None):
result = runner.invoke(
app,
- ["handoff", "orion", "Iterate twice", "--loop", "--max-rounds", "2", "--no-adaptive-wait", "--json"],
+ ["handoff", "demo-agent", "Iterate twice", "--loop", "--max-rounds", "2", "--no-adaptive-wait", "--json"],
)
assert result.exit_code == 0, result.output
@@ -275,7 +275,7 @@ def test_handoff_loop_timeout_after_progress_uses_loop_timeout_status(monkeypatc
class FakeClient:
def list_agents(self):
- return {"agents": [{"id": "agent-1", "name": "orion"}]}
+ return {"agents": [{"id": "agent-1", "name": "demo-agent"}]}
def create_task(self, space_id, title, description=None, priority=None, assignee_id=None):
return {"task": {"id": "task-1"}}
@@ -285,7 +285,7 @@ def send_message(self, space_id, content, parent_id=None):
calls["messages"].append({"space_id": space_id, "content": content, "parent_id": parent_id})
return {"message": {"id": message_id}}
- replies = [{"id": "reply-1", "content": "round one", "display_name": "orion"}, None]
+ replies = [{"id": "reply-1", "content": "round one", "display_name": "demo-agent"}, None]
monkeypatch.setattr("ax_cli.commands.handoff.get_client", lambda: FakeClient())
monkeypatch.setattr("ax_cli.commands.handoff.resolve_space_id", lambda client, explicit=None: "space-1")
@@ -294,7 +294,7 @@ def send_message(self, space_id, content, parent_id=None):
result = runner.invoke(
app,
- ["handoff", "orion", "Iterate twice", "--loop", "--max-rounds", "2", "--no-adaptive-wait", "--json"],
+ ["handoff", "demo-agent", "Iterate twice", "--loop", "--max-rounds", "2", "--no-adaptive-wait", "--json"],
)
assert result.exit_code == 0, result.output
@@ -361,7 +361,7 @@ def test_handoff_default_adaptive_wait_continues_when_probe_replies(monkeypatch)
class FakeClient:
def list_agents(self):
- return {"agents": [{"id": "agent-1", "name": "orion"}]}
+ return {"agents": [{"id": "agent-1", "name": "demo-agent"}]}
def create_task(self, space_id, title, description=None, priority=None, assignee_id=None):
return {"task": {"id": "task-1"}}
@@ -372,8 +372,8 @@ def send_message(self, space_id, content, parent_id=None):
return {"message": {"id": message_id}}
replies = [
- {"id": "probe-reply", "content": "ping:ok", "display_name": "orion"},
- {"id": "handoff-reply", "content": "reviewed", "display_name": "orion"},
+ {"id": "probe-reply", "content": "ping:ok", "display_name": "demo-agent"},
+ {"id": "handoff-reply", "content": "reviewed", "display_name": "demo-agent"},
]
monkeypatch.setattr("ax_cli.commands.handoff.get_client", lambda: FakeClient())
@@ -381,7 +381,7 @@ def send_message(self, space_id, content, parent_id=None):
monkeypatch.setattr("ax_cli.commands.handoff.resolve_agent_name", lambda client=None: "ChatGPT")
monkeypatch.setattr("ax_cli.commands.handoff._wait_for_handoff_reply", lambda *args, **kwargs: replies.pop(0))
- result = runner.invoke(app, ["handoff", "orion", "Review CLI docs", "--json"])
+ result = runner.invoke(app, ["handoff", "demo-agent", "Review CLI docs", "--json"])
assert result.exit_code == 0, result.output
data = _json_tail(result.output)
@@ -397,7 +397,7 @@ def test_handoff_no_adaptive_wait_skips_contact_probe(monkeypatch):
class FakeClient:
def list_agents(self):
- return {"agents": [{"id": "agent-1", "name": "orion"}]}
+ return {"agents": [{"id": "agent-1", "name": "demo-agent"}]}
def create_task(self, space_id, title, description=None, priority=None, assignee_id=None):
return {"task": {"id": "task-1"}}
@@ -412,10 +412,10 @@ def send_message(self, space_id, content, parent_id=None):
monkeypatch.setattr("ax_cli.commands.handoff.resolve_agent_name", lambda client=None: "ChatGPT")
monkeypatch.setattr(
"ax_cli.commands.handoff._wait_for_handoff_reply",
- lambda *args, **kwargs: {"id": "reply-1", "content": "reviewed", "display_name": "orion"},
+ lambda *args, **kwargs: {"id": "reply-1", "content": "reviewed", "display_name": "demo-agent"},
)
- result = runner.invoke(app, ["handoff", "orion", "Review CLI docs", "--no-adaptive-wait", "--json"])
+ result = runner.invoke(app, ["handoff", "demo-agent", "Review CLI docs", "--no-adaptive-wait", "--json"])
assert result.exit_code == 0, result.output
data = _json_tail(result.output)
diff --git a/tests/test_messages.py b/tests/test_messages.py
index 9e156f4..825a996 100644
--- a/tests/test_messages.py
+++ b/tests/test_messages.py
@@ -105,7 +105,7 @@ def list_messages(self, limit=20, channel="main", *, space_id=None):
{
"id": message_id,
"content": "hello",
- "display_name": "orion",
+ "display_name": "demo-agent",
"created_at": "2026-04-13T15:00:00Z",
}
]
@@ -142,7 +142,7 @@ def list_messages(self, limit=20, channel="main", *, space_id=None, unread_only=
{
"id": "12345678-90ab-cdef-1234-567890abcdef",
"content": "unread update",
- "display_name": "orion",
+ "display_name": "demo-agent",
"created_at": "2026-04-13T15:00:00Z",
}
],
@@ -320,10 +320,10 @@ def send_message(self, space_id, content, *, channel="main", parent_id=None, att
monkeypatch.setattr("ax_cli.commands.messages.resolve_space_id", lambda client, explicit=None: "space-1")
monkeypatch.setattr("ax_cli.commands.messages.resolve_agent_name", lambda client=None: None)
- result = runner.invoke(app, ["send", "checkpoint", "--to", "orion", "--no-wait", "--json"])
+ result = runner.invoke(app, ["send", "checkpoint", "--to", "demo-agent", "--no-wait", "--json"])
assert result.exit_code == 0, result.output
- assert calls["message"]["content"] == "@orion checkpoint"
+ assert calls["message"]["content"] == "@demo-agent checkpoint"
def test_send_ask_ax_prepends_ax_mention(monkeypatch):
@@ -373,7 +373,7 @@ def send_message(self, space_id, content, *, channel="main", parent_id=None, att
def test_send_ask_ax_rejects_to_combination():
- result = runner.invoke(app, ["send", "route this", "--ask-ax", "--to", "orion"])
+ result = runner.invoke(app, ["send", "route this", "--ask-ax", "--to", "demo-agent"])
assert result.exit_code == 1
assert "use either --ask-ax or --to" in result.output
@@ -409,11 +409,11 @@ def fake_wait(client, message_id, timeout=60, wait_label="reply", **kwargs):
monkeypatch.setattr("ax_cli.commands.messages.resolve_agent_name", lambda client=None: None)
monkeypatch.setattr("ax_cli.commands.messages._wait_for_reply", fake_wait)
- result = runner.invoke(app, ["send", "@orion checkpoint", "--to", "orion", "--json"])
+ result = runner.invoke(app, ["send", "@demo-agent checkpoint", "--to", "demo-agent", "--json"])
assert result.exit_code == 0, result.output
- assert calls["message"]["content"] == "@orion checkpoint"
- assert calls["wait"]["wait_label"] == "@orion"
+ assert calls["message"]["content"] == "@demo-agent checkpoint"
+ assert calls["wait"]["wait_label"] == "@demo-agent"
assert calls["wait"]["processing_watcher"] is not None
@@ -425,7 +425,7 @@ def test_processing_status_from_event_matches_message():
"message_id": "msg-1",
"status": "working",
"agent_id": "agent-1",
- "agent_name": "orion",
+ "agent_name": "demo-agent",
},
)
@@ -433,7 +433,7 @@ def test_processing_status_from_event_matches_message():
"message_id": "msg-1",
"status": "working",
"agent_id": "agent-1",
- "agent_name": "orion",
+ "agent_name": "demo-agent",
}
assert _processing_status_from_event("msg-2", "agent_processing", {"message_id": "msg-1"}) is None
assert _processing_status_from_event("msg-1", "message", {"message_id": "msg-1"}) is None
diff --git a/tests/test_mint_command.py b/tests/test_mint_command.py
index 4665953..0536189 100644
--- a/tests/test_mint_command.py
+++ b/tests/test_mint_command.py
@@ -18,7 +18,7 @@ def list_agents(self):
"agents": [
{
"id": "12345678-90ab-cdef-1234-567890abcdef",
- "name": "orion",
+ "name": "demo-agent",
}
]
}
@@ -68,7 +68,7 @@ def test_token_mint_prints_token_when_not_saving(monkeypatch, write_config):
write_config(token="axp_u_user.secret", base_url="https://next.paxai.app")
monkeypatch.setattr("ax_cli.commands.mint.get_user_client", lambda: FakeMintClient())
- result = runner.invoke(app, ["token", "mint", "orion"])
+ result = runner.invoke(app, ["token", "mint", "demo-agent"])
assert result.exit_code == 0, result.output
assert "axp_a_newly_minted.secret" in result.output
@@ -103,12 +103,12 @@ def test_token_mint_hides_token_when_saved(monkeypatch, write_config, tmp_path):
write_config(token="axp_u_user.secret", base_url="https://next.paxai.app")
monkeypatch.setattr("ax_cli.commands.mint.get_user_client", lambda: FakeMintClient())
- result = runner.invoke(app, ["token", "mint", "orion", "--save-to", str(tmp_path)])
+ result = runner.invoke(app, ["token", "mint", "demo-agent", "--save-to", str(tmp_path)])
assert result.exit_code == 0, result.output
assert "axp_a_newly_minted.secret" not in result.output
assert "not printed" in result.output
- assert (tmp_path / ".ax" / "orion_token").read_text() == "axp_a_newly_minted.secret"
+ assert (tmp_path / ".ax" / "demo-agent_token").read_text() == "axp_a_newly_minted.secret"
def test_token_mint_json_hides_token_when_saved(monkeypatch, write_config, tmp_path):
@@ -116,14 +116,14 @@ def test_token_mint_json_hides_token_when_saved(monkeypatch, write_config, tmp_p
(tmp_path / ".ax" / "config.toml").chmod(0o600)
monkeypatch.setattr("ax_cli.commands.mint.get_user_client", lambda: FakeMintClient())
- result = runner.invoke(app, ["token", "mint", "orion", "--save-to", str(tmp_path), "--json"])
+ result = runner.invoke(app, ["token", "mint", "demo-agent", "--save-to", str(tmp_path), "--json"])
assert result.exit_code == 0, result.output
payload = json.loads(result.output)
assert "token" not in payload
assert payload["token_redacted"] is True
assert payload["token_printed"] is False
- assert payload["token_file"].endswith(".ax/orion_token")
+ assert payload["token_file"].endswith(".ax/demo-agent_token")
def test_token_mint_can_print_saved_token_when_explicit(monkeypatch, write_config, tmp_path):
@@ -131,7 +131,7 @@ def test_token_mint_can_print_saved_token_when_explicit(monkeypatch, write_confi
(tmp_path / ".ax" / "config.toml").chmod(0o600)
monkeypatch.setattr("ax_cli.commands.mint.get_user_client", lambda: FakeMintClient())
- result = runner.invoke(app, ["token", "mint", "orion", "--save-to", str(tmp_path), "--print-token", "--json"])
+ result = runner.invoke(app, ["token", "mint", "demo-agent", "--save-to", str(tmp_path), "--print-token", "--json"])
assert result.exit_code == 0, result.output
payload = json.loads(result.output)
@@ -143,8 +143,8 @@ def test_token_mint_uses_user_login_when_local_config_is_agent(monkeypatch, writ
write_config(
token="axp_a_agent.secret",
base_url="https://next.paxai.app",
- agent_name="orion",
- agent_id="agent-orion",
+ agent_name="demo-agent",
+ agent_id="agent-demo-agent",
)
user_config_dir = Path(os.environ["AX_CONFIG_DIR"])
user_config_dir.mkdir(parents=True, exist_ok=True)
@@ -153,14 +153,14 @@ def test_token_mint_uses_user_login_when_local_config_is_agent(monkeypatch, writ
)
monkeypatch.setattr("ax_cli.commands.mint.get_user_client", lambda: FakeMintClient())
- result = runner.invoke(app, ["token", "mint", "orion"])
+ result = runner.invoke(app, ["token", "mint", "demo-agent"])
assert result.exit_code == 0, result.output
assert "axp_a_newly_minted.secret" in result.output
def test_token_mint_env_selects_named_user_login(monkeypatch, write_config):
- write_config(token="axp_a_agent.secret", base_url="https://next.paxai.app", agent_name="orion")
+ write_config(token="axp_a_agent.secret", base_url="https://next.paxai.app", agent_name="demo-agent")
monkeypatch.setenv("AX_USER_TOKEN", "axp_u_dev.secret")
def fake_get_user_client():
@@ -169,7 +169,7 @@ def fake_get_user_client():
monkeypatch.setattr("ax_cli.commands.mint.get_user_client", fake_get_user_client)
- result = runner.invoke(app, ["token", "mint", "orion", "--env", "dev"])
+ result = runner.invoke(app, ["token", "mint", "demo-agent", "--env", "dev"])
assert result.exit_code == 0, result.output
assert "axp_a_newly_minted.secret" in result.output
diff --git a/tests/test_qa_contracts.py b/tests/test_qa_contracts.py
index e952dc6..b0e9eb2 100644
--- a/tests/test_qa_contracts.py
+++ b/tests/test_qa_contracts.py
@@ -16,7 +16,7 @@ def __init__(self):
def whoami(self):
self.calls.append(("whoami",))
return {
- "username": "madtank",
+ "username": "alex",
"principal_type": "user",
"bound_agent": None,
}
@@ -31,7 +31,7 @@ def get_space(self, space_id):
def list_space_members(self, space_id):
self.calls.append(("list_space_members", space_id))
- return {"members": [{"username": "madtank"}]}
+ return {"members": [{"username": "alex"}]}
def list_agents(self, *, space_id=None, limit=None):
self.calls.append(("list_agents", space_id, limit))
diff --git a/tests/test_reminders_commands.py b/tests/test_reminders_commands.py
index b91d593..4f949d5 100644
--- a/tests/test_reminders_commands.py
+++ b/tests/test_reminders_commands.py
@@ -71,7 +71,7 @@ def test_add_creates_local_policy_file(monkeypatch, tmp_path):
"--reason",
"check this task",
"--target",
- "orion",
+ "demo-agent",
"--first-in-minutes",
"0",
"--max-fires",
@@ -89,7 +89,7 @@ def test_add_creates_local_policy_file(monkeypatch, tmp_path):
policy = store["policies"][0]
assert policy["source_task_id"] == "task-1"
assert policy["reason"] == "check this task"
- assert policy["target"] == "orion"
+ assert policy["target"] == "demo-agent"
assert policy["max_fires"] == 2
assert policy["enabled"] is True
@@ -109,7 +109,7 @@ def test_run_once_fires_due_policy_and_disables_at_max(monkeypatch, tmp_path):
"space_id": "space-abc",
"source_task_id": "task-1",
"reason": "review task state",
- "target": "orion",
+ "target": "demo-agent",
"severity": "info",
"cadence_seconds": 300,
"next_fire_at": "2026-04-16T00:00:00Z",
@@ -128,11 +128,11 @@ def test_run_once_fires_due_policy_and_disables_at_max(monkeypatch, tmp_path):
assert len(fake.sent) == 1
sent = fake.sent[0]
assert sent["message_type"] == "reminder"
- assert sent["content"].startswith("@orion Reminder:")
+ assert sent["content"].startswith("@demo-agent Reminder:")
metadata = sent["metadata"]
assert metadata["alert"]["kind"] == "task_reminder"
assert metadata["alert"]["source_task_id"] == "task-1"
- assert metadata["alert"]["target_agent"] == "orion"
+ assert metadata["alert"]["target_agent"] == "demo-agent"
assert metadata["alert"]["response_required"] is True
assert metadata["reminder_policy"]["policy_id"] == "rem-test"
@@ -158,7 +158,7 @@ def test_run_once_skips_future_policy(monkeypatch, tmp_path):
"space_id": "space-abc",
"source_task_id": "task-1",
"reason": "not yet",
- "target": "orion",
+ "target": "demo-agent",
"cadence_seconds": 300,
"next_fire_at": "2999-01-01T00:00:00Z",
"max_fires": 1,
@@ -204,14 +204,14 @@ def json(self):
"title": "Ship delivery receipts",
"priority": "urgent",
"status": "in_progress",
- "assignee_id": "agent-orion",
+ "assignee_id": "agent-demo-agent",
"creator_id": "agent-chatgpt",
"deadline": "2026-04-17T00:00:00Z",
}
}
)
- if path.endswith("/agents/agent-orion"):
- return _R({"agent": {"id": "agent-orion", "name": "orion"}})
+ if path.endswith("/agents/agent-demo-agent"):
+ return _R({"agent": {"id": "agent-demo-agent", "name": "demo-agent"}})
return _R({})
fake = _FakeClient()
@@ -232,7 +232,7 @@ def json(self):
"space_id": "space-abc",
"source_task_id": "task-snap",
"reason": "review delivery receipts",
- "target": "orion",
+ "target": "demo-agent",
"severity": "info",
"cadence_seconds": 300,
"next_fire_at": "2026-04-16T00:00:00Z",
@@ -257,8 +257,8 @@ def json(self):
assert task["title"] == "Ship delivery receipts"
assert task["priority"] == "urgent"
assert task["status"] == "in_progress"
- assert task["assignee_id"] == "agent-orion"
- assert task["assignee_name"] == "orion"
+ assert task["assignee_id"] == "agent-demo-agent"
+ assert task["assignee_name"] == "demo-agent"
assert task["deadline"] == "2026-04-17T00:00:00Z"
card_payload = metadata["ui"]["cards"][0]["payload"]
@@ -292,7 +292,7 @@ def get(self, path: str, *, headers: dict) -> Any:
"space_id": "space-abc",
"source_task_id": "task-nope",
"reason": "fallback path",
- "target": "orion",
+ "target": "demo-agent",
"cadence_seconds": 300,
"next_fire_at": "2026-04-16T00:00:00Z",
"max_fires": 1,
@@ -357,11 +357,11 @@ def test_run_once_skips_and_disables_when_source_task_is_terminal(monkeypatch, t
"id": "task-done",
"title": "Already shipped",
"status": "completed",
- "assignee_id": "agent-orion",
+ "assignee_id": "agent-demo-agent",
"creator_id": "agent-chatgpt",
}
},
- "/agents/agent-orion": {"agent": {"id": "agent-orion", "name": "orion"}},
+ "/agents/agent-demo-agent": {"agent": {"id": "agent-demo-agent", "name": "demo-agent"}},
},
)
@@ -377,7 +377,7 @@ def test_run_once_skips_and_disables_when_source_task_is_terminal(monkeypatch, t
"space_id": "space-abc",
"source_task_id": "task-done",
"reason": "old reminder for a finished task",
- "target": "orion",
+ "target": "demo-agent",
"severity": "info",
"cadence_seconds": 300,
"next_fire_at": "2026-04-16T00:00:00Z",
@@ -418,12 +418,12 @@ def test_run_once_reroutes_pending_review_to_review_owner(monkeypatch, tmp_path)
"id": "task-review",
"title": "PR awaiting review",
"status": "pending_review",
- "assignee_id": "agent-orion",
+ "assignee_id": "agent-demo-agent",
"creator_id": "agent-chatgpt",
- "requirements": {"review_owner": "madtank"},
+ "requirements": {"review_owner": "alex"},
}
},
- "/agents/agent-orion": {"agent": {"id": "agent-orion", "name": "orion"}},
+ "/agents/agent-demo-agent": {"agent": {"id": "agent-demo-agent", "name": "demo-agent"}},
"/agents/agent-chatgpt": {"agent": {"id": "agent-chatgpt", "name": "chatgpt"}},
},
)
@@ -457,10 +457,10 @@ def test_run_once_reroutes_pending_review_to_review_owner(monkeypatch, tmp_path)
assert result.exit_code == 0, result.output
assert len(fake.sent) == 1, "reminder still fires — just reroutes to reviewer"
sent = fake.sent[0]
- assert sent["content"].startswith("@madtank Reminder:")
+ assert sent["content"].startswith("@alex Reminder:")
assert "[pending review]" in sent["content"], "reason should be prefixed with [pending review]"
metadata = sent["metadata"]
- assert metadata["alert"]["target_agent"] == "madtank"
+ assert metadata["alert"]["target_agent"] == "alex"
assert metadata["reminder_policy"]["target_resolved_from"] == "review_owner"
# Policy continues (not disabled) — the review owner can still be reminded
stored = _load(policy_file)["policies"][0]
@@ -479,12 +479,12 @@ def test_run_once_pending_review_falls_back_to_creator_when_no_owner(monkeypatch
"id": "task-review2",
"title": "PR awaiting review — no owner",
"status": "in_progress",
- "assignee_id": "agent-orion",
+ "assignee_id": "agent-demo-agent",
"creator_id": "agent-chatgpt",
"requirements": {"pending_review": True},
}
},
- "/agents/agent-orion": {"agent": {"id": "agent-orion", "name": "orion"}},
+ "/agents/agent-demo-agent": {"agent": {"id": "agent-demo-agent", "name": "demo-agent"}},
"/agents/agent-chatgpt": {"agent": {"id": "agent-chatgpt", "name": "chatgpt"}},
},
)
diff --git a/tests/test_tasks_commands.py b/tests/test_tasks_commands.py
index 03c627c..242bfb8 100644
--- a/tests/test_tasks_commands.py
+++ b/tests/test_tasks_commands.py
@@ -13,7 +13,7 @@ def list_agents(self, *, space_id=None, limit=None):
calls["list_agents"] = {"space_id": space_id, "limit": limit}
return {
"agents": [
- {"id": "agent-123", "name": "orion"},
+ {"id": "agent-123", "name": "demo-agent"},
{"id": "agent-456", "name": "cipher"},
]
}
@@ -33,7 +33,7 @@ def create_task(self, space_id, title, *, description=None, priority="medium", a
result = runner.invoke(
app,
- ["tasks", "create", "Review the spec", "--assign", "@orion", "--no-notify", "--json"],
+ ["tasks", "create", "Review the spec", "--assign", "@demo-agent", "--no-notify", "--json"],
)
assert result.exit_code == 0, result.output
@@ -43,7 +43,7 @@ def create_task(self, space_id, title, *, description=None, priority="medium", a
def test_tasks_create_assign_to_accepts_uuid_without_agent_lookup(monkeypatch):
calls = {}
- agent_id = "076af365-dadc-4e92-a82d-79e855e5776e"
+ agent_id = "bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbbbb"
class FakeClient:
def list_agents(self, *, space_id=None, limit=None):
@@ -77,7 +77,7 @@ def list_agents(self, *, space_id=None, limit=None):
result = runner.invoke(
app,
- ["tasks", "create", "Review the spec", "--assign", "orion", "--no-notify"],
+ ["tasks", "create", "Review the spec", "--assign", "demo-agent", "--no-notify"],
)
assert result.exit_code == 1
@@ -124,7 +124,7 @@ def test_tasks_create_assign_handle_mentions_assignee_by_default(monkeypatch):
class FakeClient:
def list_agents(self, *, space_id=None, limit=None):
- return {"agents": [{"id": "agent-123", "name": "orion"}]}
+ return {"agents": [{"id": "agent-123", "name": "demo-agent"}]}
def create_task(self, space_id, title, *, description=None, priority="medium", assignee_id=None):
calls["create_task"] = {"assignee_id": assignee_id}
@@ -144,13 +144,13 @@ def send_message(self, space_id, content, *, metadata=None, message_type="text")
result = runner.invoke(
app,
- ["tasks", "create", "Run smoke tests", "--assign", "orion", "--json"],
+ ["tasks", "create", "Run smoke tests", "--assign", "demo-agent", "--json"],
)
assert result.exit_code == 0, result.output
assert calls["create_task"]["assignee_id"] == "agent-123"
- assert calls["message"]["content"].startswith("@orion New task created:")
+ assert calls["message"]["content"].startswith("@demo-agent New task created:")
assert calls["message"]["metadata"]["ui"]["cards"][0]["payload"]["assignee"] == {
"id": "agent-123",
- "name": "orion",
+ "name": "demo-agent",
}
diff --git a/tests/test_upload.py b/tests/test_upload.py
index 02de915..725922f 100644
--- a/tests/test_upload.py
+++ b/tests/test_upload.py
@@ -65,9 +65,9 @@ def send_message(self, space_id, content, attachments=None):
"--key",
"sample-key",
"--message",
- "@madtank sample",
+ "@alex sample",
"--mention",
- "orion",
+ "demo-agent",
"--json",
],
)
@@ -76,7 +76,7 @@ def send_message(self, space_id, content, attachments=None):
assert calls["upload"]["space_id"] == "space-1"
assert calls["context"]["space_id"] == "space-1"
assert calls["message"]["space_id"] == "space-1"
- assert calls["message"]["content"].startswith("@orion @madtank sample")
+ assert calls["message"]["content"].startswith("@demo-agent @alex sample")
def test_upload_file_no_message_still_stores_context(monkeypatch, tmp_path):
@@ -204,7 +204,7 @@ def send_message(self, space_id, content, attachments=None):
str(sample),
"--vault",
"--message",
- "@madtank vault smoke",
+ "@alex vault smoke",
"--json",
],
)