{"id":"d394424a-2808-4a6e-b9e5-f717d7c7e817","entityType":"agent","slug":"clawhub-njbrake-aoe","name":"Agent of Empires","canonicalUrl":"https://www.xpersona.co/agent/clawhub-njbrake-aoe","canonicalPath":"/agent/clawhub-njbrake-aoe","generatedAt":"2026-10-10T02:02:28.491Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T04:59:51.218Z","emptyReason":null},"description":"Manage AI coding agent sessions via Agent of Empires (aoe) Skill: Agent of Empires Owner: njbrake Summary: Manage AI coding agent sessions via Agent of Empires (aoe) Tags: latest:1.19.0 Version history: v1.19.0 | 2026-10-08T15:00:33.768Z | auto - Removed the file: skill-card.md. - No changes to functionality or documentation in SKILL.md. - Housekeeping update to clean up skill metadata files. v1.18.0 | 2026-09-30T19:55:14.679Z | auto - Removed the outdated skill-card.md docu","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 4.7K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s179e0v9trsnks4158v7cretm983g6xr:aoe","sourceUrl":"https://clawhub.ai/njbrake/aoe","homepage":"https://clawhub.ai/njbrake/skills/aoe","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/njbrake/aoe","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/njbrake/skills/aoe","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":52,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Manage AI coding agent sessions via Agent of Empires (aoe) Skill: Agent of Empires Owner: njbrake Summary: Manage AI coding agent sessions via Agent of Empires "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T04:59:51.218Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T04:59:51.218Z","emptyReason":null},"stars":null,"forks":null,"downloads":4705,"packageName":null,"latestVersion":"1.19.0","tractionLabel":"4.7K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T04:59:51.218Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T04:59:51.218Z","lastCrawledAt":"2026-10-09T04:59:51.218Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T04:59:51.218Z","lastVerifiedAt":null,"highlights":[{"version":"1.19.0","createdAt":"2026-10-08T15:00:33.768Z","changelog":"- Removed the file: skill-card.md. - No changes to functionality or documentation in SKILL.md. - Housekeeping update to clean up skill metadata files.","fileCount":3,"zipByteSize":4465},{"version":"1.18.0","createdAt":"2026-09-30T19:55:14.679Z","changelog":"- Removed the outdated skill-card.md documentation file. - No user-facing changes to commands, concepts, or usage. - The skill interface and workflows remain unchanged.","fileCount":3,"zipByteSize":4465},{"version":"1.17.2","createdAt":"2026-09-25T18:11:05.832Z","changelog":"- Removed the file: skill-card.md - No other changes to commands, documentation, or features in this release","fileCount":3,"zipByteSize":4506},{"version":"1.17.1","createdAt":"2026-09-25T01:31:52.745Z","changelog":"- Removed the file: skill-card.md - No other changes in functionality or documentation - Skill structure remains the same, with all usage and patterns intact","fileCount":3,"zipByteSize":4431},{"version":"1.17.0","createdAt":"2026-09-24T14:22:30.425Z","changelog":"- Removed the file: skill-card.md - No changes to commands, interface, or documentation content. - No new features or bug fixes in this release.","fileCount":3,"zipByteSize":4473},{"version":"1.16.0","createdAt":"2026-09-10T13:12:40.546Z","changelog":"- Removed the file: skill-card.md - No changes to functionality or documentation in SKILL.md - Release removes an unused or obsolete documentation file","fileCount":3,"zipByteSize":4608},{"version":"1.15.3","createdAt":"2026-09-02T20:33:03.406Z","changelog":"- Removed the file: skill-card.md - No changes to core functionality or documentation - Maintenance update to clean up unnecessary files","fileCount":3,"zipByteSize":4501},{"version":"1.15.2","createdAt":"2026-09-02T14:14:06.937Z","changelog":"- Removed the file: skill-card.md. - No user-facing changes to commands or documentation. - Internal documentation simplified by eliminating a redundant file.","fileCount":3,"zipByteSize":4582}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s179e0v9trsnks4158v7cretm983g6xr:aoe","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-njbrake-aoe/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-njbrake-aoe/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-njbrake-aoe/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-njbrake-aoe/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-njbrake-aoe/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-njbrake-aoe/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T02:02:28.489Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-njbrake-aoe/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-njbrake-aoe/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-njbrake-aoe/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-njbrake-aoe/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T04:59:51.218Z","emptyReason":null},"readme":"Skill: Agent of Empires\n\nOwner: njbrake\n\nSummary: Manage AI coding agent sessions via Agent of Empires (aoe)\n\nTags: latest:1.19.0\n\nVersion history:\n\nv1.19.0 | 2026-10-08T15:00:33.768Z | auto\n\n- Removed the file: skill-card.md.\n- No changes to functionality or documentation in SKILL.md.\n- Housekeeping update to clean up skill metadata files.\n\nv1.18.0 | 2026-09-30T19:55:14.679Z | auto\n\n- Removed the outdated skill-card.md documentation file.\n- No user-facing changes to commands, concepts, or usage.\n- The skill interface and workflows remain unchanged.\n\nv1.17.2 | 2026-09-25T18:11:05.832Z | auto\n\n- Removed the file: skill-card.md\n- No other changes to commands, documentation, or features in this release\n\nv1.17.1 | 2026-09-25T01:31:52.745Z | auto\n\n- Removed the file: skill-card.md\n- No other changes in functionality or documentation\n- Skill structure remains the same, with all usage and patterns intact\n\nv1.17.0 | 2026-09-24T14:22:30.425Z | auto\n\n- Removed the file: skill-card.md\n- No changes to commands, interface, or documentation content.\n- No new features or bug fixes in this release.\n\nv1.16.0 | 2026-09-10T13:12:40.546Z | auto\n\n- Removed the file: skill-card.md\n- No changes to functionality or documentation in SKILL.md\n- Release removes an unused or obsolete documentation file\n\nv1.15.3 | 2026-09-02T20:33:03.406Z | auto\n\n- Removed the file: skill-card.md\n- No changes to core functionality or documentation\n- Maintenance update to clean up unnecessary files\n\nv1.15.2 | 2026-09-02T14:14:06.937Z | auto\n\n- Removed the file: skill-card.md.\n- No user-facing changes to commands or documentation.\n- Internal documentation simplified by eliminating a redundant file.\n\nv1.15.1 | 2026-08-28T14:11:39.229Z | auto\n\n**Changelog for aoe skill v1.15.1**\n\n- Added documentation for `snoozed_until` and `pinned_at` fields in session JSON output, describing their appearance and lifecycle.\n- Clarified that both fields are managed independently from session `state`, and updated guidance on interpreting them.\n- No functional CLI changes; documentation update only.\n- Removed redundant or outdated reference file: `skill-card.md`.\n\nv1.15.0 | 2026-08-21T21:10:03.398Z | auto\n\n**State and trash/archive support for sessions**\n\n- Sessions now include a `state` field (`live`, `archived`, `trashed`) in all JSON outputs (`aoe list --json`, `aoe session show --json`)\n- Documented how `archived_at` and `trashed_at` timestamps are set and cleared, and that session `state` supersedes relying on timestamps\n- Added `aoe list --json --state=live` example to skip trashed/archived sessions; clarified that trashed sessions remain in lists but need to be checked by `state`\n- Clarified that session lifecycle/status and persist/state (live/archived/trashed) are separate concepts\n- Removed deprecated file: `skill-card.md`\n\nv1.14.1 | 2026-08-12T17:42:47.181Z | auto\n\n- Removed the file skill-card.md from the project.\n- No user-facing changes to commands, workflows, or documentation.\n- Existing functionality and usage remain unchanged.\n\nv1.14.0 | 2026-08-05T15:05:44.959Z | auto\n\n- Removed the sample skill card documentation file (`skill-card.md`).\n- No user-facing changes to commands, options, or core functionality.\n- Documentation and workflows in `SKILL.md` remain unchanged.\n\nv1.13.2 | 2026-07-29T14:19:34.499Z | auto\n\n- Removed the file: skill-card.md\n- No other user-facing changes in this version.\n\nv1.13.1 | 2026-07-22T16:16:56.565Z | auto\n\n- Removed the file skill-card.md.\n- No changes to skill features or documentation content.\n- Maintenance update; documentation is now consolidated in SKILL.md only.\n\nv1.13.0 | 2026-07-16T15:13:18.406Z | auto\n\n- Removed the file: skill-card.md\n- No changes to commands, usage, or documentation content.\n- No new features or behavioral changes in this version.\n\nv1.12.1 | 2026-07-08T11:26:41.426Z | auto\n\n- Removed the file: skill-card.md.\n- No changes to functionality or documentation other than this file removal.\n\nv1.12.0 | 2026-07-01T12:06:31.052Z | auto\n\nNo user-visible changes in this version.  \n- Version bump only; no content or file changes detected.\n\nv1.11.3 | 2026-06-26T19:27:36.212Z | auto\n\n- Removed the file: skill-card.md\n- No functional changes to the skill itself\n- Documentation and usage remain unchanged\n\nv1.11.2 | 2026-06-24T12:30:59.715Z | auto\n\n- Removed file: skill-card.md\n- No user-facing changes to functionality or documentation in SKILL.md\n- No new features or fixes introduced in this release\n\nv1.11.0 | 2026-06-10T18:29:48.594Z | auto\n\n- Removed the file: skill-card.md\n- No changes to commands or documented functionality\n- Internal documentation cleanup only; user experience remains unchanged\n\nv1.10.1 | 2026-06-05T15:02:42.968Z | auto\n\n- Removed the file: skill-card.md\n- No changes were made to the SKILL.md content.\n- No user-facing features added or modified.\n\nv1.10.0 | 2026-06-03T13:35:43.615Z | auto\n\n- Updates `aoe list --json` output to include `command`, `created_at`, and `workspace_repos` fields, with clarifications on when fields are included.\n- Documents that live session status is not present in `list --json`; recommends `aoe status --json` or `aoe session capture --json` for status.\n- The sample JSON structures and documentation for `aoe status --json` are updated (e.g., separate error count, simplified session list).\n- Removes the file `skill-card.md`.\n\nv1.9.5 | 2026-05-29T10:37:32.235Z | auto\n\nNo visible changes since the previous version.\n\n- No updates detected in SKILL.md or other files.\n- Functionality, usage, and documentation remain unchanged.\n\nv1.9.4 | 2026-05-28T21:58:09.400Z | auto\n\n- Removed the file: skill-card.md.  \n- No other changes to commands, documentation, or functionality.\n- No breaking changes for users.\n\nv1.9.3 | 2026-05-27T12:58:53.836Z | auto\n\n- Updated the homepage URL in metadata to point to https://github.com/agent-of-empires/agent-of-empires.\n- No other content or command changes.\n\nv1.9.2 | 2026-05-26T19:22:54.954Z | auto\n\nVersion 1.9.2 of the aoe skill\n\n- No file changes detected in this release.\n- Documentation and usage details remain unchanged.\n- All commands, workflows, and concepts are consistent with the previous version.\n\nv1.9.1 | 2026-05-26T17:19:13.301Z | auto\n\nNo visible changes detected in this version.\n\n- No modifications were made to the skill’s documentation or command reference.\n- Functional and workflow details remain identical to the previous version.\n\nv1.9.0 | 2026-05-25T01:41:47.554Z | auto\n\nNo changes detected in this version.\n\n- Version 1.9.0 introduces no updates to files or documentation.\n- Functionality and documentation remain unchanged from the previous release.\n\nv1.8.1 | 2026-05-22T16:02:13.101Z | auto\n\nNo changes detected in this version.\n\n- Documentation and functionality remain unchanged from the previous release.\n\nv1.8.0 | 2026-05-22T14:42:06.761Z | auto\n\nNo visible changes detected in this version.\n\n- The SKILL.md file remains unchanged from the previous release.\n- No new features, fixes, or documentation updates are present in version 1.8.0.\n\nv1.7.1 | 2026-05-19T10:02:26.926Z | auto\n\nVersion 1.7.1 of the aoe skill\n\n- No file changes detected; the skill's functionality and documentation remain unchanged from the previous version.\n\nv1.7.0 | 2026-05-14T18:05:24.940Z | auto\n\nNo user-visible changes in this release.\n\n- Version updated to 1.7.0\n- No changes to documentation or features detected\n\nv1.6.2 | 2026-05-11T23:18:42.357Z | auto\n\nNo changes detected in this version.\n\n- Version 1.6.2 introduces no updates or modifications to the skill content or files.\n\nv1.6.1 | 2026-05-09T14:37:34.120Z | auto\n\nNo changes detected in this version.\n\n- No file or documentation updates were made in version 1.6.1.\n- Skill functionality and documentation remain unchanged.\n\nv1.6.0 | 2026-05-09T13:36:10.851Z | auto\n\nNo detectable changes from the previous version.\n\n- Version 1.6.0 shows no file or documentation changes.\n- Functionality, usage, and documentation remain exactly as in the prior release.\n\nv1.5.2 | 2026-05-05T01:27:57.589Z | auto\n\nVersion 1.5.2\n\n- No file changes detected in this release.\n- All commands, workflows, and documentation remain unchanged.\n\nv1.5.1 | 2026-05-04T15:06:46.205Z | auto\n\n- No changes detected from the previous version.\n- Documentation and feature set remain unchanged.\n\nv1.5.0 | 2026-04-29T14:30:48.029Z | auto\n\nVersion 1.5.0 of the aoe skill\n\n- No file changes detected in this release.\n- Documentation and usage instructions remain unchanged.\n\nv1.4.6 | 2026-04-24T08:21:29.344Z | auto\n\nNo changes detected in this version.\n\n- No file or documentation updates.\n- Behavior and features remain unchanged from the previous release.\n\nv1.4.5 | 2026-04-18T10:31:04.852Z | auto\n\nNo changes detected in this version.\n\n- Version 1.4.5 is functionally identical to the previous release.\n- No files were changed, and documentation remains the same.\n- There are no new features, bugfixes, or updates in this release.\n\nv1.4.4 | 2026-04-17T14:11:34.613Z | auto\n\nNo user-facing changes in this release.\n\n- Version bump to 1.4.4 with no documentation or functional updates.\n\nv1.4.3 | 2026-04-16T13:29:16.017Z | auto\n\nNo changes detected in this release.\n\n- Version 1.4.3 contains no updates to code or documentation.\n\nv1.4.2 | 2026-04-15T20:13:47.869Z | auto\n\nVersion 1.4.2 of the aoe skill\n\n- No file changes were detected in this release.\n- Documentation and usage details remain unchanged from the previous version.\n\nv1.4.1 | 2026-04-15T18:15:08.083Z | auto\n\nNo user-visible changes in this release.\n\n- No changes detected in documentation or functionality.\n- Version incremented to 1.4.1.\n\nv1.4.0 | 2026-04-15T16:12:18.476Z | auto\n\n- Removed the version field from the SKILL.md frontmatter.\n- No functional or command changes to the skill's description or usage.\n\nv1.3.0 | 2026-04-14T20:44:33.736Z | auto\n\nNo file changes detected between versions 0.15.1 and 1.3.0.\n\n- Version bumped to 1.3.0 with no content changes.\n- No updates to commands, documentation, or features.\n\nv1.2.0 | 2026-04-13T15:27:19.223Z | auto\n\nNo file changes detected.\n\n- Version incremented from 0.15.1 to 1.2.0 with no other modifications.\n- All documentation, commands, features, and descriptions remain unchanged.\n\nv1.1.0 | 2026-04-06T14:51:09.500Z | auto\n\nNo changes detected for version 1.1.0.\n\n- The skill contents and documentation remain unchanged from the previous release.\n\nv1.0.2 | 2026-04-03T10:10:18.988Z | auto\n\nNo changes detected in this release.\n\n- There were no file or documentation changes between the previous and current version.\n\nv1.0.1 | 2026-03-31T15:45:18.421Z | auto\n\nNo user-visible changes in this release.\n\n- Version bump from 0.15.1 to 1.0.1, no other updates detected.\n- Documentation, commands, and usage remain unchanged.\n\nArchive index:\n\nArchive v1.19.0: 3 files, 4465 bytes\n\nFiles: skill-card.md (1709b), SKILL.md (8338b), _meta.json (123b)\n\nFile v1.19.0:SKILL.md\n\n---\nname: aoe\ndescription: Manage AI coding agent sessions via Agent of Empires (aoe)\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - aoe\n        - tmux\n    homepage: https://github.com/agent-of-empires/agent-of-empires\n---\n\n# Agent of Empires (aoe) Skill\n\nUse `aoe` to create, manage, and monitor AI coding agent sessions (Claude Code, Codex, OpenCode, etc.) in tmux. Prefer `aoe` over raw `tmux` commands for agent management.\n\n## When to use this skill\n\n- Launching one or more AI coding agents on project directories\n- Monitoring agent progress (waiting vs running vs idle)\n- Capturing agent output for review\n- Organizing agents into groups or profiles\n- Setting up parallel worktree-based development\n\nDo NOT use this skill for general tmux window/pane management unrelated to coding agents.\n\n## Core concepts\n\n- **Session**: An agent process running in a tmux session. Each session has an ID, title, tool (e.g. `claude`), and project path.\n- **Group**: A named folder for organizing sessions (supports nesting with `/`, e.g. `backend/api`).\n- **Profile**: A separate workspace with its own sessions and config. Use `-p <name>` globally or set `AGENT_OF_EMPIRES_PROFILE`.\n- **Status**: One of `running`, `waiting`, `idle`, `stopped`, `error`, `starting`, `unknown`.\n\n## Command reference\n\n### Adding sessions\n\n```bash\n# Add a session for the current directory\naoe add . -t \"my feature\"\n\n# Add with group, launch immediately\naoe add /path/to/repo -t \"API work\" -g backend -l\n\n# Add with specific tool\naoe add . -t \"codex session\" -c codex\n\n# Add in a git worktree (parallel branch)\naoe add . -t \"fix-123\" -w fix/issue-123 -l\n\n# Add in Docker sandbox\naoe add . -t \"sandboxed\" -s -l\n\n# Add as sub-session of another\naoe add . -t \"sub task\" -P <parent-id>\n\n# Enable YOLO mode (skip permission prompts)\naoe add . -t \"yolo\" -y -l\n```\n\n### Listing sessions\n\n```bash\n# Human-readable list\naoe list\n\n# JSON output for parsing\naoe list --json\n\n# List across all profiles\naoe list --all\n\n# Skip trashed and archived rows (default is every persisted session)\naoe list --json --state=live\n```\n\n**JSON output shape** (`aoe list --json`):\n```json\n[\n  {\n    \"id\": \"a1b2c3d4-...\",\n    \"title\": \"my feature\",\n    \"path\": \"/home/user/project\",\n    \"group\": \"backend\",\n    \"tool\": \"claude\",\n    \"command\": \"claude\",\n    \"profile\": \"default\",\n    \"state\": \"live\",\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"workspace_repos\": []\n  }\n]\n```\n\n`command` is omitted when empty; `worktree` appears only for worktree-backed sessions. `state` is `live`, `archived`, or `trashed`; `trashed_at` and `archived_at` are set independently, and trashing leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, but they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session (`aoe send`, and `aoe session restart` when it sends its wake message), while `trashed_at` is cleared only by `aoe session restore`. Key off `state` rather than caching a timestamp. A trashed session stays in the listing and keeps its title, so check `state` before treating a row as a live session. `list --json` does not include live status; use `aoe status --json` or `aoe session capture --json` for that.\n\n`snoozed_until` and `pinned_at` round out the four state timestamps the REST API exposes: `pinned_at` appears whenever the session is pinned for the web sidebar, while `snoozed_until` appears only while the snooze is still active (the API's own gate), so an expired deadline omits the key instead of advertising a snooze that already ended. Both are independent of `state`, and neither key appears on a row carrying neither marker. `snoozed_until` also clears readily, more often than its siblings: waking the session (`aoe send`), archiving, favoriting, unsnoozing, or pinning all remove it on the next read, so treat a missing key as no active snooze rather than a listing gap.\n\n### Session lifecycle\n\n```bash\naoe session start <id-or-title>\naoe session stop <id-or-title>\naoe session restart <id-or-title>\naoe session attach <id-or-title>   # interactive attach\n```\n\n### Inspecting sessions\n\n```bash\n# Show session metadata\naoe session show <id-or-title> --json\n\n# Capture tmux pane content (key for monitoring)\naoe session capture <id-or-title> --json\naoe session capture <id-or-title> -n 100 --strip-ansi\naoe session capture <id-or-title>   # plain text, good for piping\n\n# Quick status summary\naoe status --json\naoe status -q   # just the waiting count (for scripting)\n```\n\n**JSON output shape** (`aoe session capture --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"status\": \"waiting\",\n  \"tool\": \"claude\",\n  \"content\": \"... pane text ...\",\n  \"lines\": 50\n}\n```\n\n**JSON output shape** (`aoe session show --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"path\": \"/home/user/project\",\n  \"group\": \"backend\",\n  \"tool\": \"claude\",\n  \"command\": \"claude\",\n  \"status\": \"running\",\n  \"state\": \"live\",\n  \"profile\": \"default\"\n}\n```\n\n`state` is `live`, `archived`, or `trashed`, the same vocabulary `aoe list --json` uses; `trashed_at` and `archived_at` are set independently, and trashing deliberately leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, and they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session, which means `aoe send` and `aoe session restart` when it sends its wake message (with `session.restart_wake_message` set to the empty string it does not send one, and the archive survives the restart). `trashed_at` is cleared only by `aoe session restore`. Read the current `state` rather than caching a timestamp; `status` is the pane's live status and does not carry it, since an archived session can still be running.\n\nThe same two keys apply here as in `aoe list --json`: `pinned_at` whenever the session is pinned for the web sidebar, `snoozed_until` only while the snooze is still active.\n\n**JSON output shape** (`aoe status --json`):\n```json\n{\n  \"waiting\": 1,\n  \"running\": 2,\n  \"idle\": 1,\n  \"stopped\": 1,\n  \"error\": 0,\n  \"total\": 5\n}\n```\n\n### Auto-detection (inside a tmux pane)\n\nWhen called from within an aoe-managed tmux session, identifier can be omitted:\n\n```bash\naoe session show          # auto-detects current session\naoe session capture       # auto-detects current session\naoe session current --json\n```\n\n### Renaming and organizing\n\n```bash\naoe session rename <id> -t \"new title\"\naoe session rename <id> -g \"new/group\"\n\naoe group create mygroup\naoe group move <id-or-title> mygroup\naoe group list --json\naoe group delete mygroup --force\n```\n\n### Profiles\n\n```bash\naoe profile list\naoe profile create staging\naoe profile delete staging\naoe profile default staging   # set default\naoe -p staging list            # use inline\n```\n\n### Worktrees\n\n```bash\naoe worktree list\naoe worktree info <id-or-title>\naoe worktree cleanup -f\n```\n\n### Removing sessions\n\n```bash\naoe remove <id-or-title>\naoe remove <id-or-title> --delete-worktree --force\n```\n\n## Workflow patterns\n\n### Single agent\n\n```bash\naoe add /path/to/repo -t \"feature X\" -l\n# ... wait ...\naoe session capture \"feature X\" --json\n```\n\n### Parallel worktree agents\n\n```bash\naoe add . -t \"issue-100\" -w fix/issue-100 -l\naoe add . -t \"issue-101\" -w fix/issue-101 -l\naoe add . -t \"issue-102\" -w fix/issue-102 -l\naoe status --json   # check all at once\n```\n\n### Monitoring loop\n\nPoll all sessions until none are running:\n\n```bash\nwhile true; do\n  status=$(aoe status --json)\n  waiting=$(echo \"$status\" | jq '.waiting')\n  running=$(echo \"$status\" | jq '.running')\n  if [ \"$running\" -eq 0 ] && [ \"$waiting\" -eq 0 ]; then\n    echo \"All agents finished\"\n    break\n  fi\n  echo \"Running: $running, Waiting: $waiting\"\n  sleep 30\ndone\n```\n\n### Capture and review\n\n```bash\nfor id in $(aoe list --json | jq -r '.[].id'); do\n  echo \"=== $id ===\"\n  aoe session capture \"$id\" -n 100 --strip-ansi\n  echo\ndone\n```\n\n### Group operations via TUI\n\nGroups are primarily managed through the `aoe` TUI (run `aoe` with no arguments). The TUI supports bulk start/stop/restart on groups. Use CLI commands above for scripted workflows.\n\nFile v1.19.0:_meta.json\n\n{\n  \"ownerId\": \"kn7ea09b4njxwnx7954yr02fa982sz9a\",\n  \"slug\": \"aoe\",\n  \"version\": \"1.19.0\",\n  \"publishedAt\": 1791471633768\n}\n\nFile v1.19.0:skill-card.md\n\n## Description:\n\nManage AI coding agent sessions with Agent of Empires (aoe).\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[njbrake](https://clawhub.ai/user/njbrake)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers use this skill to launch, organize, monitor, and review coding-agent sessions, including parallel worktree sessions.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: YOLO mode bypasses normal permission prompts for coding agents.\n\nMitigation: Prefer normal prompts and sandboxed sessions; require explicit human confirmation before using YOLO mode.\n\nRisk: Force deletion and cleanup commands can remove sessions, worktrees, groups, or profiles.\n\nMitigation: Inspect command targets and affected sessions or worktrees first; require explicit human confirmation for --force, --delete-worktree, cleanup, and profile deletion.\n\n## Reference(s):\n\n- [Agent of Empires project homepage](https://github.com/agent-of-empires/agent-of-empires)\n- [Agent of Empires on ClawHub](https://clawhub.ai/njbrake/skills/aoe)\n\n## Skill Output:\n\n**Output Type(s):** [Shell commands, Guidance, Configuration instructions]\n\n**Output Format:** [Markdown with shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include session status or captured agent output when requested.]\n\n## Skill Version(s):\n\n1.19.0 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.18.0: 3 files, 4465 bytes\n\nFiles: skill-card.md (1655b), SKILL.md (8338b), _meta.json (123b)\n\nFile v1.18.0:SKILL.md\n\n---\nname: aoe\ndescription: Manage AI coding agent sessions via Agent of Empires (aoe)\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - aoe\n        - tmux\n    homepage: https://github.com/agent-of-empires/agent-of-empires\n---\n\n# Agent of Empires (aoe) Skill\n\nUse `aoe` to create, manage, and monitor AI coding agent sessions (Claude Code, Codex, OpenCode, etc.) in tmux. Prefer `aoe` over raw `tmux` commands for agent management.\n\n## When to use this skill\n\n- Launching one or more AI coding agents on project directories\n- Monitoring agent progress (waiting vs running vs idle)\n- Capturing agent output for review\n- Organizing agents into groups or profiles\n- Setting up parallel worktree-based development\n\nDo NOT use this skill for general tmux window/pane management unrelated to coding agents.\n\n## Core concepts\n\n- **Session**: An agent process running in a tmux session. Each session has an ID, title, tool (e.g. `claude`), and project path.\n- **Group**: A named folder for organizing sessions (supports nesting with `/`, e.g. `backend/api`).\n- **Profile**: A separate workspace with its own sessions and config. Use `-p <name>` globally or set `AGENT_OF_EMPIRES_PROFILE`.\n- **Status**: One of `running`, `waiting`, `idle`, `stopped`, `error`, `starting`, `unknown`.\n\n## Command reference\n\n### Adding sessions\n\n```bash\n# Add a session for the current directory\naoe add . -t \"my feature\"\n\n# Add with group, launch immediately\naoe add /path/to/repo -t \"API work\" -g backend -l\n\n# Add with specific tool\naoe add . -t \"codex session\" -c codex\n\n# Add in a git worktree (parallel branch)\naoe add . -t \"fix-123\" -w fix/issue-123 -l\n\n# Add in Docker sandbox\naoe add . -t \"sandboxed\" -s -l\n\n# Add as sub-session of another\naoe add . -t \"sub task\" -P <parent-id>\n\n# Enable YOLO mode (skip permission prompts)\naoe add . -t \"yolo\" -y -l\n```\n\n### Listing sessions\n\n```bash\n# Human-readable list\naoe list\n\n# JSON output for parsing\naoe list --json\n\n# List across all profiles\naoe list --all\n\n# Skip trashed and archived rows (default is every persisted session)\naoe list --json --state=live\n```\n\n**JSON output shape** (`aoe list --json`):\n```json\n[\n  {\n    \"id\": \"a1b2c3d4-...\",\n    \"title\": \"my feature\",\n    \"path\": \"/home/user/project\",\n    \"group\": \"backend\",\n    \"tool\": \"claude\",\n    \"command\": \"claude\",\n    \"profile\": \"default\",\n    \"state\": \"live\",\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"workspace_repos\": []\n  }\n]\n```\n\n`command` is omitted when empty; `worktree` appears only for worktree-backed sessions. `state` is `live`, `archived`, or `trashed`; `trashed_at` and `archived_at` are set independently, and trashing leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, but they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session (`aoe send`, and `aoe session restart` when it sends its wake message), while `trashed_at` is cleared only by `aoe session restore`. Key off `state` rather than caching a timestamp. A trashed session stays in the listing and keeps its title, so check `state` before treating a row as a live session. `list --json` does not include live status; use `aoe status --json` or `aoe session capture --json` for that.\n\n`snoozed_until` and `pinned_at` round out the four state timestamps the REST API exposes: `pinned_at` appears whenever the session is pinned for the web sidebar, while `snoozed_until` appears only while the snooze is still active (the API's own gate), so an expired deadline omits the key instead of advertising a snooze that already ended. Both are independent of `state`, and neither key appears on a row carrying neither marker. `snoozed_until` also clears readily, more often than its siblings: waking the session (`aoe send`), archiving, favoriting, unsnoozing, or pinning all remove it on the next read, so treat a missing key as no active snooze rather than a listing gap.\n\n### Session lifecycle\n\n```bash\naoe session start <id-or-title>\naoe session stop <id-or-title>\naoe session restart <id-or-title>\naoe session attach <id-or-title>   # interactive attach\n```\n\n### Inspecting sessions\n\n```bash\n# Show session metadata\naoe session show <id-or-title> --json\n\n# Capture tmux pane content (key for monitoring)\naoe session capture <id-or-title> --json\naoe session capture <id-or-title> -n 100 --strip-ansi\naoe session capture <id-or-title>   # plain text, good for piping\n\n# Quick status summary\naoe status --json\naoe status -q   # just the waiting count (for scripting)\n```\n\n**JSON output shape** (`aoe session capture --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"status\": \"waiting\",\n  \"tool\": \"claude\",\n  \"content\": \"... pane text ...\",\n  \"lines\": 50\n}\n```\n\n**JSON output shape** (`aoe session show --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"path\": \"/home/user/project\",\n  \"group\": \"backend\",\n  \"tool\": \"claude\",\n  \"command\": \"claude\",\n  \"status\": \"running\",\n  \"state\": \"live\",\n  \"profile\": \"default\"\n}\n```\n\n`state` is `live`, `archived`, or `trashed`, the same vocabulary `aoe list --json` uses; `trashed_at` and `archived_at` are set independently, and trashing deliberately leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, and they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session, which means `aoe send` and `aoe session restart` when it sends its wake message (with `session.restart_wake_message` set to the empty string it does not send one, and the archive survives the restart). `trashed_at` is cleared only by `aoe session restore`. Read the current `state` rather than caching a timestamp; `status` is the pane's live status and does not carry it, since an archived session can still be running.\n\nThe same two keys apply here as in `aoe list --json`: `pinned_at` whenever the session is pinned for the web sidebar, `snoozed_until` only while the snooze is still active.\n\n**JSON output shape** (`aoe status --json`):\n```json\n{\n  \"waiting\": 1,\n  \"running\": 2,\n  \"idle\": 1,\n  \"stopped\": 1,\n  \"error\": 0,\n  \"total\": 5\n}\n```\n\n### Auto-detection (inside a tmux pane)\n\nWhen called from within an aoe-managed tmux session, identifier can be omitted:\n\n```bash\naoe session show          # auto-detects current session\naoe session capture       # auto-detects current session\naoe session current --json\n```\n\n### Renaming and organizing\n\n```bash\naoe session rename <id> -t \"new title\"\naoe session rename <id> -g \"new/group\"\n\naoe group create mygroup\naoe group move <id-or-title> mygroup\naoe group list --json\naoe group delete mygroup --force\n```\n\n### Profiles\n\n```bash\naoe profile list\naoe profile create staging\naoe profile delete staging\naoe profile default staging   # set default\naoe -p staging list            # use inline\n```\n\n### Worktrees\n\n```bash\naoe worktree list\naoe worktree info <id-or-title>\naoe worktree cleanup -f\n```\n\n### Removing sessions\n\n```bash\naoe remove <id-or-title>\naoe remove <id-or-title> --delete-worktree --force\n```\n\n## Workflow patterns\n\n### Single agent\n\n```bash\naoe add /path/to/repo -t \"feature X\" -l\n# ... wait ...\naoe session capture \"feature X\" --json\n```\n\n### Parallel worktree agents\n\n```bash\naoe add . -t \"issue-100\" -w fix/issue-100 -l\naoe add . -t \"issue-101\" -w fix/issue-101 -l\naoe add . -t \"issue-102\" -w fix/issue-102 -l\naoe status --json   # check all at once\n```\n\n### Monitoring loop\n\nPoll all sessions until none are running:\n\n```bash\nwhile true; do\n  status=$(aoe status --json)\n  waiting=$(echo \"$status\" | jq '.waiting')\n  running=$(echo \"$status\" | jq '.running')\n  if [ \"$running\" -eq 0 ] && [ \"$waiting\" -eq 0 ]; then\n    echo \"All agents finished\"\n    break\n  fi\n  echo \"Running: $running, Waiting: $waiting\"\n  sleep 30\ndone\n```\n\n### Capture and review\n\n```bash\nfor id in $(aoe list --json | jq -r '.[].id'); do\n  echo \"=== $id ===\"\n  aoe session capture \"$id\" -n 100 --strip-ansi\n  echo\ndone\n```\n\n### Group operations via TUI\n\nGroups are primarily managed through the `aoe` TUI (run `aoe` with no arguments). The TUI supports bulk start/stop/restart on groups. Use CLI commands above for scripted workflows.\n\nFile v1.18.0:_meta.json\n\n{\n  \"ownerId\": \"kn7ea09b4njxwnx7954yr02fa982sz9a\",\n  \"slug\": \"aoe\",\n  \"version\": \"1.18.0\",\n  \"publishedAt\": 1790798114679\n}\n\nFile v1.18.0:skill-card.md\n\n## Description:\n\nManage AI coding agent sessions via Agent of Empires (aoe).\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[njbrake](https://clawhub.ai/user/njbrake)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers use this skill to launch, monitor, and organize local AI coding agent sessions, including parallel worktree sessions.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: YOLO mode bypasses agent permission prompts.\n\nMitigation: Avoid YOLO mode unless you understand and accept the reduced safeguards.\n\nRisk: Forced session or worktree deletion can remove unintended work.\n\nMitigation: Verify the target before using force or delete-worktree options.\n\nRisk: Bulk pane capture can expose secrets or confidential work.\n\nMitigation: Avoid bulk capture when session output may contain sensitive information.\n\n## Reference(s):\n\n- [Agent of Empires project](https://github.com/agent-of-empires/agent-of-empires)\n- [Agent of Empires on ClawHub](https://clawhub.ai/njbrake/skills/aoe)\n\n## Skill Output:\n\n**Output Type(s):** [Shell commands, Guidance]\n\n**Output Format:** [Markdown with bash examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Includes examples of JSON session and status output; requires aoe and tmux.]\n\n## Skill Version(s):\n\n1.18.0 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.17.2: 3 files, 4506 bytes\n\nFiles: skill-card.md (1749b), SKILL.md (8338b), _meta.json (123b)\n\nFile v1.17.2:SKILL.md\n\n---\nname: aoe\ndescription: Manage AI coding agent sessions via Agent of Empires (aoe)\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - aoe\n        - tmux\n    homepage: https://github.com/agent-of-empires/agent-of-empires\n---\n\n# Agent of Empires (aoe) Skill\n\nUse `aoe` to create, manage, and monitor AI coding agent sessions (Claude Code, Codex, OpenCode, etc.) in tmux. Prefer `aoe` over raw `tmux` commands for agent management.\n\n## When to use this skill\n\n- Launching one or more AI coding agents on project directories\n- Monitoring agent progress (waiting vs running vs idle)\n- Capturing agent output for review\n- Organizing agents into groups or profiles\n- Setting up parallel worktree-based development\n\nDo NOT use this skill for general tmux window/pane management unrelated to coding agents.\n\n## Core concepts\n\n- **Session**: An agent process running in a tmux session. Each session has an ID, title, tool (e.g. `claude`), and project path.\n- **Group**: A named folder for organizing sessions (supports nesting with `/`, e.g. `backend/api`).\n- **Profile**: A separate workspace with its own sessions and config. Use `-p <name>` globally or set `AGENT_OF_EMPIRES_PROFILE`.\n- **Status**: One of `running`, `waiting`, `idle`, `stopped`, `error`, `starting`, `unknown`.\n\n## Command reference\n\n### Adding sessions\n\n```bash\n# Add a session for the current directory\naoe add . -t \"my feature\"\n\n# Add with group, launch immediately\naoe add /path/to/repo -t \"API work\" -g backend -l\n\n# Add with specific tool\naoe add . -t \"codex session\" -c codex\n\n# Add in a git worktree (parallel branch)\naoe add . -t \"fix-123\" -w fix/issue-123 -l\n\n# Add in Docker sandbox\naoe add . -t \"sandboxed\" -s -l\n\n# Add as sub-session of another\naoe add . -t \"sub task\" -P <parent-id>\n\n# Enable YOLO mode (skip permission prompts)\naoe add . -t \"yolo\" -y -l\n```\n\n### Listing sessions\n\n```bash\n# Human-readable list\naoe list\n\n# JSON output for parsing\naoe list --json\n\n# List across all profiles\naoe list --all\n\n# Skip trashed and archived rows (default is every persisted session)\naoe list --json --state=live\n```\n\n**JSON output shape** (`aoe list --json`):\n```json\n[\n  {\n    \"id\": \"a1b2c3d4-...\",\n    \"title\": \"my feature\",\n    \"path\": \"/home/user/project\",\n    \"group\": \"backend\",\n    \"tool\": \"claude\",\n    \"command\": \"claude\",\n    \"profile\": \"default\",\n    \"state\": \"live\",\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"workspace_repos\": []\n  }\n]\n```\n\n`command` is omitted when empty; `worktree` appears only for worktree-backed sessions. `state` is `live`, `archived`, or `trashed`; `trashed_at` and `archived_at` are set independently, and trashing leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, but they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session (`aoe send`, and `aoe session restart` when it sends its wake message), while `trashed_at` is cleared only by `aoe session restore`. Key off `state` rather than caching a timestamp. A trashed session stays in the listing and keeps its title, so check `state` before treating a row as a live session. `list --json` does not include live status; use `aoe status --json` or `aoe session capture --json` for that.\n\n`snoozed_until` and `pinned_at` round out the four state timestamps the REST API exposes: `pinned_at` appears whenever the session is pinned for the web sidebar, while `snoozed_until` appears only while the snooze is still active (the API's own gate), so an expired deadline omits the key instead of advertising a snooze that already ended. Both are independent of `state`, and neither key appears on a row carrying neither marker. `snoozed_until` also clears readily, more often than its siblings: waking the session (`aoe send`), archiving, favoriting, unsnoozing, or pinning all remove it on the next read, so treat a missing key as no active snooze rather than a listing gap.\n\n### Session lifecycle\n\n```bash\naoe session start <id-or-title>\naoe session stop <id-or-title>\naoe session restart <id-or-title>\naoe session attach <id-or-title>   # interactive attach\n```\n\n### Inspecting sessions\n\n```bash\n# Show session metadata\naoe session show <id-or-title> --json\n\n# Capture tmux pane content (key for monitoring)\naoe session capture <id-or-title> --json\naoe session capture <id-or-title> -n 100 --strip-ansi\naoe session capture <id-or-title>   # plain text, good for piping\n\n# Quick status summary\naoe status --json\naoe status -q   # just the waiting count (for scripting)\n```\n\n**JSON output shape** (`aoe session capture --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"status\": \"waiting\",\n  \"tool\": \"claude\",\n  \"content\": \"... pane text ...\",\n  \"lines\": 50\n}\n```\n\n**JSON output shape** (`aoe session show --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"path\": \"/home/user/project\",\n  \"group\": \"backend\",\n  \"tool\": \"claude\",\n  \"command\": \"claude\",\n  \"status\": \"running\",\n  \"state\": \"live\",\n  \"profile\": \"default\"\n}\n```\n\n`state` is `live`, `archived`, or `trashed`, the same vocabulary `aoe list --json` uses; `trashed_at` and `archived_at` are set independently, and trashing deliberately leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, and they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session, which means `aoe send` and `aoe session restart` when it sends its wake message (with `session.restart_wake_message` set to the empty string it does not send one, and the archive survives the restart). `trashed_at` is cleared only by `aoe session restore`. Read the current `state` rather than caching a timestamp; `status` is the pane's live status and does not carry it, since an archived session can still be running.\n\nThe same two keys apply here as in `aoe list --json`: `pinned_at` whenever the session is pinned for the web sidebar, `snoozed_until` only while the snooze is still active.\n\n**JSON output shape** (`aoe status --json`):\n```json\n{\n  \"waiting\": 1,\n  \"running\": 2,\n  \"idle\": 1,\n  \"stopped\": 1,\n  \"error\": 0,\n  \"total\": 5\n}\n```\n\n### Auto-detection (inside a tmux pane)\n\nWhen called from within an aoe-managed tmux session, identifier can be omitted:\n\n```bash\naoe session show          # auto-detects current session\naoe session capture       # auto-detects current session\naoe session current --json\n```\n\n### Renaming and organizing\n\n```bash\naoe session rename <id> -t \"new title\"\naoe session rename <id> -g \"new/group\"\n\naoe group create mygroup\naoe group move <id-or-title> mygroup\naoe group list --json\naoe group delete mygroup --force\n```\n\n### Profiles\n\n```bash\naoe profile list\naoe profile create staging\naoe profile delete staging\naoe profile default staging   # set default\naoe -p staging list            # use inline\n```\n\n### Worktrees\n\n```bash\naoe worktree list\naoe worktree info <id-or-title>\naoe worktree cleanup -f\n```\n\n### Removing sessions\n\n```bash\naoe remove <id-or-title>\naoe remove <id-or-title> --delete-worktree --force\n```\n\n## Workflow patterns\n\n### Single agent\n\n```bash\naoe add /path/to/repo -t \"feature X\" -l\n# ... wait ...\naoe session capture \"feature X\" --json\n```\n\n### Parallel worktree agents\n\n```bash\naoe add . -t \"issue-100\" -w fix/issue-100 -l\naoe add . -t \"issue-101\" -w fix/issue-101 -l\naoe add . -t \"issue-102\" -w fix/issue-102 -l\naoe status --json   # check all at once\n```\n\n### Monitoring loop\n\nPoll all sessions until none are running:\n\n```bash\nwhile true; do\n  status=$(aoe status --json)\n  waiting=$(echo \"$status\" | jq '.waiting')\n  running=$(echo \"$status\" | jq '.running')\n  if [ \"$running\" -eq 0 ] && [ \"$waiting\" -eq 0 ]; then\n    echo \"All agents finished\"\n    break\n  fi\n  echo \"Running: $running, Waiting: $waiting\"\n  sleep 30\ndone\n```\n\n### Capture and review\n\n```bash\nfor id in $(aoe list --json | jq -r '.[].id'); do\n  echo \"=== $id ===\"\n  aoe session capture \"$id\" -n 100 --strip-ansi\n  echo\ndone\n```\n\n### Group operations via TUI\n\nGroups are primarily managed through the `aoe` TUI (run `aoe` with no arguments). The TUI supports bulk start/stop/restart on groups. Use CLI commands above for scripted workflows.\n\nFile v1.17.2:_meta.json\n\n{\n  \"ownerId\": \"kn7ea09b4njxwnx7954yr02fa982sz9a\",\n  \"slug\": \"aoe\",\n  \"version\": \"1.17.2\",\n  \"publishedAt\": 1790359865832\n}\n\nFile v1.17.2:skill-card.md\n\n## Description:\n\nManage AI coding agent sessions via Agent of Empires (aoe).\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[njbrake](https://clawhub.ai/user/njbrake)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers use this skill to launch, organize, and monitor AI coding agents in aoe-managed tmux sessions, including parallel worktree sessions and captured output for review.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The -y option bypasses agent approval prompts.\n\nMitigation: Avoid -y outside controlled environments; retain approval prompts for routine use.\n\nRisk: Captured tmux pane output may contain sensitive information.\n\nMitigation: Capture only selected sessions and review output before sharing or storing it.\n\nRisk: Forceful removal, worktree cleanup, or profile deletion can disrupt sessions or remove work.\n\nMitigation: Check the target session, worktree, or profile and confirm the intended effect before destructive commands.\n\n## Reference(s):\n\n- [Agent of Empires project homepage](https://github.com/agent-of-empires/agent-of-empires)\n\n## Skill Output:\n\n**Output Type(s):** [Shell commands, Guidance]\n\n**Output Format:** [Markdown with inline bash code blocks]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires aoe and tmux; includes JSON command-output examples for session inspection.]\n\n## Skill Version(s):\n\n1.17.2 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.17.1: 3 files, 4431 bytes\n\nFiles: skill-card.md (1611b), SKILL.md (8338b), _meta.json (123b)\n\nFile v1.17.1:SKILL.md\n\n---\nname: aoe\ndescription: Manage AI coding agent sessions via Agent of Empires (aoe)\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - aoe\n        - tmux\n    homepage: https://github.com/agent-of-empires/agent-of-empires\n---\n\n# Agent of Empires (aoe) Skill\n\nUse `aoe` to create, manage, and monitor AI coding agent sessions (Claude Code, Codex, OpenCode, etc.) in tmux. Prefer `aoe` over raw `tmux` commands for agent management.\n\n## When to use this skill\n\n- Launching one or more AI coding agents on project directories\n- Monitoring agent progress (waiting vs running vs idle)\n- Capturing agent output for review\n- Organizing agents into groups or profiles\n- Setting up parallel worktree-based development\n\nDo NOT use this skill for general tmux window/pane management unrelated to coding agents.\n\n## Core concepts\n\n- **Session**: An agent process running in a tmux session. Each session has an ID, title, tool (e.g. `claude`), and project path.\n- **Group**: A named folder for organizing sessions (supports nesting with `/`, e.g. `backend/api`).\n- **Profile**: A separate workspace with its own sessions and config. Use `-p <name>` globally or set `AGENT_OF_EMPIRES_PROFILE`.\n- **Status**: One of `running`, `waiting`, `idle`, `stopped`, `error`, `starting`, `unknown`.\n\n## Command reference\n\n### Adding sessions\n\n```bash\n# Add a session for the current directory\naoe add . -t \"my feature\"\n\n# Add with group, launch immediately\naoe add /path/to/repo -t \"API work\" -g backend -l\n\n# Add with specific tool\naoe add . -t \"codex session\" -c codex\n\n# Add in a git worktree (parallel branch)\naoe add . -t \"fix-123\" -w fix/issue-123 -l\n\n# Add in Docker sandbox\naoe add . -t \"sandboxed\" -s -l\n\n# Add as sub-session of another\naoe add . -t \"sub task\" -P <parent-id>\n\n# Enable YOLO mode (skip permission prompts)\naoe add . -t \"yolo\" -y -l\n```\n\n### Listing sessions\n\n```bash\n# Human-readable list\naoe list\n\n# JSON output for parsing\naoe list --json\n\n# List across all profiles\naoe list --all\n\n# Skip trashed and archived rows (default is every persisted session)\naoe list --json --state=live\n```\n\n**JSON output shape** (`aoe list --json`):\n```json\n[\n  {\n    \"id\": \"a1b2c3d4-...\",\n    \"title\": \"my feature\",\n    \"path\": \"/home/user/project\",\n    \"group\": \"backend\",\n    \"tool\": \"claude\",\n    \"command\": \"claude\",\n    \"profile\": \"default\",\n    \"state\": \"live\",\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"workspace_repos\": []\n  }\n]\n```\n\n`command` is omitted when empty; `worktree` appears only for worktree-backed sessions. `state` is `live`, `archived`, or `trashed`; `trashed_at` and `archived_at` are set independently, and trashing leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, but they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session (`aoe send`, and `aoe session restart` when it sends its wake message), while `trashed_at` is cleared only by `aoe session restore`. Key off `state` rather than caching a timestamp. A trashed session stays in the listing and keeps its title, so check `state` before treating a row as a live session. `list --json` does not include live status; use `aoe status --json` or `aoe session capture --json` for that.\n\n`snoozed_until` and `pinned_at` round out the four state timestamps the REST API exposes: `pinned_at` appears whenever the session is pinned for the web sidebar, while `snoozed_until` appears only while the snooze is still active (the API's own gate), so an expired deadline omits the key instead of advertising a snooze that already ended. Both are independent of `state`, and neither key appears on a row carrying neither marker. `snoozed_until` also clears readily, more often than its siblings: waking the session (`aoe send`), archiving, favoriting, unsnoozing, or pinning all remove it on the next read, so treat a missing key as no active snooze rather than a listing gap.\n\n### Session lifecycle\n\n```bash\naoe session start <id-or-title>\naoe session stop <id-or-title>\naoe session restart <id-or-title>\naoe session attach <id-or-title>   # interactive attach\n```\n\n### Inspecting sessions\n\n```bash\n# Show session metadata\naoe session show <id-or-title> --json\n\n# Capture tmux pane content (key for monitoring)\naoe session capture <id-or-title> --json\naoe session capture <id-or-title> -n 100 --strip-ansi\naoe session capture <id-or-title>   # plain text, good for piping\n\n# Quick status summary\naoe status --json\naoe status -q   # just the waiting count (for scripting)\n```\n\n**JSON output shape** (`aoe session capture --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"status\": \"waiting\",\n  \"tool\": \"claude\",\n  \"content\": \"... pane text ...\",\n  \"lines\": 50\n}\n```\n\n**JSON output shape** (`aoe session show --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"path\": \"/home/user/project\",\n  \"group\": \"backend\",\n  \"tool\": \"claude\",\n  \"command\": \"claude\",\n  \"status\": \"running\",\n  \"state\": \"live\",\n  \"profile\": \"default\"\n}\n```\n\n`state` is `live`, `archived`, or `trashed`, the same vocabulary `aoe list --json` uses; `trashed_at` and `archived_at` are set independently, and trashing deliberately leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, and they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session, which means `aoe send` and `aoe session restart` when it sends its wake message (with `session.restart_wake_message` set to the empty string it does not send one, and the archive survives the restart). `trashed_at` is cleared only by `aoe session restore`. Read the current `state` rather than caching a timestamp; `status` is the pane's live status and does not carry it, since an archived session can still be running.\n\nThe same two keys apply here as in `aoe list --json`: `pinned_at` whenever the session is pinned for the web sidebar, `snoozed_until` only while the snooze is still active.\n\n**JSON output shape** (`aoe status --json`):\n```json\n{\n  \"waiting\": 1,\n  \"running\": 2,\n  \"idle\": 1,\n  \"stopped\": 1,\n  \"error\": 0,\n  \"total\": 5\n}\n```\n\n### Auto-detection (inside a tmux pane)\n\nWhen called from within an aoe-managed tmux session, identifier can be omitted:\n\n```bash\naoe session show          # auto-detects current session\naoe session capture       # auto-detects current session\naoe session current --json\n```\n\n### Renaming and organizing\n\n```bash\naoe session rename <id> -t \"new title\"\naoe session rename <id> -g \"new/group\"\n\naoe group create mygroup\naoe group move <id-or-title> mygroup\naoe group list --json\naoe group delete mygroup --force\n```\n\n### Profiles\n\n```bash\naoe profile list\naoe profile create staging\naoe profile delete staging\naoe profile default staging   # set default\naoe -p staging list            # use inline\n```\n\n### Worktrees\n\n```bash\naoe worktree list\naoe worktree info <id-or-title>\naoe worktree cleanup -f\n```\n\n### Removing sessions\n\n```bash\naoe remove <id-or-title>\naoe remove <id-or-title> --delete-worktree --force\n```\n\n## Workflow patterns\n\n### Single agent\n\n```bash\naoe add /path/to/repo -t \"feature X\" -l\n# ... wait ...\naoe session capture \"feature X\" --json\n```\n\n### Parallel worktree agents\n\n```bash\naoe add . -t \"issue-100\" -w fix/issue-100 -l\naoe add . -t \"issue-101\" -w fix/issue-101 -l\naoe add . -t \"issue-102\" -w fix/issue-102 -l\naoe status --json   # check all at once\n```\n\n### Monitoring loop\n\nPoll all sessions until none are running:\n\n```bash\nwhile true; do\n  status=$(aoe status --json)\n  waiting=$(echo \"$status\" | jq '.waiting')\n  running=$(echo \"$status\" | jq '.running')\n  if [ \"$running\" -eq 0 ] && [ \"$waiting\" -eq 0 ]; then\n    echo \"All agents finished\"\n    break\n  fi\n  echo \"Running: $running, Waiting: $waiting\"\n  sleep 30\ndone\n```\n\n### Capture and review\n\n```bash\nfor id in $(aoe list --json | jq -r '.[].id'); do\n  echo \"=== $id ===\"\n  aoe session capture \"$id\" -n 100 --strip-ansi\n  echo\ndone\n```\n\n### Group operations via TUI\n\nGroups are primarily managed through the `aoe` TUI (run `aoe` with no arguments). The TUI supports bulk start/stop/restart on groups. Use CLI commands above for scripted workflows.\n\nFile v1.17.1:_meta.json\n\n{\n  \"ownerId\": \"kn7ea09b4njxwnx7954yr02fa982sz9a\",\n  \"slug\": \"aoe\",\n  \"version\": \"1.17.1\",\n  \"publishedAt\": 1790299912745\n}\n\nFile v1.17.1:skill-card.md\n\n## Description:\n\nManage AI coding agent sessions via Agent of Empires (aoe).\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[njbrake](https://clawhub.ai/user/njbrake)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers use this skill to launch, organize, monitor, and review AI coding agent sessions, including parallel worktree-based work.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: YOLO mode skips permission prompts for coding agents.\n\nMitigation: Avoid YOLO mode except in a constrained sandbox.\n\nRisk: Captured agent sessions may contain sensitive output.\n\nMitigation: Review captured session output before sharing it.\n\nRisk: Force deletion or worktree cleanup may remove needed work.\n\nMitigation: Confirm the target and save needed work before deleting sessions or cleaning up worktrees.\n\n## Reference(s):\n\n- [Agent of Empires project homepage](https://github.com/agent-of-empires/agent-of-empires)\n- [Agent of Empires on ClawHub](https://clawhub.ai/njbrake/skills/aoe)\n\n## Skill Output:\n\n**Output Type(s):** [Shell commands, Guidance]\n\n**Output Format:** [Markdown with shell commands and JSON examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires aoe and tmux.]\n\n## Skill Version(s):\n\n1.17.1 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.17.0: 3 files, 4473 bytes\n\nFiles: skill-card.md (1671b), SKILL.md (8338b), _meta.json (123b)\n\nFile v1.17.0:SKILL.md\n\n---\nname: aoe\ndescription: Manage AI coding agent sessions via Agent of Empires (aoe)\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - aoe\n        - tmux\n    homepage: https://github.com/agent-of-empires/agent-of-empires\n---\n\n# Agent of Empires (aoe) Skill\n\nUse `aoe` to create, manage, and monitor AI coding agent sessions (Claude Code, Codex, OpenCode, etc.) in tmux. Prefer `aoe` over raw `tmux` commands for agent management.\n\n## When to use this skill\n\n- Launching one or more AI coding agents on project directories\n- Monitoring agent progress (waiting vs running vs idle)\n- Capturing agent output for review\n- Organizing agents into groups or profiles\n- Setting up parallel worktree-based development\n\nDo NOT use this skill for general tmux window/pane management unrelated to coding agents.\n\n## Core concepts\n\n- **Session**: An agent process running in a tmux session. Each session has an ID, title, tool (e.g. `claude`), and project path.\n- **Group**: A named folder for organizing sessions (supports nesting with `/`, e.g. `backend/api`).\n- **Profile**: A separate workspace with its own sessions and config. Use `-p <name>` globally or set `AGENT_OF_EMPIRES_PROFILE`.\n- **Status**: One of `running`, `waiting`, `idle`, `stopped`, `error`, `starting`, `unknown`.\n\n## Command reference\n\n### Adding sessions\n\n```bash\n# Add a session for the current directory\naoe add . -t \"my feature\"\n\n# Add with group, launch immediately\naoe add /path/to/repo -t \"API work\" -g backend -l\n\n# Add with specific tool\naoe add . -t \"codex session\" -c codex\n\n# Add in a git worktree (parallel branch)\naoe add . -t \"fix-123\" -w fix/issue-123 -l\n\n# Add in Docker sandbox\naoe add . -t \"sandboxed\" -s -l\n\n# Add as sub-session of another\naoe add . -t \"sub task\" -P <parent-id>\n\n# Enable YOLO mode (skip permission prompts)\naoe add . -t \"yolo\" -y -l\n```\n\n### Listing sessions\n\n```bash\n# Human-readable list\naoe list\n\n# JSON output for parsing\naoe list --json\n\n# List across all profiles\naoe list --all\n\n# Skip trashed and archived rows (default is every persisted session)\naoe list --json --state=live\n```\n\n**JSON output shape** (`aoe list --json`):\n```json\n[\n  {\n    \"id\": \"a1b2c3d4-...\",\n    \"title\": \"my feature\",\n    \"path\": \"/home/user/project\",\n    \"group\": \"backend\",\n    \"tool\": \"claude\",\n    \"command\": \"claude\",\n    \"profile\": \"default\",\n    \"state\": \"live\",\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"workspace_repos\": []\n  }\n]\n```\n\n`command` is omitted when empty; `worktree` appears only for worktree-backed sessions. `state` is `live`, `archived`, or `trashed`; `trashed_at` and `archived_at` are set independently, and trashing leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, but they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session (`aoe send`, and `aoe session restart` when it sends its wake message), while `trashed_at` is cleared only by `aoe session restore`. Key off `state` rather than caching a timestamp. A trashed session stays in the listing and keeps its title, so check `state` before treating a row as a live session. `list --json` does not include live status; use `aoe status --json` or `aoe session capture --json` for that.\n\n`snoozed_until` and `pinned_at` round out the four state timestamps the REST API exposes: `pinned_at` appears whenever the session is pinned for the web sidebar, while `snoozed_until` appears only while the snooze is still active (the API's own gate), so an expired deadline omits the key instead of advertising a snooze that already ended. Both are independent of `state`, and neither key appears on a row carrying neither marker. `snoozed_until` also clears readily, more often than its siblings: waking the session (`aoe send`), archiving, favoriting, unsnoozing, or pinning all remove it on the next read, so treat a missing key as no active snooze rather than a listing gap.\n\n### Session lifecycle\n\n```bash\naoe session start <id-or-title>\naoe session stop <id-or-title>\naoe session restart <id-or-title>\naoe session attach <id-or-title>   # interactive attach\n```\n\n### Inspecting sessions\n\n```bash\n# Show session metadata\naoe session show <id-or-title> --json\n\n# Capture tmux pane content (key for monitoring)\naoe session capture <id-or-title> --json\naoe session capture <id-or-title> -n 100 --strip-ansi\naoe session capture <id-or-title>   # plain text, good for piping\n\n# Quick status summary\naoe status --json\naoe status -q   # just the waiting count (for scripting)\n```\n\n**JSON output shape** (`aoe session capture --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"status\": \"waiting\",\n  \"tool\": \"claude\",\n  \"content\": \"... pane text ...\",\n  \"lines\": 50\n}\n```\n\n**JSON output shape** (`aoe session show --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"path\": \"/home/user/project\",\n  \"group\": \"backend\",\n  \"tool\": \"claude\",\n  \"command\": \"claude\",\n  \"status\": \"running\",\n  \"state\": \"live\",\n  \"profile\": \"default\"\n}\n```\n\n`state` is `live`, `archived`, or `trashed`, the same vocabulary `aoe list --json` uses; `trashed_at` and `archived_at` are set independently, and trashing deliberately leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, and they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session, which means `aoe send` and `aoe session restart` when it sends its wake message (with `session.restart_wake_message` set to the empty string it does not send one, and the archive survives the restart). `trashed_at` is cleared only by `aoe session restore`. Read the current `state` rather than caching a timestamp; `status` is the pane's live status and does not carry it, since an archived session can still be running.\n\nThe same two keys apply here as in `aoe list --json`: `pinned_at` whenever the session is pinned for the web sidebar, `snoozed_until` only while the snooze is still active.\n\n**JSON output shape** (`aoe status --json`):\n```json\n{\n  \"waiting\": 1,\n  \"running\": 2,\n  \"idle\": 1,\n  \"stopped\": 1,\n  \"error\": 0,\n  \"total\": 5\n}\n```\n\n### Auto-detection (inside a tmux pane)\n\nWhen called from within an aoe-managed tmux session, identifier can be omitted:\n\n```bash\naoe session show          # auto-detects current session\naoe session capture       # auto-detects current session\naoe session current --json\n```\n\n### Renaming and organizing\n\n```bash\naoe session rename <id> -t \"new title\"\naoe session rename <id> -g \"new/group\"\n\naoe group create mygroup\naoe group move <id-or-title> mygroup\naoe group list --json\naoe group delete mygroup --force\n```\n\n### Profiles\n\n```bash\naoe profile list\naoe profile create staging\naoe profile delete staging\naoe profile default staging   # set default\naoe -p staging list            # use inline\n```\n\n### Worktrees\n\n```bash\naoe worktree list\naoe worktree info <id-or-title>\naoe worktree cleanup -f\n```\n\n### Removing sessions\n\n```bash\naoe remove <id-or-title>\naoe remove <id-or-title> --delete-worktree --force\n```\n\n## Workflow patterns\n\n### Single agent\n\n```bash\naoe add /path/to/repo -t \"feature X\" -l\n# ... wait ...\naoe session capture \"feature X\" --json\n```\n\n### Parallel worktree agents\n\n```bash\naoe add . -t \"issue-100\" -w fix/issue-100 -l\naoe add . -t \"issue-101\" -w fix/issue-101 -l\naoe add . -t \"issue-102\" -w fix/issue-102 -l\naoe status --json   # check all at once\n```\n\n### Monitoring loop\n\nPoll all sessions until none are running:\n\n```bash\nwhile true; do\n  status=$(aoe status --json)\n  waiting=$(echo \"$status\" | jq '.waiting')\n  running=$(echo \"$status\" | jq '.running')\n  if [ \"$running\" -eq 0 ] && [ \"$waiting\" -eq 0 ]; then\n    echo \"All agents finished\"\n    break\n  fi\n  echo \"Running: $running, Waiting: $waiting\"\n  sleep 30\ndone\n```\n\n### Capture and review\n\n```bash\nfor id in $(aoe list --json | jq -r '.[].id'); do\n  echo \"=== $id ===\"\n  aoe session capture \"$id\" -n 100 --strip-ansi\n  echo\ndone\n```\n\n### Group operations via TUI\n\nGroups are primarily managed through the `aoe` TUI (run `aoe` with no arguments). The TUI supports bulk start/stop/restart on groups. Use CLI commands above for scripted workflows.\n\nFile v1.17.0:_meta.json\n\n{\n  \"ownerId\": \"kn7ea09b4njxwnx7954yr02fa982sz9a\",\n  \"slug\": \"aoe\",\n  \"version\": \"1.17.0\",\n  \"publishedAt\": 1790259750425\n}\n\nFile v1.17.0:skill-card.md\n\n## Description:\n\nManage AI coding agent sessions via Agent of Empires (aoe).\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[njbrake](https://clawhub.ai/user/njbrake)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to launch, organize, monitor, and inspect AI coding agent sessions running under aoe and tmux.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: YOLO mode can skip permission prompts while launching coding agents.\n\nMitigation: Use YOLO mode only in a tightly controlled sandbox and prefer normal permission prompts for routine work.\n\nRisk: Force, delete, and worktree cleanup commands can affect local development state.\n\nMitigation: Review target sessions and worktrees before running destructive aoe commands, especially commands using force or delete options.\n\n## Reference(s):\n\n- [Agent of Empires project homepage](https://github.com/agent-of-empires/agent-of-empires)\n- [ClawHub skill page](https://clawhub.ai/njbrake/skills/aoe)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline shell commands and JSON examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires aoe and tmux for command execution.]\n\n## Skill Version(s):\n\n1.17.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.16.0: 3 files, 4608 bytes\n\nFiles: skill-card.md (1948b), SKILL.md (8338b), _meta.json (123b)\n\nFile v1.16.0:SKILL.md\n\n---\nname: aoe\ndescription: Manage AI coding agent sessions via Agent of Empires (aoe)\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - aoe\n        - tmux\n    homepage: https://github.com/agent-of-empires/agent-of-empires\n---\n\n# Agent of Empires (aoe) Skill\n\nUse `aoe` to create, manage, and monitor AI coding agent sessions (Claude Code, Codex, OpenCode, etc.) in tmux. Prefer `aoe` over raw `tmux` commands for agent management.\n\n## When to use this skill\n\n- Launching one or more AI coding agents on project directories\n- Monitoring agent progress (waiting vs running vs idle)\n- Capturing agent output for review\n- Organizing agents into groups or profiles\n- Setting up parallel worktree-based development\n\nDo NOT use this skill for general tmux window/pane management unrelated to coding agents.\n\n## Core concepts\n\n- **Session**: An agent process running in a tmux session. Each session has an ID, title, tool (e.g. `claude`), and project path.\n- **Group**: A named folder for organizing sessions (supports nesting with `/`, e.g. `backend/api`).\n- **Profile**: A separate workspace with its own sessions and config. Use `-p <name>` globally or set `AGENT_OF_EMPIRES_PROFILE`.\n- **Status**: One of `running`, `waiting`, `idle`, `stopped`, `error`, `starting`, `unknown`.\n\n## Command reference\n\n### Adding sessions\n\n```bash\n# Add a session for the current directory\naoe add . -t \"my feature\"\n\n# Add with group, launch immediately\naoe add /path/to/repo -t \"API work\" -g backend -l\n\n# Add with specific tool\naoe add . -t \"codex session\" -c codex\n\n# Add in a git worktree (parallel branch)\naoe add . -t \"fix-123\" -w fix/issue-123 -l\n\n# Add in Docker sandbox\naoe add . -t \"sandboxed\" -s -l\n\n# Add as sub-session of another\naoe add . -t \"sub task\" -P <parent-id>\n\n# Enable YOLO mode (skip permission prompts)\naoe add . -t \"yolo\" -y -l\n```\n\n### Listing sessions\n\n```bash\n# Human-readable list\naoe list\n\n# JSON output for parsing\naoe list --json\n\n# List across all profiles\naoe list --all\n\n# Skip trashed and archived rows (default is every persisted session)\naoe list --json --state=live\n```\n\n**JSON output shape** (`aoe list --json`):\n```json\n[\n  {\n    \"id\": \"a1b2c3d4-...\",\n    \"title\": \"my feature\",\n    \"path\": \"/home/user/project\",\n    \"group\": \"backend\",\n    \"tool\": \"claude\",\n    \"command\": \"claude\",\n    \"profile\": \"default\",\n    \"state\": \"live\",\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"workspace_repos\": []\n  }\n]\n```\n\n`command` is omitted when empty; `worktree` appears only for worktree-backed sessions. `state` is `live`, `archived`, or `trashed`; `trashed_at` and `archived_at` are set independently, and trashing leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, but they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session (`aoe send`, and `aoe session restart` when it sends its wake message), while `trashed_at` is cleared only by `aoe session restore`. Key off `state` rather than caching a timestamp. A trashed session stays in the listing and keeps its title, so check `state` before treating a row as a live session. `list --json` does not include live status; use `aoe status --json` or `aoe session capture --json` for that.\n\n`snoozed_until` and `pinned_at` round out the four state timestamps the REST API exposes: `pinned_at` appears whenever the session is pinned for the web sidebar, while `snoozed_until` appears only while the snooze is still active (the API's own gate), so an expired deadline omits the key instead of advertising a snooze that already ended. Both are independent of `state`, and neither key appears on a row carrying neither marker. `snoozed_until` also clears readily, more often than its siblings: waking the session (`aoe send`), archiving, favoriting, unsnoozing, or pinning all remove it on the next read, so treat a missing key as no active snooze rather than a listing gap.\n\n### Session lifecycle\n\n```bash\naoe session start <id-or-title>\naoe session stop <id-or-title>\naoe session restart <id-or-title>\naoe session attach <id-or-title>   # interactive attach\n```\n\n### Inspecting sessions\n\n```bash\n# Show session metadata\naoe session show <id-or-title> --json\n\n# Capture tmux pane content (key for monitoring)\naoe session capture <id-or-title> --json\naoe session capture <id-or-title> -n 100 --strip-ansi\naoe session capture <id-or-title>   # plain text, good for piping\n\n# Quick status summary\naoe status --json\naoe status -q   # just the waiting count (for scripting)\n```\n\n**JSON output shape** (`aoe session capture --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"status\": \"waiting\",\n  \"tool\": \"claude\",\n  \"content\": \"... pane text ...\",\n  \"lines\": 50\n}\n```\n\n**JSON output shape** (`aoe session show --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"path\": \"/home/user/project\",\n  \"group\": \"backend\",\n  \"tool\": \"claude\",\n  \"command\": \"claude\",\n  \"status\": \"running\",\n  \"state\": \"live\",\n  \"profile\": \"default\"\n}\n```\n\n`state` is `live`, `archived`, or `trashed`, the same vocabulary `aoe list --json` uses; `trashed_at` and `archived_at` are set independently, and trashing deliberately leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, and they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session, which means `aoe send` and `aoe session restart` when it sends its wake message (with `session.restart_wake_message` set to the empty string it does not send one, and the archive survives the restart). `trashed_at` is cleared only by `aoe session restore`. Read the current `state` rather than caching a timestamp; `status` is the pane's live status and does not carry it, since an archived session can still be running.\n\nThe same two keys apply here as in `aoe list --json`: `pinned_at` whenever the session is pinned for the web sidebar, `snoozed_until` only while the snooze is still active.\n\n**JSON output shape** (`aoe status --json`):\n```json\n{\n  \"waiting\": 1,\n  \"running\": 2,\n  \"idle\": 1,\n  \"stopped\": 1,\n  \"error\": 0,\n  \"total\": 5\n}\n```\n\n### Auto-detection (inside a tmux pane)\n\nWhen called from within an aoe-managed tmux session, identifier can be omitted:\n\n```bash\naoe session show          # auto-detects current session\naoe session capture       # auto-detects current session\naoe session current --json\n```\n\n### Renaming and organizing\n\n```bash\naoe session rename <id> -t \"new title\"\naoe session rename <id> -g \"new/group\"\n\naoe group create mygroup\naoe group move <id-or-title> mygroup\naoe group list --json\naoe group delete mygroup --force\n```\n\n### Profiles\n\n```bash\naoe profile list\naoe profile create staging\naoe profile delete staging\naoe profile default staging   # set default\naoe -p staging list            # use inline\n```\n\n### Worktrees\n\n```bash\naoe worktree list\naoe worktree info <id-or-title>\naoe worktree cleanup -f\n```\n\n### Removing sessions\n\n```bash\naoe remove <id-or-title>\naoe remove <id-or-title> --delete-worktree --force\n```\n\n## Workflow patterns\n\n### Single agent\n\n```bash\naoe add /path/to/repo -t \"feature X\" -l\n# ... wait ...\naoe session capture \"feature X\" --json\n```\n\n### Parallel worktree agents\n\n```bash\naoe add . -t \"issue-100\" -w fix/issue-100 -l\naoe add . -t \"issue-101\" -w fix/issue-101 -l\naoe add . -t \"issue-102\" -w fix/issue-102 -l\naoe status --json   # check all at once\n```\n\n### Monitoring loop\n\nPoll all sessions until none are running:\n\n```bash\nwhile true; do\n  status=$(aoe status --json)\n  waiting=$(echo \"$status\" | jq '.waiting')\n  running=$(echo \"$status\" | jq '.running')\n  if [ \"$running\" -eq 0 ] && [ \"$waiting\" -eq 0 ]; then\n    echo \"All agents finished\"\n    break\n  fi\n  echo \"Running: $running, Waiting: $waiting\"\n  sleep 30\ndone\n```\n\n### Capture and review\n\n```bash\nfor id in $(aoe list --json | jq -r '.[].id'); do\n  echo \"=== $id ===\"\n  aoe session capture \"$id\" -n 100 --strip-ansi\n  echo\ndone\n```\n\n### Group operations via TUI\n\nGroups are primarily managed through the `aoe` TUI (run `aoe` with no arguments). The TUI supports bulk start/stop/restart on groups. Use CLI commands above for scripted workflows.\n\nFile v1.16.0:_meta.json\n\n{\n  \"ownerId\": \"kn7ea09b4njxwnx7954yr02fa982sz9a\",\n  \"slug\": \"aoe\",\n  \"version\": \"1.16.0\",\n  \"publishedAt\": 1789045960546\n}\n\nFile v1.16.0:skill-card.md\n\n## Description:\n\nManage AI coding agent sessions via Agent of Empires (aoe).\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[njbrake](https://clawhub.ai/user/njbrake)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineering teams use this skill to launch, organize, monitor, capture output from, and manage multiple AI coding agent sessions in tmux via the aoe CLI.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: YOLO mode can skip permission prompts for coding agents.\n\nMitigation: Use YOLO mode only when the agent is tightly sandboxed and the repository or workspace can tolerate automated changes.\n\nRisk: Force-delete worktree commands can remove workspace state or uncommitted work.\n\nMitigation: Verify the exact target, check for uncommitted work, and proceed only when losing that worktree is acceptable.\n\nRisk: The skill may be used against real repositories managed by aoe.\n\nMitigation: Review the skill before installing it for production repositories and scan changes produced by managed agents before merging.\n\n## Reference(s):\n\n- [Agent of Empires project homepage](https://github.com/agent-of-empires/agent-of-empires)\n- [ClawHub skill page](https://clawhub.ai/njbrake/skills/aoe)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with bash command examples and JSON output shapes]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires the aoe and tmux binaries; some workflows create, manage, or delete git worktrees.]\n\n## Skill Version(s):\n\n1.16.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.15.3: 3 files, 4501 bytes\n\nFiles: skill-card.md (1688b), SKILL.md (8338b), _meta.json (123b)\n\nFile v1.15.3:SKILL.md\n\n---\nname: aoe\ndescription: Manage AI coding agent sessions via Agent of Empires (aoe)\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - aoe\n        - tmux\n    homepage: https://github.com/agent-of-empires/agent-of-empires\n---\n\n# Agent of Empires (aoe) Skill\n\nUse `aoe` to create, manage, and monitor AI coding agent sessions (Claude Code, Codex, OpenCode, etc.) in tmux. Prefer `aoe` over raw `tmux` commands for agent management.\n\n## When to use this skill\n\n- Launching one or more AI coding agents on project directories\n- Monitoring agent progress (waiting vs running vs idle)\n- Capturing agent output for review\n- Organizing agents into groups or profiles\n- Setting up parallel worktree-based development\n\nDo NOT use this skill for general tmux window/pane management unrelated to coding agents.\n\n## Core concepts\n\n- **Session**: An agent process running in a tmux session. Each session has an ID, title, tool (e.g. `claude`), and project path.\n- **Group**: A named folder for organizing sessions (supports nesting with `/`, e.g. `backend/api`).\n- **Profile**: A separate workspace with its own sessions and config. Use `-p <name>` globally or set `AGENT_OF_EMPIRES_PROFILE`.\n- **Status**: One of `running`, `waiting`, `idle`, `stopped`, `error`, `starting`, `unknown`.\n\n## Command reference\n\n### Adding sessions\n\n```bash\n# Add a session for the current directory\naoe add . -t \"my feature\"\n\n# Add with group, launch immediately\naoe add /path/to/repo -t \"API work\" -g backend -l\n\n# Add with specific tool\naoe add . -t \"codex session\" -c codex\n\n# Add in a git worktree (parallel branch)\naoe add . -t \"fix-123\" -w fix/issue-123 -l\n\n# Add in Docker sandbox\naoe add . -t \"sandboxed\" -s -l\n\n# Add as sub-session of another\naoe add . -t \"sub task\" -P <parent-id>\n\n# Enable YOLO mode (skip permission prompts)\naoe add . -t \"yolo\" -y -l\n```\n\n### Listing sessions\n\n```bash\n# Human-readable list\naoe list\n\n# JSON output for parsing\naoe list --json\n\n# List across all profiles\naoe list --all\n\n# Skip trashed and archived rows (default is every persisted session)\naoe list --json --state=live\n```\n\n**JSON output shape** (`aoe list --json`):\n```json\n[\n  {\n    \"id\": \"a1b2c3d4-...\",\n    \"title\": \"my feature\",\n    \"path\": \"/home/user/project\",\n    \"group\": \"backend\",\n    \"tool\": \"claude\",\n    \"command\": \"claude\",\n    \"profile\": \"default\",\n    \"state\": \"live\",\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"workspace_repos\": []\n  }\n]\n```\n\n`command` is omitted when empty; `worktree` appears only for worktree-backed sessions. `state` is `live`, `archived`, or `trashed`; `trashed_at` and `archived_at` are set independently, and trashing leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, but they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session (`aoe send`, and `aoe session restart` when it sends its wake message), while `trashed_at` is cleared only by `aoe session restore`. Key off `state` rather than caching a timestamp. A trashed session stays in the listing and keeps its title, so check `state` before treating a row as a live session. `list --json` does not include live status; use `aoe status --json` or `aoe session capture --json` for that.\n\n`snoozed_until` and `pinned_at` round out the four state timestamps the REST API exposes: `pinned_at` appears whenever the session is pinned for the web sidebar, while `snoozed_until` appears only while the snooze is still active (the API's own gate), so an expired deadline omits the key instead of advertising a snooze that already ended. Both are independent of `state`, and neither key appears on a row carrying neither marker. `snoozed_until` also clears readily, more often than its siblings: waking the session (`aoe send`), archiving, favoriting, unsnoozing, or pinning all remove it on the next read, so treat a missing key as no active snooze rather than a listing gap.\n\n### Session lifecycle\n\n```bash\naoe session start <id-or-title>\naoe session stop <id-or-title>\naoe session restart <id-or-title>\naoe session attach <id-or-title>   # interactive attach\n```\n\n### Inspecting sessions\n\n```bash\n# Show session metadata\naoe session show <id-or-title> --json\n\n# Capture tmux pane content (key for monitoring)\naoe session capture <id-or-title> --json\naoe session capture <id-or-title> -n 100 --strip-ansi\naoe session capture <id-or-title>   # plain text, good for piping\n\n# Quick status summary\naoe status --json\naoe status -q   # just the waiting count (for scripting)\n```\n\n**JSON output shape** (`aoe session capture --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"status\": \"waiting\",\n  \"tool\": \"claude\",\n  \"content\": \"... pane text ...\",\n  \"lines\": 50\n}\n```\n\n**JSON output shape** (`aoe session show --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"path\": \"/home/user/project\",\n  \"group\": \"backend\",\n  \"tool\": \"claude\",\n  \"command\": \"claude\",\n  \"status\": \"running\",\n  \"state\": \"live\",\n  \"profile\": \"default\"\n}\n```\n\n`state` is `live`, `archived`, or `trashed`, the same vocabulary `aoe list --json` uses; `trashed_at` and `archived_at` are set independently, and trashing deliberately leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, and they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session, which means `aoe send` and `aoe session restart` when it sends its wake message (with `session.restart_wake_message` set to the empty string it does not send one, and the archive survives the restart). `trashed_at` is cleared only by `aoe session restore`. Read the current `state` rather than caching a timestamp; `status` is the pane's live status and does not carry it, since an archived session can still be running.\n\nThe same two keys apply here as in `aoe list --json`: `pinned_at` whenever the session is pinned for the web sidebar, `snoozed_until` only while the snooze is still active.\n\n**JSON output shape** (`aoe status --json`):\n```json\n{\n  \"waiting\": 1,\n  \"running\": 2,\n  \"idle\": 1,\n  \"stopped\": 1,\n  \"error\": 0,\n  \"total\": 5\n}\n```\n\n### Auto-detection (inside a tmux pane)\n\nWhen called from within an aoe-managed tmux session, identifier can be omitted:\n\n```bash\naoe session show          # auto-detects current session\naoe session capture       # auto-detects current session\naoe session current --json\n```\n\n### Renaming and organizing\n\n```bash\naoe session rename <id> -t \"new title\"\naoe session rename <id> -g \"new/group\"\n\naoe group create mygroup\naoe group move <id-or-title> mygroup\naoe group list --json\naoe group delete mygroup --force\n```\n\n### Profiles\n\n```bash\naoe profile list\naoe profile create staging\naoe profile delete staging\naoe profile default staging   # set default\naoe -p staging list            # use inline\n```\n\n### Worktrees\n\n```bash\naoe worktree list\naoe worktree info <id-or-title>\naoe worktree cleanup -f\n```\n\n### Removing sessions\n\n```bash\naoe remove <id-or-title>\naoe remove <id-or-title> --delete-worktree --force\n```\n\n## Workflow patterns\n\n### Single agent\n\n```bash\naoe add /path/to/repo -t \"feature X\" -l\n# ... wait ...\naoe session capture \"feature X\" --json\n```\n\n### Parallel worktree agents\n\n```bash\naoe add . -t \"issue-100\" -w fix/issue-100 -l\naoe add . -t \"issue-101\" -w fix/issue-101 -l\naoe add . -t \"issue-102\" -w fix/issue-102 -l\naoe status --json   # check all at once\n```\n\n### Monitoring loop\n\nPoll all sessions until none are running:\n\n```bash\nwhile true; do\n  status=$(aoe status --json)\n  waiting=$(echo \"$status\" | jq '.waiting')\n  running=$(echo \"$status\" | jq '.running')\n  if [ \"$running\" -eq 0 ] && [ \"$waiting\" -eq 0 ]; then\n    echo \"All agents finished\"\n    break\n  fi\n  echo \"Running: $running, Waiting: $waiting\"\n  sleep 30\ndone\n```\n\n### Capture and review\n\n```bash\nfor id in $(aoe list --json | jq -r '.[].id'); do\n  echo \"=== $id ===\"\n  aoe session capture \"$id\" -n 100 --strip-ansi\n  echo\ndone\n```\n\n### Group operations via TUI\n\nGroups are primarily managed through the `aoe` TUI (run `aoe` with no arguments). The TUI supports bulk start/stop/restart on groups. Use CLI commands above for scripted workflows.\n\nFile v1.15.3:_meta.json\n\n{\n  \"ownerId\": \"kn7ea09b4njxwnx7954yr02fa982sz9a\",\n  \"slug\": \"aoe\",\n  \"version\": \"1.15.3\",\n  \"publishedAt\": 1788381183406\n}\n\nFile v1.15.3:skill-card.md\n\n## Description:\n\nManage AI coding agent sessions via Agent of Empires (aoe).\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[njbrake](https://clawhub.ai/user/njbrake)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to launch, organize, monitor, and inspect AI coding agent sessions running in tmux, including grouped sessions, profiles, worktree-backed tasks, and captured session output.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Commands that enable YOLO mode can bypass approval prompts for an agent session.\n\nMitigation: Allow YOLO mode only when explicitly requested and when the target repository or sandbox can tolerate broad agent actions.\n\nRisk: Forced worktree deletion can remove repository state that still contains needed changes.\n\nMitigation: Use forced worktree deletion only after confirming the affected worktree has no required changes.\n\n## Reference(s):\n\n- [Agent of Empires GitHub repository](https://github.com/agent-of-empires/agent-of-empires)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, shell commands, configuration, json]\n\n**Output Format:** [Markdown with inline bash commands and JSON examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires the aoe and tmux command-line binaries.]\n\n## Skill Version(s):\n\n1.15.3 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.15.2: 3 files, 4582 bytes\n\nFiles: skill-card.md (1934b), SKILL.md (8338b), _meta.json (123b)\n\nFile v1.15.2:SKILL.md\n\n---\nname: aoe\ndescription: Manage AI coding agent sessions via Agent of Empires (aoe)\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - aoe\n        - tmux\n    homepage: https://github.com/agent-of-empires/agent-of-empires\n---\n\n# Agent of Empires (aoe) Skill\n\nUse `aoe` to create, manage, and monitor AI coding agent sessions (Claude Code, Codex, OpenCode, etc.) in tmux. Prefer `aoe` over raw `tmux` commands for agent management.\n\n## When to use this skill\n\n- Launching one or more AI coding agents on project directories\n- Monitoring agent progress (waiting vs running vs idle)\n- Capturing agent output for review\n- Organizing agents into groups or profiles\n- Setting up parallel worktree-based development\n\nDo NOT use this skill for general tmux window/pane management unrelated to coding agents.\n\n## Core concepts\n\n- **Session**: An agent process running in a tmux session. Each session has an ID, title, tool (e.g. `claude`), and project path.\n- **Group**: A named folder for organizing sessions (supports nesting with `/`, e.g. `backend/api`).\n- **Profile**: A separate workspace with its own sessions and config. Use `-p <name>` globally or set `AGENT_OF_EMPIRES_PROFILE`.\n- **Status**: One of `running`, `waiting`, `idle`, `stopped`, `error`, `starting`, `unknown`.\n\n## Command reference\n\n### Adding sessions\n\n```bash\n# Add a session for the current directory\naoe add . -t \"my feature\"\n\n# Add with group, launch immediately\naoe add /path/to/repo -t \"API work\" -g backend -l\n\n# Add with specific tool\naoe add . -t \"codex session\" -c codex\n\n# Add in a git worktree (parallel branch)\naoe add . -t \"fix-123\" -w fix/issue-123 -l\n\n# Add in Docker sandbox\naoe add . -t \"sandboxed\" -s -l\n\n# Add as sub-session of another\naoe add . -t \"sub task\" -P <parent-id>\n\n# Enable YOLO mode (skip permission prompts)\naoe add . -t \"yolo\" -y -l\n```\n\n### Listing sessions\n\n```bash\n# Human-readable list\naoe list\n\n# JSON output for parsing\naoe list --json\n\n# List across all profiles\naoe list --all\n\n# Skip trashed and archived rows (default is every persisted session)\naoe list --json --state=live\n```\n\n**JSON output shape** (`aoe list --json`):\n```json\n[\n  {\n    \"id\": \"a1b2c3d4-...\",\n    \"title\": \"my feature\",\n    \"path\": \"/home/user/project\",\n    \"group\": \"backend\",\n    \"tool\": \"claude\",\n    \"command\": \"claude\",\n    \"profile\": \"default\",\n    \"state\": \"live\",\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"workspace_repos\": []\n  }\n]\n```\n\n`command` is omitted when empty; `worktree` appears only for worktree-backed sessions. `state` is `live`, `archived`, or `trashed`; `trashed_at` and `archived_at` are set independently, and trashing leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, but they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session (`aoe send`, and `aoe session restart` when it sends its wake message), while `trashed_at` is cleared only by `aoe session restore`. Key off `state` rather than caching a timestamp. A trashed session stays in the listing and keeps its title, so check `state` before treating a row as a live session. `list --json` does not include live status; use `aoe status --json` or `aoe session capture --json` for that.\n\n`snoozed_until` and `pinned_at` round out the four state timestamps the REST API exposes: `pinned_at` appears whenever the session is pinned for the web sidebar, while `snoozed_until` appears only while the snooze is still active (the API's own gate), so an expired deadline omits the key instead of advertising a snooze that already ended. Both are independent of `state`, and neither key appears on a row carrying neither marker. `snoozed_until` also clears readily, more often than its siblings: waking the session (`aoe send`), archiving, favoriting, unsnoozing, or pinning all remove it on the next read, so treat a missing key as no active snooze rather than a listing gap.\n\n### Session lifecycle\n\n```bash\naoe session start <id-or-title>\naoe session stop <id-or-title>\naoe session restart <id-or-title>\naoe session attach <id-or-title>   # interactive attach\n```\n\n### Inspecting sessions\n\n```bash\n# Show session metadata\naoe session show <id-or-title> --json\n\n# Capture tmux pane content (key for monitoring)\naoe session capture <id-or-title> --json\naoe session capture <id-or-title> -n 100 --strip-ansi\naoe session capture <id-or-title>   # plain text, good for piping\n\n# Quick status summary\naoe status --json\naoe status -q   # just the waiting count (for scripting)\n```\n\n**JSON output shape** (`aoe session capture --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"status\": \"waiting\",\n  \"tool\": \"claude\",\n  \"content\": \"... pane text ...\",\n  \"lines\": 50\n}\n```\n\n**JSON output shape** (`aoe session show --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"path\": \"/home/user/project\",\n  \"group\": \"backend\",\n  \"tool\": \"claude\",\n  \"command\": \"claude\",\n  \"status\": \"running\",\n  \"state\": \"live\",\n  \"profile\": \"default\"\n}\n```\n\n`state` is `live`, `archived`, or `trashed`, the same vocabulary `aoe list --json` uses; `trashed_at` and `archived_at` are set independently, and trashing deliberately leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, and they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session, which means `aoe send` and `aoe session restart` when it sends its wake message (with `session.restart_wake_message` set to the empty string it does not send one, and the archive survives the restart). `trashed_at` is cleared only by `aoe session restore`. Read the current `state` rather than caching a timestamp; `status` is the pane's live status and does not carry it, since an archived session can still be running.\n\nThe same two keys apply here as in `aoe list --json`: `pinned_at` whenever the session is pinned for the web sidebar, `snoozed_until` only while the snooze is still active.\n\n**JSON output shape** (`aoe status --json`):\n```json\n{\n  \"waiting\": 1,\n  \"running\": 2,\n  \"idle\": 1,\n  \"stopped\": 1,\n  \"error\": 0,\n  \"total\": 5\n}\n```\n\n### Auto-detection (inside a tmux pane)\n\nWhen called from within an aoe-managed tmux session, identifier can be omitted:\n\n```bash\naoe session show          # auto-detects current session\naoe session capture       # auto-detects current session\naoe session current --json\n```\n\n### Renaming and organizing\n\n```bash\naoe session rename <id> -t \"new title\"\naoe session rename <id> -g \"new/group\"\n\naoe group create mygroup\naoe group move <id-or-title> mygroup\naoe group list --json\naoe group delete mygroup --force\n```\n\n### Profiles\n\n```bash\naoe profile list\naoe profile create staging\naoe profile delete staging\naoe profile default staging   # set default\naoe -p staging list            # use inline\n```\n\n### Worktrees\n\n```bash\naoe worktree list\naoe worktree info <id-or-title>\naoe worktree cleanup -f\n```\n\n### Removing sessions\n\n```bash\naoe remove <id-or-title>\naoe remove <id-or-title> --delete-worktree --force\n```\n\n## Workflow patterns\n\n### Single agent\n\n```bash\naoe add /path/to/repo -t \"feature X\" -l\n# ... wait ...\naoe session capture \"feature X\" --json\n```\n\n### Parallel worktree agents\n\n```bash\naoe add . -t \"issue-100\" -w fix/issue-100 -l\naoe add . -t \"issue-101\" -w fix/issue-101 -l\naoe add . -t \"issue-102\" -w fix/issue-102 -l\naoe status --json   # check all at once\n```\n\n### Monitoring loop\n\nPoll all sessions until none are running:\n\n```bash\nwhile true; do\n  status=$(aoe status --json)\n  waiting=$(echo \"$status\" | jq '.waiting')\n  running=$(echo \"$status\" | jq '.running')\n  if [ \"$running\" -eq 0 ] && [ \"$waiting\" -eq 0 ]; then\n    echo \"All agents finished\"\n    break\n  fi\n  echo \"Running: $running, Waiting: $waiting\"\n  sleep 30\ndone\n```\n\n### Capture and review\n\n```bash\nfor id in $(aoe list --json | jq -r '.[].id'); do\n  echo \"=== $id ===\"\n  aoe session capture \"$id\" -n 100 --strip-ansi\n  echo\ndone\n```\n\n### Group operations via TUI\n\nGroups are primarily managed through the `aoe` TUI (run `aoe` with no arguments). The TUI supports bulk start/stop/restart on groups. Use CLI commands above for scripted workflows.\n\nFile v1.15.2:_meta.json\n\n{\n  \"ownerId\": \"kn7ea09b4njxwnx7954yr02fa982sz9a\",\n  \"slug\": \"aoe\",\n  \"version\": \"1.15.2\",\n  \"publishedAt\": 1788358446937\n}\n\nFile v1.15.2:skill-card.md\n\n## Description:\n\nManage AI coding agent sessions via Agent of Empires (aoe).\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[njbrake](https://clawhub.ai/user/njbrake)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to launch, organize, monitor, inspect, and manage AI coding-agent sessions through Agent of Empires and tmux.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill enables agents to create, start, stop, inspect, and otherwise manage other coding-agent sessions.\n\nMitigation: Install only where agent orchestration through aoe is intended, and review proposed session actions before allowing them to run.\n\nRisk: YOLO mode can skip permission prompts during launched agent sessions.\n\nMitigation: Avoid YOLO mode unless the target project, permissions, and working directory are tightly scoped and reviewed.\n\nRisk: Worktree removal commands can delete local worktree contents when force deletion is used.\n\nMitigation: Use force-delete worktree commands only on reviewed, recoverable directories with no uncommitted work that must be preserved.\n\n## Reference(s):\n\n- [Agent of Empires homepage](https://github.com/agent-of-empires/agent-of-empires)\n- [ClawHub skill page](https://clawhub.ai/njbrake/skills/aoe)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown guidance with inline shell commands and JSON examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires aoe and tmux.]\n\n## Skill Version(s):\n\n1.15.2 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.15.1: 3 files, 4550 bytes\n\nFiles: skill-card.md (1852b), SKILL.md (8338b), _meta.json (123b)\n\nFile v1.15.1:SKILL.md\n\n---\nname: aoe\ndescription: Manage AI coding agent sessions via Agent of Empires (aoe)\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - aoe\n        - tmux\n    homepage: https://github.com/agent-of-empires/agent-of-empires\n---\n\n# Agent of Empires (aoe) Skill\n\nUse `aoe` to create, manage, and monitor AI coding agent sessions (Claude Code, Codex, OpenCode, etc.) in tmux. Prefer `aoe` over raw `tmux` commands for agent management.\n\n## When to use this skill\n\n- Launching one or more AI coding agents on project directories\n- Monitoring agent progress (waiting vs running vs idle)\n- Capturing agent output for review\n- Organizing agents into groups or profiles\n- Setting up parallel worktree-based development\n\nDo NOT use this skill for general tmux window/pane management unrelated to coding agents.\n\n## Core concepts\n\n- **Session**: An agent process running in a tmux session. Each session has an ID, title, tool (e.g. `claude`), and project path.\n- **Group**: A named folder for organizing sessions (supports nesting with `/`, e.g. `backend/api`).\n- **Profile**: A separate workspace with its own sessions and config. Use `-p <name>` globally or set `AGENT_OF_EMPIRES_PROFILE`.\n- **Status**: One of `running`, `waiting`, `idle`, `stopped`, `error`, `starting`, `unknown`.\n\n## Command reference\n\n### Adding sessions\n\n```bash\n# Add a session for the current directory\naoe add . -t \"my feature\"\n\n# Add with group, launch immediately\naoe add /path/to/repo -t \"API work\" -g backend -l\n\n# Add with specific tool\naoe add . -t \"codex session\" -c codex\n\n# Add in a git worktree (parallel branch)\naoe add . -t \"fix-123\" -w fix/issue-123 -l\n\n# Add in Docker sandbox\naoe add . -t \"sandboxed\" -s -l\n\n# Add as sub-session of another\naoe add . -t \"sub task\" -P <parent-id>\n\n# Enable YOLO mode (skip permission prompts)\naoe add . -t \"yolo\" -y -l\n```\n\n### Listing sessions\n\n```bash\n# Human-readable list\naoe list\n\n# JSON output for parsing\naoe list --json\n\n# List across all profiles\naoe list --all\n\n# Skip trashed and archived rows (default is every persisted session)\naoe list --json --state=live\n```\n\n**JSON output shape** (`aoe list --json`):\n```json\n[\n  {\n    \"id\": \"a1b2c3d4-...\",\n    \"title\": \"my feature\",\n    \"path\": \"/home/user/project\",\n    \"group\": \"backend\",\n    \"tool\": \"claude\",\n    \"command\": \"claude\",\n    \"profile\": \"default\",\n    \"state\": \"live\",\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"workspace_repos\": []\n  }\n]\n```\n\n`command` is omitted when empty; `worktree` appears only for worktree-backed sessions. `state` is `live`, `archived`, or `trashed`; `trashed_at` and `archived_at` are set independently, and trashing leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, but they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session (`aoe send`, and `aoe session restart` when it sends its wake message), while `trashed_at` is cleared only by `aoe session restore`. Key off `state` rather than caching a timestamp. A trashed session stays in the listing and keeps its title, so check `state` before treating a row as a live session. `list --json` does not include live status; use `aoe status --json` or `aoe session capture --json` for that.\n\n`snoozed_until` and `pinned_at` round out the four state timestamps the REST API exposes: `pinned_at` appears whenever the session is pinned for the web sidebar, while `snoozed_until` appears only while the snooze is still active (the API's own gate), so an expired deadline omits the key instead of advertising a snooze that already ended. Both are independent of `state`, and neither key appears on a row carrying neither marker. `snoozed_until` also clears readily, more often than its siblings: waking the session (`aoe send`), archiving, favoriting, unsnoozing, or pinning all remove it on the next read, so treat a missing key as no active snooze rather than a listing gap.\n\n### Session lifecycle\n\n```bash\naoe session start <id-or-title>\naoe session stop <id-or-title>\naoe session restart <id-or-title>\naoe session attach <id-or-title>   # interactive attach\n```\n\n### Inspecting sessions\n\n```bash\n# Show session metadata\naoe session show <id-or-title> --json\n\n# Capture tmux pane content (key for monitoring)\naoe session capture <id-or-title> --json\naoe session capture <id-or-title> -n 100 --strip-ansi\naoe session capture <id-or-title>   # plain text, good for piping\n\n# Quick status summary\naoe status --json\naoe status -q   # just the waiting count (for scripting)\n```\n\n**JSON output shape** (`aoe session capture --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"status\": \"waiting\",\n  \"tool\": \"claude\",\n  \"content\": \"... pane text ...\",\n  \"lines\": 50\n}\n```\n\n**JSON output shape** (`aoe session show --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"path\": \"/home/user/project\",\n  \"group\": \"backend\",\n  \"tool\": \"claude\",\n  \"command\": \"claude\",\n  \"status\": \"running\",\n  \"state\": \"live\",\n  \"profile\": \"default\"\n}\n```\n\n`state` is `live`, `archived`, or `trashed`, the same vocabulary `aoe list --json` uses; `trashed_at` and `archived_at` are set independently, and trashing deliberately leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, and they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session, which means `aoe send` and `aoe session restart` when it sends its wake message (with `session.restart_wake_message` set to the empty string it does not send one, and the archive survives the restart). `trashed_at` is cleared only by `aoe session restore`. Read the current `state` rather than caching a timestamp; `status` is the pane's live status and does not carry it, since an archived session can still be running.\n\nThe same two keys apply here as in `aoe list --json`: `pinned_at` whenever the session is pinned for the web sidebar, `snoozed_until` only while the snooze is still active.\n\n**JSON output shape** (`aoe status --json`):\n```json\n{\n  \"waiting\": 1,\n  \"running\": 2,\n  \"idle\": 1,\n  \"stopped\": 1,\n  \"error\": 0,\n  \"total\": 5\n}\n```\n\n### Auto-detection (inside a tmux pane)\n\nWhen called from within an aoe-managed tmux session, identifier can be omitted:\n\n```bash\naoe session show          # auto-detects current session\naoe session capture       # auto-detects current session\naoe session current --json\n```\n\n### Renaming and organizing\n\n```bash\naoe session rename <id> -t \"new title\"\naoe session rename <id> -g \"new/group\"\n\naoe group create mygroup\naoe group move <id-or-title> mygroup\naoe group list --json\naoe group delete mygroup --force\n```\n\n### Profiles\n\n```bash\naoe profile list\naoe profile create staging\naoe profile delete staging\naoe profile default staging   # set default\naoe -p staging list            # use inline\n```\n\n### Worktrees\n\n```bash\naoe worktree list\naoe worktree info <id-or-title>\naoe worktree cleanup -f\n```\n\n### Removing sessions\n\n```bash\naoe remove <id-or-title>\naoe remove <id-or-title> --delete-worktree --force\n```\n\n## Workflow patterns\n\n### Single agent\n\n```bash\naoe add /path/to/repo -t \"feature X\" -l\n# ... wait ...\naoe session capture \"feature X\" --json\n```\n\n### Parallel worktree agents\n\n```bash\naoe add . -t \"issue-100\" -w fix/issue-100 -l\naoe add . -t \"issue-101\" -w fix/issue-101 -l\naoe add . -t \"issue-102\" -w fix/issue-102 -l\naoe status --json   # check all at once\n```\n\n### Monitoring loop\n\nPoll all sessions until none are running:\n\n```bash\nwhile true; do\n  status=$(aoe status --json)\n  waiting=$(echo \"$status\" | jq '.waiting')\n  running=$(echo \"$status\" | jq '.running')\n  if [ \"$running\" -eq 0 ] && [ \"$waiting\" -eq 0 ]; then\n    echo \"All agents finished\"\n    break\n  fi\n  echo \"Running: $running, Waiting: $waiting\"\n  sleep 30\ndone\n```\n\n### Capture and review\n\n```bash\nfor id in $(aoe list --json | jq -r '.[].id'); do\n  echo \"=== $id ===\"\n  aoe session capture \"$id\" -n 100 --strip-ansi\n  echo\ndone\n```\n\n### Group operations via TUI\n\nGroups are primarily managed through the `aoe` TUI (run `aoe` with no arguments). The TUI supports bulk start/stop/restart on groups. Use CLI commands above for scripted workflows.\n\nFile v1.15.1:_meta.json\n\n{\n  \"ownerId\": \"kn7ea09b4njxwnx7954yr02fa982sz9a\",\n  \"slug\": \"aoe\",\n  \"version\": \"1.15.1\",\n  \"publishedAt\": 1787926299229\n}\n\nFile v1.15.1:skill-card.md\n\n## Description:\n\nManage AI coding agent sessions via Agent of Empires (aoe).\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[njbrake](https://clawhub.ai/user/njbrake)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to launch, organize, monitor, capture, and manage AI coding agent sessions running through Agent of Empires and tmux.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Powerful session commands can start, stop, remove, or alter coding-agent workspaces, including worktrees.\n\nMitigation: Use exact session IDs, inspect sessions with list or info commands before destructive actions, and avoid forceful removal unless intended.\n\nRisk: Captured agent output may contain incomplete, incorrect, or misleading work.\n\nMitigation: Review captured session output before acting on it or using it to make project changes.\n\nRisk: YOLO mode can skip normal permission prompts for agent sessions.\n\nMitigation: Keep normal permission prompts enabled for routine work and enable YOLO mode only for explicitly trusted workflows.\n\n## Reference(s):\n\n- [Agent of Empires project homepage](https://github.com/agent-of-empires/agent-of-empires)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration instructions]\n\n**Output Format:** [Markdown with inline bash and JSON code blocks]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires the aoe and tmux command-line tools.]\n\n## Skill Version(s):\n\n1.15.1 (source: release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.15.0: 3 files, 4193 bytes\n\nFiles: skill-card.md (1804b), SKILL.md (7483b), _meta.json (123b)\n\nFile v1.15.0:SKILL.md\n\n---\nname: aoe\ndescription: Manage AI coding agent sessions via Agent of Empires (aoe)\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - aoe\n        - tmux\n    homepage: https://github.com/agent-of-empires/agent-of-empires\n---\n\n# Agent of Empires (aoe) Skill\n\nUse `aoe` to create, manage, and monitor AI coding agent sessions (Claude Code, Codex, OpenCode, etc.) in tmux. Prefer `aoe` over raw `tmux` commands for agent management.\n\n## When to use this skill\n\n- Launching one or more AI coding agents on project directories\n- Monitoring agent progress (waiting vs running vs idle)\n- Capturing agent output for review\n- Organizing agents into groups or profiles\n- Setting up parallel worktree-based development\n\nDo NOT use this skill for general tmux window/pane management unrelated to coding agents.\n\n## Core concepts\n\n- **Session**: An agent process running in a tmux session. Each session has an ID, title, tool (e.g. `claude`), and project path.\n- **Group**: A named folder for organizing sessions (supports nesting with `/`, e.g. `backend/api`).\n- **Profile**: A separate workspace with its own sessions and config. Use `-p <name>` globally or set `AGENT_OF_EMPIRES_PROFILE`.\n- **Status**: One of `running`, `waiting`, `idle`, `stopped`, `error`, `starting`, `unknown`.\n\n## Command reference\n\n### Adding sessions\n\n```bash\n# Add a session for the current directory\naoe add . -t \"my feature\"\n\n# Add with group, launch immediately\naoe add /path/to/repo -t \"API work\" -g backend -l\n\n# Add with specific tool\naoe add . -t \"codex session\" -c codex\n\n# Add in a git worktree (parallel branch)\naoe add . -t \"fix-123\" -w fix/issue-123 -l\n\n# Add in Docker sandbox\naoe add . -t \"sandboxed\" -s -l\n\n# Add as sub-session of another\naoe add . -t \"sub task\" -P <parent-id>\n\n# Enable YOLO mode (skip permission prompts)\naoe add . -t \"yolo\" -y -l\n```\n\n### Listing sessions\n\n```bash\n# Human-readable list\naoe list\n\n# JSON output for parsing\naoe list --json\n\n# List across all profiles\naoe list --all\n\n# Skip trashed and archived rows (default is every persisted session)\naoe list --json --state=live\n```\n\n**JSON output shape** (`aoe list --json`):\n```json\n[\n  {\n    \"id\": \"a1b2c3d4-...\",\n    \"title\": \"my feature\",\n    \"path\": \"/home/user/project\",\n    \"group\": \"backend\",\n    \"tool\": \"claude\",\n    \"command\": \"claude\",\n    \"profile\": \"default\",\n    \"state\": \"live\",\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"workspace_repos\": []\n  }\n]\n```\n\n`command` is omitted when empty; `worktree` appears only for worktree-backed sessions. `state` is `live`, `archived`, or `trashed`; `trashed_at` and `archived_at` are set independently, and trashing leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, but they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session (`aoe send`, and `aoe session restart` when it sends its wake message), while `trashed_at` is cleared only by `aoe session restore`. Key off `state` rather than caching a timestamp. A trashed session stays in the listing and keeps its title, so check `state` before treating a row as a live session. `list --json` does not include live status; use `aoe status --json` or `aoe session capture --json` for that.\n\n### Session lifecycle\n\n```bash\naoe session start <id-or-title>\naoe session stop <id-or-title>\naoe session restart <id-or-title>\naoe session attach <id-or-title>   # interactive attach\n```\n\n### Inspecting sessions\n\n```bash\n# Show session metadata\naoe session show <id-or-title> --json\n\n# Capture tmux pane content (key for monitoring)\naoe session capture <id-or-title> --json\naoe session capture <id-or-title> -n 100 --strip-ansi\naoe session capture <id-or-title>   # plain text, good for piping\n\n# Quick status summary\naoe status --json\naoe status -q   # just the waiting count (for scripting)\n```\n\n**JSON output shape** (`aoe session capture --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"status\": \"waiting\",\n  \"tool\": \"claude\",\n  \"content\": \"... pane text ...\",\n  \"lines\": 50\n}\n```\n\n**JSON output shape** (`aoe session show --json`):\n```json\n{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"path\": \"/home/user/project\",\n  \"group\": \"backend\",\n  \"tool\": \"claude\",\n  \"command\": \"claude\",\n  \"status\": \"running\",\n  \"state\": \"live\",\n  \"profile\": \"default\"\n}\n```\n\n`state` is `live`, `archived`, or `trashed`, the same vocabulary `aoe list --json` uses; `trashed_at` and `archived_at` are set independently, and trashing deliberately leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, and they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session, which means `aoe send` and `aoe session restart` when it sends its wake message (with `session.restart_wake_message` set to the empty string it does not send one, and the archive survives the restart). `trashed_at` is cleared only by `aoe session restore`. Read the current `state` rather than caching a timestamp; `status` is the pane's live status and does not carry it, since an archived session can still be running.\n\n**JSON output shape** (`aoe status --json`):\n```json\n{\n  \"waiting\": 1,\n  \"running\": 2,\n  \"idle\": 1,\n  \"stopped\": 1,\n  \"error\": 0,\n  \"total\": 5\n}\n```\n\n### Auto-detection (inside a tmux pane)\n\nWhen called from within an aoe-managed tmux session, identifier can be omitted:\n\n```bash\naoe session show          # auto-detects current session\naoe session capture       # auto-detects current session\naoe session current --json\n```\n\n### Renaming and organizing\n\n```bash\naoe session rename <id> -t \"new title\"\naoe session rename <id> -g \"new/group\"\n\naoe group create mygroup\naoe group move <id-or-title> mygroup\naoe group list --json\naoe group delete mygroup --force\n```\n\n### Profiles\n\n```bash\naoe profile list\naoe profile create staging\naoe profile delete staging\naoe profile default staging   # set default\naoe -p staging list            # use inline\n```\n\n### Worktrees\n\n```bash\naoe worktree list\naoe worktree info <id-or-title>\naoe worktree cleanup -f\n```\n\n### Removing sessions\n\n```bash\naoe remove <id-or-title>\naoe remove <id-or-title> --delete-worktree --force\n```\n\n## Workflow patterns\n\n### Single agent\n\n```bash\naoe add /path/to/repo -t \"feature X\" -l\n# ... wait ...\naoe session capture \"feature X\" --json\n```\n\n### Parallel worktree agents\n\n```bash\naoe add . -t \"issue-100\" -w fix/issue-100 -l\naoe add . -t \"issue-101\" -w fix/issue-101 -l\naoe add . -t \"issue-102\" -w fix/issue-102 -l\naoe status --json   # check all at once\n```\n\n### Monitoring loop\n\nPoll all sessions until none are running:\n\n```bash\nwhile true; do\n  status=$(aoe status --json)\n  waiting=$(echo \"$status\" | jq '.waiting')\n  running=$(echo \"$status\" | jq '.running')\n  if [ \"$running\" -eq 0 ] && [ \"$waiting\" -eq 0 ]; then\n    echo \"All agents finished\"\n    break\n  fi\n  echo \"Running: $running, Waiting: $waiting\"\n  sleep 30\ndone\n```\n\n### Capture and review\n\n```bash\nfor id in $(aoe list --json | jq -r '.[].id'); do\n  echo \"=== $id ===\"\n  aoe session capture \"$id\" -n 100 --strip-ansi\n  echo\ndone\n```\n\n### Group operations via TUI\n\nGroups are primarily managed through the `aoe` TUI (run `aoe` with no arguments). The TUI supports bulk start/stop/restart on groups. Use CLI commands above for scripted workflows.\n\nFile v1.15.0:_meta.json\n\n{\n  \"ownerId\": \"kn7ea09b4njxwnx7954yr02fa982sz9a\",\n  \"slug\": \"aoe\",\n  \"version\": \"1.15.0\",\n  \"publishedAt\": 1787346603398\n}\n\nFile v1.15.0:skill-card.md\n\n## Description:\n\nManage AI coding agent sessions via Agent of Empires (aoe).\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[njbrake](https://clawhub.ai/user/njbrake)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to create, monitor, organize, and inspect AI coding-agent sessions managed by Agent of Empires in tmux.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: YOLO mode can skip permission prompts when launching agent sessions.\n\nMitigation: Use YOLO mode only when that behavior is intended; prefer normal permission prompts on sensitive repositories.\n\nRisk: Force deletion and worktree deletion commands can remove session state or worktree contents.\n\nMitigation: Review the target session and path before using --force or --delete-worktree.\n\nRisk: Agent sessions execute in project directories and may affect repository state.\n\nMitigation: Prefer sandboxed sessions or scoped worktrees for sensitive repositories.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/njbrake/skills/aoe)\n- [Agent of Empires homepage](https://github.com/agent-of-empires/agent-of-empires)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, shell commands, configuration]\n\n**Output Format:** [Markdown with inline bash and JSON examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires the aoe and tmux binaries; some examples produce JSON output.]\n\n## Skill Version(s):\n\n1.15.0 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: Agent of Empires Owner: njbrake Summary: Manage AI coding agent sessions via Agent of Empires (aoe) Tags: latest:1.19.0 Version history: v1.19.0 | 2026-10-08T15:00:33.768Z | auto - Removed the file: skill-card.md. - No changes to functionality or documentation in SKILL.md. - Housekeeping update to clean up skill metadata files. v1.18.0 | 2026-09-30T19:55:14.679Z | auto - Removed the outdated skill-card.md docu","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# Add a session for the current directory\naoe add . -t \"my feature\"\n\n# Add with group, launch immediately\naoe add /path/to/repo -t \"API work\" -g backend -l\n\n# Add with specific tool\naoe add . -t \"codex session\" -c codex\n\n# Add in a git worktree (parallel branch)\naoe add . -t \"fix-123\" -w fix/issue-123 -l\n\n# Add in Docker sandbox\naoe add . -t \"sandboxed\" -s -l\n\n# Add as sub-session of another\naoe add . -t \"sub task\" -P <parent-id>\n\n# Enable YOLO mode (skip permission prompts)\naoe add . -t \"yolo\" -y -l"},{"language":"bash","snippet":"# Human-readable list\naoe list\n\n# JSON output for parsing\naoe list --json\n\n# List across all profiles\naoe list --all\n\n# Skip trashed and archived rows (default is every persisted session)\naoe list --json --state=live"},{"language":"json","snippet":"[\n  {\n    \"id\": \"a1b2c3d4-...\",\n    \"title\": \"my feature\",\n    \"path\": \"/home/user/project\",\n    \"group\": \"backend\",\n    \"tool\": \"claude\",\n    \"command\": \"claude\",\n    \"profile\": \"default\",\n    \"state\": \"live\",\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"workspace_repos\": []\n  }\n]"},{"language":"bash","snippet":"aoe session start <id-or-title>\naoe session stop <id-or-title>\naoe session restart <id-or-title>\naoe session attach <id-or-title>   # interactive attach"},{"language":"bash","snippet":"# Show session metadata\naoe session show <id-or-title> --json\n\n# Capture tmux pane content (key for monitoring)\naoe session capture <id-or-title> --json\naoe session capture <id-or-title> -n 100 --strip-ansi\naoe session capture <id-or-title>   # plain text, good for piping\n\n# Quick status summary\naoe status --json\naoe status -q   # just the waiting count (for scripting)"},{"language":"json","snippet":"{\n  \"id\": \"a1b2c3d4-...\",\n  \"title\": \"my feature\",\n  \"status\": \"waiting\",\n  \"tool\": \"claude\",\n  \"content\": \"... pane text ...\",\n  \"lines\": 50\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: aoe\ndescription: Manage AI coding agent sessions via Agent of Empires (aoe)\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - aoe\n        - tmux\n    homepage: https://github.com/agent-of-empires/agent-of-empires\n---\n\n# Agent of Empires (aoe) Skill\n\nUse `aoe` to create, manage, and monitor AI coding agent sessions (Claude Code, Codex, OpenCode, etc.) in tmux. Prefer `aoe` over raw `tmux` commands for agent management.\n\n## When to use this skill\n\n- Launching one or more AI coding agents on project directories\n- Monitoring agent progress (waiting vs running vs idle)\n- Capturing agent output for review\n- Organizing agents into groups or profiles\n- Setting up parallel worktree-based development\n\nDo NOT use this skill for general tmux window/pane management unrelated to coding agents.\n\n## Core concepts\n\n- **Session**: An agent process running in a tmux session. Each session has an ID, title, tool (e.g. `claude`), and project path.\n- **Group**: A named folder for organizing sessions (supports nesting with `/`, e.g. `backend/api`).\n- **Profile**: A separate workspace with its own sessions and config. Use `-p <name>` globally or set `AGENT_OF_EMPIRES_PROFILE`.\n- **Status**: One of `running`, `waiting`, `idle`, `stopped`, `error`, `starting`, `unknown`.\n\n## Command reference\n\n### Adding sessions\n\n```bash\n# Add a session for the current directory\naoe add . -t \"my feature\"\n\n# Add with group, launch immediately\naoe add /path/to/repo -t \"API work\" -g backend -l\n\n# Add with specific tool\naoe add . -t \"codex session\" -c codex\n\n# Add in a git worktree (parallel branch)\naoe add . -t \"fix-123\" -w fix/issue-123 -l\n\n# Add in Docker sandbox\naoe add . -t \"sandboxed\" -s -l\n\n# Add as sub-session of another\naoe add . -t \"sub task\" -P <parent-id>\n\n# Enable YOLO mode (skip permission prompts)\naoe add . -t \"yolo\" -y -l\n```\n\n### Listing sessions\n\n```bash\n# Human-readable list\naoe list\n\n# JSON output for parsing\naoe list --json\n\n# List across all profiles\naoe list --all\n\n# Skip trashed and archived rows (default is every persisted session)\naoe list --json --state=live\n```\n\n**JSON output shape** (`aoe list --json`):\n```json\n[\n  {\n    \"id\": \"a1b2c3d4-...\",\n    \"title\": \"my feature\",\n    \"path\": \"/home/user/project\",\n    \"group\": \"backend\",\n    \"tool\": \"claude\",\n    \"command\": \"claude\",\n    \"profile\": \"default\",\n    \"state\": \"live\",\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"workspace_repos\": []\n  }\n]\n```\n\n`command` is omitted when empty; `worktree` appears only for worktree-backed sessions. `state` is `live`, `archived`, or `trashed`; `trashed_at` and `archived_at` are set independently, and trashing leaves `archived_at` alone, so a session archived and then trashed carries both keys and reports `trashed`. Neither timestamp is durable, but they do not clear alike: `archived_at` is cleared by `aoe session unarchive`, by `aoe session favorite`, and by anything that wakes the session (`aoe send`, and `aoe session restart` when it sends its wake message), while"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7ea09b4njxwnx7954yr02fa982sz9a\",\n  \"slug\": \"aoe\",\n  \"version\": \"1.19.0\",\n  \"publishedAt\": 1791471633768\n}"},{"path":"skill-card.md","content":"## Description:\n\nManage AI coding agent sessions with Agent of Empires (aoe).\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[njbrake](https://clawhub.ai/user/njbrake)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers use this skill to launch, organize, monitor, and review coding-agent sessions, including parallel worktree sessions.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: YOLO mode bypasses normal permission prompts for coding agents.\n\nMitigation: Prefer normal prompts and sandboxed sessions; require explicit human confirmation before using YOLO mode.\n\nRisk: Force deletion and cleanup commands can remove sessions, worktrees, groups, or profiles.\n\nMitigation: Inspect command targets and affected sessions or worktrees first; require explicit human confirmation for --force, --delete-worktree, cleanup, and profile deletion.\n\n## Reference(s):\n\n- [Agent of Empires project homepage](https://github.com/agent-of-empires/agent-of-empires)\n- [Agent of Empires on ClawHub](https://clawhub.ai/njbrake/skills/aoe)\n\n## Skill Output:\n\n**Output Type(s):** [Shell commands, Guidance, Configuration instructions]\n\n**Output Format:** [Markdown with shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include session status or captured agent output when requested.]\n\n## Skill Version(s):\n\n1.19.0 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Manage AI coding agent sessions via Agent of Empires (aoe) Skill: Agent of Empires Owner: njbrake Summary: Manage AI coding agent sessions via Agent of Empires (aoe) Tags: latest:1.19.0 Version history: v1.19.0 | 2026-10-08T15:00:33.768Z | auto - Removed the file: skill-card.md. - No changes to functionality or documentation in SKILL.md. - Housekeeping update to clean up skill metadata files. v1.18.0 | 2026-09-30T19:55:14.679Z | auto - Removed the outdated skill-card.md docu","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1068,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T04:59:51.218Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T04:59:51.218Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T02:02:28.491Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}