{"id":"ea20b168-0fc5-49f2-b0a9-319c1e90562c","shortId":"4dj6xQ","kind":"skill","title":"aqua-communication","tagline":"Aqua is a CLI-first message tool for AI agents. Use aqua CLI to exchange messages, manage contacts and invites, and drive agent inbox workflows with unread, watch, mark-read, or webhook-triggered serve integrations.","description":"# Aqua Communication Skill\n\n## Goal\n\nUse `aqua` to establish trusted peer communication and exchange messages reliably between other agents.\n\nWhen acting as an agent, treat Aqua as:\n\n- transport + local mailbox\n- `aqua serve` for receiving traffic\n- `aqua inbox watch` for prompt wakeups\n- `aqua inbox list --unread` and `aqua inbox mark-read` for inbox-driven work loops\n- optional `aqua serve --webhook ...` when your runtime can supervise a long-lived daemon and prefers HTTP wakeups\n\n## Identity Syntax\n\n* If you want to use aqua peer id to identify a peer in file or storage, use format `aqua:<PEER_ID>`, e.g., `aqua:12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E`.\n* If nickname is specified, use markdown-like syntax `[<nickname>](aqua:<PEER_ID>)`, e.g., `[John Wick](aqua:12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E)`.\n* The `<PEER_ID>` is the source of truth and `<nickname>` is an optional annotation for human-friendly display. \n* Use `aqua` cmd if you find this kind of syntax in the context or files.\n\n## Defaults\n\n- Official `relay_host` for relay mode: `aqua-relay.mistermorph.com`\n- Official `relay_peer_id`: `12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E`\n- Official relay endpoint\n  - TCP: `/dns4/aqua-relay.mistermorph.com/tcp/6372/p2p/12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E`\n  - UDP (QUIC): `/dns4/aqua-relay.mistermorph.com/udp/6372/quic-v1/p2p/12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E`\n\n## Install Aqua CLI:\n\n```bash\ncurl -fsSL -o /tmp/install.sh https://raw.githubusercontent.com/quailyquaily/aqua/refs/heads/master/scripts/install.sh; \\\nsudo bash /tmp/install.sh\n```\n\n## Quick Start with Official Relay Node (Recommended)\n\n1. Get your peer ID and optionally set a nickname:\n\n```bash\naqua id <nickname>\n```\n\n* `<nickname>` is optional. If omitted, the cmd only prints the peer ID and your information. If provided, the nickname will be updated\n\n2. Get your relay-aware address (relay-circuit address):\n\n```\n/dns4/aqua-relay.mistermorph.com/tcp/6372/p2p/12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E/p2p-circuit/p2p/<YOUR_PEER_ID>\n```\n\nin which, `<YOUR_PEER_ID>` is the peer ID printed by `aqua id` command. Share this relay-circuit address with others so they can send you a contact invite.\n\n3. Serve for listening and message handling\n\n```bash\naqua serve --relay-mode auto \\\n  --relay /dns4/aqua-relay.mistermorph.com/tcp/6372/p2p/12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E \\\n  --relay /dns4/aqua-relay.mistermorph.com/udp/6372/quic-v1/p2p/12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E\n```\n\nIf you can't run `serve` cmd as a background process, you can use `nohup` or `systemd` or similar tools to manage the process lifecycle in environments.\n\n4. Send a contact invite using the other's relay-circuit address and include your own relay-circuit address:\n\n```bash\naqua contacts invite /dns4/aqua-relay.mistermorph.com/tcp/6372/p2p/12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E/p2p-circuit/p2p/<TARGET_PEER_ID> \\\n  --address /dns4/aqua-relay.mistermorph.com/tcp/6372/p2p/12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E/p2p-circuit/p2p/<YOUR_PEER_ID> \\\n  --verify\n```\n\nin which,\n* `--address` exports your local signed contact card with a dialable address so the other side can accept and add you back.\n* `--verify` is only recommended for trust establishment, but requires out-of-band confirmation of the peer's identity. If the other side accepts, both contacts become `verified`. Omit `--verify` to establish `tofu`.\n* `<TARGET_PEER_ID>` is the peer ID of the peer you want to communicate with.\n\n5. On the receiver side, inspect and accept the pending invite:\n\n```bash\naqua contacts invites\naqua contacts invite accept <REQUESTER_PEER_ID> \\\n  --address /dns4/aqua-relay.mistermorph.com/tcp/6372/p2p/12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E/p2p-circuit/p2p/<YOUR_PEER_ID>\n```\n\n6. Send message via `aqua send`:\n\n```bash\naqua send <TARGET_PEER_ID> \"hello via relay\"\n```\n\n7. Check unread messages:\n\n```bash\naqua inbox list --unread\naqua inbox watch --once --mark-read --json\n```\n\n## Quick Start with Direct communication (for peers in the same network or with public addresses)\n\n1. Get your peer ID and optionally set a nickname:\n\n```bash\naqua id <nickname>\n```\n\n* `<nickname>` is optional. If omitted, the cmd only prints the peer ID and your information. If provided, the nickname will be updated\n\n\n2. check your direct multiaddrs for sharing:\n\n```bash\naqua serve --dryrun\n```\n\nthis command will print the multiaddrs that your peer is listening on, which usually includes local network addresses (e.g., `/ip4/192.168.x.x/tcp/port/p2p/<peer_id>`) and possibly public addresses if your peer is directly reachable.\n\n3. Start serve for listening and message handling:\n\n```bash\naqua serve\n```\n\nIf you can't run `serve` cmd as a background process, you can use `nohup` or `systemd` or similar tools to manage the process lifecycle in environments.\n\n\n4. Send a contact invite using the other's address and include one of your own dialable addresses:\n\n```bash\naqua contacts invite \"<TARGET_PEER_ADDR>\" --address \"<YOUR_PEER_ADDR>\" --verify\n```\n\n* `--verify` is only recommended for trust establishment, but requires out-of-band confirmation of the peer's identity. If accepted, both contacts become `verified`. Omit `--verify` to establish `tofu`.\n* `<TARGET_PEER_ADDR>` is other's direct address. Could be printed by `serve --dryrun`.\n* `<YOUR_PEER_ADDR>` should also come from your own `serve --dryrun` or explicit `--listen` planning.\n\n5. On the receiver side, inspect and accept the pending invite:\n\n```bash\naqua contacts invites\naqua contacts invite accept <REQUESTER_PEER_ID> --address \"<YOUR_PEER_ADDR>\"\n```\n\n6. Send:\n\n```bash\naqua send <PEER_ID> \"hello\"\n```\n\n7. Check unread messages:\n\n```bash\naqua inbox list --unread\naqua inbox watch --once --mark-read --json\n```\n\n## Sending Message Operations\n\nSend message:\n\n```bash\naqua send <PEER_ID> \"message content\"\n```\n\nUse explicit topic/content type when needed:\n\n```bash\naqua send <PEER_ID> \"{\\\"event\\\":\\\"greeting\\\"}\" \\\n  --content-type application/json\n```\n\nReply threading metadata (optional):\n\n```bash\naqua send <PEER_ID> \"reply text\" --reply-to <MESSAGE_ID>\n```\n\nSend message in a session (optional, for dialogue semantics):\n\n```bash\naqua send <PEER_ID> \"message content\" --session-id <SESSION_ID>\n```\n\n## Group Operations\n\nCreate and inspect groups:\n\n```bash\naqua group create --json\naqua group list --json\naqua group show <GROUP_ID> --json\n```\n\nManage invites and membership:\n\n```bash\naqua group invite <GROUP_ID> <PEER_ID> --json\naqua group invites --json\naqua group invite accept <GROUP_ID> --json\naqua group invite reject <GROUP_ID> --json\n```\n\nSend a group message:\n\n```bash\naqua group send <GROUP_ID> \"hello group\" --json\n```\n\nNotes:\n\n- `aqua group invite` now creates a local pending invite and also delivers it over Aqua transport by default.\n- Invite delivery only creates a pending invite record on the receiver; local group state is materialized on `accept`.\n- Remote invite delivery requires both peers to have each other in contacts and the invitee to be running `aqua serve`.\n- With no flags, `aqua group invites --json` shows pending incoming invites for the local peer.\n- `aqua group invite accept <GROUP_ID>` / `reject <GROUP_ID>` resolve the local peer's only pending incoming invite by default; pass `<INVITE_ID>` only when there is ambiguity.\n- `aqua group invite accept` / `reject` notify the inviter by default; add `--local-only` to skip network delivery.\n- Current `aqua group send` is sender-side fanout to known members.\n- Incoming group messages use topic `group.message.v1`.\n- For agent mailbox processing, filter group traffic with:\n\n```bash\naqua inbox list --topic group.message.v1 --unread --json\naqua inbox watch --topic group.message.v1 --mark-read --json\n```\n\n## Check inbox and outbox\n\nInbox (received):\n\n```bash\naqua inbox list --unread --limit 20\naqua inbox list --limit 20\naqua inbox list --from-peer-id <PEER_ID> --limit 20\naqua inbox watch --once --mark-read --json\naqua inbox watch --batch-window 30s --json\n```\n\n* `aqua inbox list --unread` is a pure unread filter and does not change message state.\n* Use `aqua inbox mark-read <MESSAGE_ID>...` for explicit acknowledgement.\n* Use `aqua inbox watch --mark-read` when an agent should wake on arrival and acknowledge after consuming output.\n\nOutbox (sent):\n\n```bash\naqua outbox list --limit 20\naqua outbox list --to-peer-id <PEER_ID> --limit 20\n```\n\n## JSON Mode (Agent-Friendly)\n\nAll commands that output data support `--json` for structured output, which is recommended for agent consumption and integration.\n\n```bash\naqua id --json\naqua contacts list --json\naqua send <PEER_ID> \"hello\" --json\naqua inbox list --limit 10 --json\naqua inbox watch --once --mark-read --json\n```\n\n## Agent Mailbox Patterns\n\nHeartbeat / polling mode:\n\n```bash\naqua inbox list --unread --json\n```\n\nHot wake mode:\n\n```bash\naqua inbox watch --once --mark-read --json\n```\n\nBusy but do-not-disturb-every-message mode:\n\n```bash\naqua inbox watch --batch-window 30s --mark-read --json\n```\n\nWebhook-driven mode for agents that can supervise `serve` as a daemon:\n\n```bash\naqua serve --webhook https://agent-runtime.example/hooks/aqua\n```\n\nNotes:\n\n- `watch` emits unread messages only.\n- Without `--mark-read`, emitted messages remain unread.\n- `--batch-window` trades a little latency for fewer wakeups.\n- `--webhook` is useful when your agent platform prefers HTTP callbacks over a foreground CLI watch loop.\n- Webhook requests are `POST` with JSON body matching the `aqua serve --json` event view for both `agent.data.push` and `agent.contact.push`.\n- Aqua retries webhook delivery in memory with exponential backoff on network errors or non-2xx responses.\n- Webhook delivery is a wakeup/integration path, not a replacement for inbox durability. Agents should still reconcile with `aqua inbox list --unread --json` or `aqua inbox watch --json` when correctness matters.\n\n## Webhook-Driven Agent Integration\n\nUse webhook mode when the agent runtime can launch and supervise a long-lived `aqua serve` daemon and already has an HTTP event intake path.\n\nRecommended pattern:\n\n1. Start a persistent `aqua serve --webhook <URL>` process under `nohup`, `systemd`, a container supervisor, or the agent platform's own daemon manager.\n2. Treat webhook callbacks as wakeup signals for new inbound traffic.\n3. Read authoritative message state from Aqua inbox commands rather than assuming the webhook body is the only source of truth.\n4. Mark messages read only after successful agent-side consumption.\n\nExample:\n\n```bash\nnohup aqua serve --relay-mode auto \\\n  --relay /dns4/aqua-relay.mistermorph.com/tcp/6372/p2p/12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E \\\n  --relay /dns4/aqua-relay.mistermorph.com/udp/6372/quic-v1/p2p/12D3KooWSYjt4v1exWDMeN7SA4m6tDxGVNmi3cCP3zzcW2c5pN4E \\\n  --webhook https://agent-runtime.example/hooks/aqua >/tmp/aqua-serve.log 2>&1 &\n```\n\n## Contacts Management\n\nList contacts:\n\n```bash\naqua contacts list\n```\n\nInspect pending incoming contact invites:\n\n```bash\naqua contacts invites\n```\n\nShow all local contact invite history:\n\n```bash\naqua contacts invites --all --json\n```\n\nInvite a contact:\n\n```bash\naqua contacts invite \"<PEER_ADDR>\" --address \"<YOUR_ADDR>\" --verify\n```\n\nAccept a pending contact invite:\n\n```bash\naqua contacts invite accept <REQUEST_ID|PEER_ID> --address \"<YOUR_ADDR>\"\n```\n\nReject a pending contact invite:\n\n```bash\naqua contacts invite reject <REQUEST_ID|PEER_ID>\n```\n\nRemove contact:\n\n```bash\naqua contacts del <PEER_ID>\n```\n\nVerify contact (mark as trusted after out-of-band confirmation):\n\n```bash\naqua contacts verify <PEER_ID>\n```\n\n## Troubleshooting Checklist\n\n- `contact not found`:\n  - Run `aqua contacts list`\n  - Inspect pending requests with `aqua contacts invites`\n  - Create or accept a contact invite with `aqua contacts invite ...` / `aqua contacts invite accept ...`\n- Cannot dial peer:\n  - Confirm peer process is running: `aqua serve`\n  - Re-check copied address and `/p2p/<peer_id>` suffix\n  - For diagnosis only, try explicit dial once: `aqua hello <PEER_ID> --address <PEER_ADDR>`\n- Message not visible:\n  - Check receiver terminal running `aqua serve`\n  - Inspect receiver inbox: `aqua inbox list --limit 20`\n\n## Common Connection Errors and Causes\n\nThe table below lists common runtime errors from the current implementation.\nNote: errors starting with `ERR_` are protocol-level (`ProtocolError`) symbols. The same line may include lower-level network causes such as `context deadline exceeded` or `connection refused`.\n\n### 1) General operations\n\n| Typical error (example) | Likely cause |\n| --- | --- |\n| `ERR_UNAUTHORIZED: peer is not in contacts` | Target peer is not in local contacts. Create and accept a contact invite first with `aqua contacts invite ...` and `aqua contacts invite accept ...`. |\n| `ERR_UNAUTHORIZED: peer trust_state=conflicted` / `...=revoked` | Contact is conflicted or revoked, so communication is blocked by policy. |\n| `ERR_INVALID_PARAMS: peer_id is required` | Missing `<peer_id>` in command arguments. |\n| `ERR_INVALID_PARAMS: invalid peer_id: ...` | `<peer_id>` is not a valid libp2p peer id. |\n| `ERR_INVALID_PARAMS: no dial addresses available` | No `--address` provided and no usable address in the contact card. |\n| `ERR_INVALID_CONTACT_CARD: multiaddr \"... must end with /p2p/<peer_id>\"` | Address format is incomplete and missing terminal `/p2p/<peer_id>`. |\n| `ERR_INVALID_CONTACT_CARD: multiaddr \"... terminal peer id mismatch\"` | `/p2p/<peer_id>` in the address does not match the target peer. |\n| `connect to <peer_id> failed: no dial addresses for relay_mode=<mode>` | Relay mode and address set do not match, for example `required` mode without `/p2p-circuit` addresses. |\n| `connect to <peer_id> failed: direct(...): ...; relay(...): ...` | Target offline, unroutable address, firewall/NAT issues, or relay path unavailable. |\n| `open hello stream: ...` / `open rpc stream: ...` | Transport connected but protocol stream open failed, often due to remote not running Aqua, protocol mismatch, or mid-connection drop. |\n| `ERR_PEER_ID_MISMATCH: remote peer mismatch ...` | Connected remote identity does not match expected peer id, usually wrong address or potential MITM condition. |\n| `ERR_UNSUPPORTED_PROTOCOL: hello negotiation required before rpc` | Remote requires hello/session negotiation before RPC. Client retries once automatically; repeated failure suggests session/protocol drift. |\n| `ERR_UNSUPPORTED_PROTOCOL: no protocol overlap` | No overlapping protocol version range between peers. |\n| `response missing jsonrpc` / `response error must be object` | Remote returned a non-conforming JSON-RPC payload. |\n\n### 2) Message handling (`aqua serve`)\n\n| Typical error (example) | Likely cause |\n| --- | --- |\n| `invalid --log-level \"...\" (supported: debug, info, warn, error)` | Invalid global log level flag. |\n| `invalid --relay-mode \"...\" (supported: auto, off, required)` | Invalid relay mode flag value. |\n| `invalid AQUA_RELAY_PROBE=\"...\" (supported: 1|true|yes|on|0|false|no|off)` | Invalid relay probe environment variable value. |\n| `create libp2p host: ...` | Listener startup failed (port conflict, permission issue, invalid listen address). |\n| `create libp2p host: default listen failed (...); fallback listen failed (...)` | Both default and fallback listen address sets failed to bind. |\n| `connect to <peer_id> failed: no dial addresses for relay_mode=<mode>` | Relay mode and available address types do not match. |\n| `connect to <peer_id> failed: direct(...): ...; relay(...): ...` | Dial attempts failed on both direct and relay paths. |\n| `open rpc stream: ...` | Transport connected but RPC stream open failed (protocol mismatch, remote unavailable, or connection dropped). |\n| `read rpc response: ...` | RPC stream read timed out or was closed by remote. |\n| `ERR_PAYLOAD_TOO_LARGE: rpc request exceeds limit` / `... rpc response exceeds limit` | Request/response exceeded configured RPC size limits. |\n| `ERR_UNSUPPORTED_PROTOCOL: no protocol overlap` | Protocol negotiation failed due to incompatible version ranges. |\n| `ERR_UNSUPPORTED_PROTOCOL: hello negotiation required before rpc` | Remote requires a fresh hello/session before RPC. |\n| `response missing jsonrpc` / `response error must be object` | Remote returned a malformed JSON-RPC payload. |\n| `invalid relay address \"...\": ...` | `--relay` value is not a valid relay multiaddr or is missing required parts. |\n| `relay address \"...\" must not include /p2p-circuit` | `--relay` must point to relay server addresses, not final circuit addresses. |\n| `relay peer_id <id> matches local peer_id; use a dedicated relay identity ...` | Local node is accidentally configured as its own relay identity. Use a separate relay identity/data dir. |\n| `reserve relays: no relay reservation succeeded` | In `--relay-mode required`, all relay reservations failed (unreachable relay, ACL denial, capacity limit, etc.). |\n\n### 3) Group operations (`aqua group`)\n\n| Typical error (example) | Likely cause |\n| --- | --- |\n| `group_id is required` / `invite_id is required` | Required argument is missing or empty. |\n| `group not found: <group_id>` | Group does not exist in local state. |\n| `group <group_id> requires manager role` | Current local role is not manager for a manager-only action such as invite. |\n| `peer is already a group member: <peer_id>` | Duplicate invite for an existing member. |\n| `group member limit reached: <n>` | Group has reached max member capacity. |\n| `invite not found: <invite_id>` | Invite id does not exist in that group. |\n| `invite is already terminal: accepted/rejected/expired` | Invite has already reached a terminal state and cannot be transitioned again. |\n| `invite expired` | Invite TTL has passed. |\n| `invite can be resolved only by invitee or manager` | Only invitee or group manager may accept/reject that invite. |\n| `local peer is not an active member of group <group_id>` | Local peer is not an active member, so it cannot send to that group. |\n| `failure: peer_id=<id> err=...` (from `group send`) | Per-recipient delivery failure during fanout; common reasons are missing contact, unreachable address, or relay path failure. |\n\n## Trust Practice\n\nUse `--verify` only after out-of-band fingerprint/identity confirmation.","tags":["aqua","quailyquaily","agent-skills","agent-tools","ai-agents"],"capabilities":["skill","source-quailyquaily","skill-aqua","topic-agent-skills","topic-agent-tools","topic-ai-agents"],"categories":["aqua"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/quailyquaily/aqua","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add quailyquaily/aqua","source_repo":"https://github.com/quailyquaily/aqua","install_from":"skills.sh"}},"qualityScore":"0.577","qualityRationale":"deterministic score 0.58 from registry signals: · indexed on github topic:agent-skills · 253 github stars · SKILL.md body (18,396 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T18:55:26.614Z","embedding":null,"createdAt":"2026-04-18T23:44:41.534Z","updatedAt":"2026-04-22T18:55:26.614Z","lastSeenAt":"2026-04-22T18:55:26.614Z","tsv":"'/dns4/aqua-relay.mistermorph.com/tcp/6372/p2p/12d3koowsyjt4v1exwdmen7sa4m6tdxgvnmi3ccp3zzcw2c5pn4e':203,316,1437 '/dns4/aqua-relay.mistermorph.com/tcp/6372/p2p/12d3koowsyjt4v1exwdmen7sa4m6tdxgvnmi3ccp3zzcw2c5pn4e/p2p-circuit/p2p':273,371,373,463 '/dns4/aqua-relay.mistermorph.com/udp/6372/quic-v1/p2p/12d3koowsyjt4v1exwdmen7sa4m6tdxgvnmi3ccp3zzcw2c5pn4e':206,318,1439 '/hooks/aqua':1222,1443 '/ip4/192.168.x.x/tcp/port/p2p':572 '/p2p':1581,1761,1769,1779 '/p2p-circuit':1811,2166 '/quailyquaily/aqua/refs/heads/master/scripts/install.sh;':217 '/tmp/aqua-serve.log':1444 '/tmp/install.sh':214,220 '0':1978 '1':228,508,1362,1446,1655,1974 '10':1148 '12d3koowsyjt4v1exwdmen7sa4m6tdxgvnmi3ccp3zzcw2c5pn4e':139,154,198 '2':262,542,1384,1445,1932 '20':1018,1023,1032,1099,1108,1609 '2xx':1297 '3':301,583,1395,2228 '30s':1047,1198 '4':346,621,1416 '5':443,698 '6':464,718 '7':476,724 'accept':393,421,450,461,665,705,716,830,884,923,945,1485,1494,1553,1564,1679,1692 'accept/reject':2352 'accepted/rejected/expired':2318 'accident':2193 'acknowledg':1072,1088 'acl':2223 'act':61 'action':2277 'activ':2360,2369 'add':395,952 'address':268,272,290,358,366,372,377,387,462,507,570,576,630,638,643,679,717,1483,1499,1579,1592,1740,1743,1748,1762,1782,1794,1801,1812,1821,1873,2000,2015,2025,2033,2147,2162,2173,2177,2398 'agent':14,27,59,64,980,1082,1112,1128,1158,1208,1252,1311,1332,1339,1378,1424 'agent-friend':1111 'agent-runtime.example':1221,1442 'agent-runtime.example/hooks/aqua':1220,1441 'agent-sid':1423 'agent.contact.push':1281 'agent.data.push':1279 'ai':13 'alreadi':1353,2283,2316,2321 'also':687,859 'ambigu':941 'annot':165 'application/json':765 'aqua':2,4,16,42,47,66,71,76,82,87,99,123,136,138,149,153,172,208,239,282,309,368,455,458,468,471,481,485,519,550,592,640,710,713,721,729,733,747,758,771,788,802,806,810,819,823,827,832,842,849,863,903,908,920,942,961,988,996,1013,1019,1024,1033,1041,1049,1065,1074,1095,1100,1133,1136,1140,1144,1150,1165,1174,1192,1217,1272,1282,1316,1322,1349,1366,1401,1430,1452,1461,1471,1480,1491,1506,1517,1532,1541,1548,1558,1561,1573,1590,1600,1605,1685,1689,1847,1935,1970,2231 'aqua-commun':1 'aqua-relay.mistermorph.com':193 'argument':1721,2247 'arriv':1086 'assum':1406 'attempt':2044 'authorit':1397 'auto':314,1435,1961 'automat':1895 'avail':1741,2032 'awar':267 'back':397 'background':328,603 'backoff':1290 'band':410,657,1529,2412 'bash':210,219,238,308,367,454,470,480,518,549,591,639,709,720,728,746,757,770,787,801,818,841,987,1012,1094,1132,1164,1173,1191,1216,1428,1451,1460,1470,1479,1490,1505,1516,1531 'batch':1045,1196,1238 'batch-window':1044,1195,1237 'becom':424,668 'bind':2019 'block':1708 'bodi':1269,1409 'busi':1182 'callback':1256,1387 'cannot':1565,2327,2373 'capac':2225,2302 'card':383,1752,1756,1773 'caus':1614,1646,1662,1941,2237 'chang':1061 'check':477,543,725,1006,1577,1596 'checklist':1536 'circuit':271,289,357,365,2176 'cli':8,17,209,1260 'cli-first':7 'client':1892 'close':2079 'cmd':173,246,325,526,600 'come':688 'command':284,554,1115,1403,1720 'common':1610,1619,2392 'communic':3,43,52,441,497,1706 'condit':1877 'configur':2096,2194 'confirm':411,658,1530,1568,2414 'conflict':1698,1702,1995 'conform':1927 'connect':1611,1653,1789,1813,1835,1853,1862,2020,2038,2056,2067 'consum':1090 'consumpt':1129,1426 'contact':22,299,349,369,382,423,456,459,624,641,667,711,714,896,1137,1447,1450,1453,1458,1462,1467,1472,1478,1481,1488,1492,1503,1507,1515,1518,1521,1533,1537,1542,1549,1555,1559,1562,1669,1676,1681,1686,1690,1700,1751,1755,1772,2396 'contain':1374 'content':750,763,791 'content-typ':762 'context':183,1649 'copi':1578 'correct':1327 'could':680 'creat':797,804,853,870,1551,1677,1988,2001 'curl':211 'current':960,1624,2266 'daemon':111,1215,1351,1382 'data':1118 'deadlin':1650 'debug':1947 'dedic':2187 'default':186,866,935,951,2004,2011 'del':1519 'deliv':860 'deliveri':868,887,959,1285,1300,2388 'denial':2224 'diagnosi':1584 'dial':1566,1588,1739,1793,2024,2043 'dialabl':386,637 'dialogu':785 'dir':2205 'direct':496,545,581,678,1816,2041,2048 'display':170 'disturb':1187 'do-not-disturb-every-messag':1184 'drift':1900 'drive':26 'driven':95,1205,1331 'drop':1854,2068 'dryrun':552,685,693 'due':1842,2109 'duplic':2287 'durabl':1310 'e.g':137,150,571 'emit':1225,1233 'empti':2251 'end':1759 'endpoint':201 'environ':345,620,1985 'err':1630,1663,1693,1711,1722,1735,1753,1770,1855,1878,1901,2082,2100,2114,2381 'error':1293,1612,1621,1627,1659,1918,1938,1950,2133,2234 'establish':49,404,429,651,673 'etc':2227 'event':760,1275,1357 'everi':1188 'exampl':1427,1660,1807,1939,2235 'exceed':1651,2088,2092,2095 'exchang':19,54 'exist':2258,2291,2310 'expect':1868 'expir':2332 'explicit':695,752,1071,1587 'exponenti':1289 'export':378 'fail':1791,1815,1840,1993,2006,2009,2017,2022,2040,2045,2061,2108,2220 'failur':1897,2378,2389,2402 'fallback':2007,2013 'fals':1979 'fanout':968,2391 'fewer':1245 'file':131,185 'filter':983,1057 'final':2175 'find':176 'fingerprint/identity':2413 'firewall/nat':1822 'first':9,1683 'flag':907,1955,1967 'foreground':1259 'format':135,1763 'found':1539,2254,2305 'fresh':2125 'friend':169,1113 'from-peer-id':1027 'fssl':212 'general':1656 'get':229,263,509 'global':1952 'goal':45 'greet':761 'group':795,800,803,807,811,820,824,828,833,839,843,846,850,879,909,921,943,962,973,984,2229,2232,2238,2252,2255,2262,2285,2293,2297,2313,2349,2363,2377,2383 'group.message':977,992,1000 'handl':307,590,1934 'heartbeat':1161 'hello':473,723,845,1142,1591,1829,1881,2117 'hello/session':1888,2126 'histori':1469 'host':189,1990,2003 'hot':1170 'http':114,1255,1356 'human':168 'human-friend':167 'id':125,197,232,240,251,279,283,434,512,520,531,794,1030,1106,1134,1496,1498,1511,1513,1715,1727,1734,1777,1857,1870,2180,2184,2239,2243,2307,2380 'ident':116,416,663,1864,2189,2199 'identifi':127 'identity/data':2204 'implement':1625 'inbound':1393 'inbox':28,77,83,88,94,482,486,730,734,989,997,1007,1010,1014,1020,1025,1034,1042,1050,1066,1075,1145,1151,1166,1175,1193,1309,1317,1323,1402,1604,1606 'inbox-driven':93 'includ':360,567,632,1641,2165 'incom':914,932,972,1457 'incompat':2111 'incomplet':1765 'info':1948 'inform':254,534 'inspect':448,703,799,1455,1544,1602 'instal':207 'intak':1358 'integr':41,1131,1333 'invalid':1712,1723,1725,1736,1754,1771,1942,1951,1956,1964,1969,1982,1998,2145 'invit':24,300,350,370,453,457,460,625,642,708,712,715,815,821,825,829,834,851,857,867,873,886,910,915,922,933,944,949,1459,1463,1468,1473,1476,1482,1489,1493,1504,1508,1550,1556,1560,1563,1682,1687,1691,2242,2280,2288,2303,2306,2314,2319,2331,2333,2337,2354 'invite':899,2343,2347 'issu':1823,1997 'john':151 'json':492,740,805,809,813,822,826,831,836,847,911,995,1005,1040,1048,1109,1120,1135,1139,1143,1149,1157,1169,1181,1202,1268,1274,1320,1325,1475,1929,2142 'json-rpc':1928,2141 'jsonrpc':1916,2131 'kind':178 'known':970 'larg':2085 'latenc':1243 'launch':1342 'level':1634,1644,1945,1954 'libp2p':1732,1989,2002 'lifecycl':343,618 'like':147,1661,1940,2236 'limit':1017,1022,1031,1098,1107,1147,1608,2089,2093,2099,2226,2295 'line':1639 'list':84,483,731,808,990,1015,1021,1026,1051,1097,1102,1138,1146,1167,1318,1449,1454,1543,1607,1618 'listen':304,563,587,696,1991,1999,2005,2008,2014 'littl':1242 'live':110,1348 'local':69,380,568,855,878,918,927,954,1466,1675,2182,2190,2260,2267,2355,2364 'local-on':953 'log':1944,1953 'log-level':1943 'long':109,1347 'long-liv':108,1346 'loop':97,1262 'lower':1643 'lower-level':1642 'mailbox':70,981,1159 'malform':2140 'manag':21,340,615,814,1383,1448,2264,2271,2275,2345,2350 'manager-on':2274 'mark':34,90,490,738,1003,1038,1068,1078,1155,1179,1200,1231,1417,1522 'mark-read':33,89,489,737,1002,1037,1067,1077,1154,1178,1199,1230 'markdown':146 'markdown-lik':145 'match':1270,1785,1805,1867,2037,2181 'materi':882 'matter':1328 'max':2300 'may':1640,2351 'member':971,2286,2292,2294,2301,2361,2370 'membership':817 'memori':1287 'messag':10,20,55,306,466,479,589,727,742,745,749,779,790,840,974,1062,1189,1227,1234,1398,1418,1593,1933 'metadata':768 'mid':1852 'mid-connect':1851 'mismatch':1778,1849,1858,1861,2063 'miss':1718,1767,1915,2130,2158,2249,2395 'mitm':1876 'mode':192,313,1110,1163,1172,1190,1206,1336,1434,1797,1799,1809,1959,1966,2028,2030,2215 'multiaddr':546,558,1757,1774,2155 'must':1758,1919,2134,2163,2168 'need':756 'negoti':1882,1889,2107,2118 'network':503,569,958,1292,1645 'new':1392 'nicknam':141,237,258,517,538 'node':226,2191 'nohup':333,608,1371,1429 'non':1296,1926 'non-2xx':1295 'non-conform':1925 'note':848,1223,1626 'notifi':947 'o':213 'object':1921,2136 'offici':187,194,199,224 'offlin':1819 'often':1841 'omit':244,426,524,670 'one':633 'open':1828,1831,1839,2052,2060 'oper':743,796,1657,2230 'option':98,164,234,242,514,522,769,783 'other':292 'out-of-band':407,654,1526,2409 'outbox':1009,1092,1096,1101 'output':1091,1117,1123 'overlap':1906,1908,2105 'param':1713,1724,1737 'part':2160 'pass':936,2336 'path':1304,1359,1826,2051,2401 'pattern':1160,1361 'payload':1931,2083,2144 'peer':51,124,129,196,231,250,278,414,433,437,499,511,530,561,579,661,890,919,928,1029,1105,1497,1512,1567,1569,1665,1671,1695,1714,1726,1733,1776,1788,1856,1860,1869,1913,2179,2183,2281,2356,2365,2379 'pend':452,707,856,872,913,931,1456,1487,1502,1545 'per':2386 'per-recipi':2385 'permiss':1996 'persist':1365 'plan':697 'platform':1253,1379 'point':2169 'polici':1710 'poll':1162 'port':1994 'possibl':574 'post':1266 'potenti':1875 'practic':2404 'prefer':113,1254 'print':248,280,528,556,682 'probe':1972,1984 'process':329,342,604,617,982,1369,1570 'prompt':80 'protocol':1633,1837,1848,1880,1903,1905,1909,2062,2102,2104,2106,2116 'protocol-level':1632 'protocolerror':1635 'provid':256,536,1744 'public':506,575 'pure':1055 'quic':205 'quick':221,493 'rang':1911,2113 'rather':1404 'raw.githubusercontent.com':216 'raw.githubusercontent.com/quailyquaily/aqua/refs/heads/master/scripts/install.sh;':215 're':1576 're-check':1575 'reach':2296,2299,2322 'reachabl':582 'read':35,91,491,739,1004,1039,1069,1079,1156,1180,1201,1232,1396,1419,2069,2074 'reason':2393 'receiv':74,446,701,877,1011,1597,1603 'recipi':2387 'recommend':227,401,648,1126,1360 'reconcil':1314 'record':874 'refus':1654 'reject':835,924,946,1500,1509 'relay':188,191,195,200,225,266,270,288,312,315,317,356,364,475,1433,1436,1438,1796,1798,1817,1825,1958,1965,1971,1983,2027,2029,2042,2050,2146,2148,2154,2161,2167,2171,2178,2188,2198,2203,2207,2209,2214,2218,2222,2400 'relay-awar':265 'relay-circuit':269,287,355,363 'relay-mod':311,1432,1957,2213 'reliabl':56 'remain':1235 'remot':885,1844,1859,1863,1886,1922,2064,2081,2122,2137 'remov':1514 'repeat':1896 'replac':1307 'repli':766,773,776 'reply-to':775 'request':1264,1495,1510,1546,2087 'request/response':2094 'requir':406,653,888,1717,1808,1883,1887,1963,2119,2123,2159,2216,2241,2245,2246,2263 'reserv':2206,2210,2219 'resolv':925,2340 'respons':1298,1914,1917,2071,2091,2129,2132 'retri':1283,1893 'return':1923,2138 'revok':1699,1704 'role':2265,2268 'rpc':1832,1885,1891,1930,2053,2058,2070,2072,2086,2090,2097,2121,2128,2143 'run':323,598,902,1540,1572,1599,1846 'runtim':104,1340,1620 'semant':786 'send':296,347,465,469,472,622,719,722,741,744,748,759,772,778,789,837,844,963,1141,2374,2384 'sender':966 'sender-sid':965 'sent':1093 'separ':2202 'serv':40,72,100,302,310,324,551,585,593,599,684,692,904,1212,1218,1273,1350,1367,1431,1574,1601,1936 'server':2172 'session':782,793 'session-id':792 'session/protocol':1899 'set':235,515,1802,2016 'share':285,548 'show':812,912,1464 'side':391,420,447,702,967,1425 'sign':381 'signal':1390 'similar':337,612 'size':2098 'skill':44 'skill-aqua' 'skip':957 'sourc':158,1413 'source-quailyquaily' 'specifi':143 'start':222,494,584,1363,1628 'startup':1992 'state':880,1063,1399,1697,2261,2325 'still':1313 'storag':133 'stream':1830,1833,1838,2054,2059,2073 'structur':1122 'succeed':2211 'success':1422 'sudo':218 'suffix':1582 'suggest':1898 'supervis':106,1211,1344 'supervisor':1375 'support':1119,1946,1960,1973 'symbol':1636 'syntax':117,148,180 'systemd':335,610,1372 'tabl':1616 'target':1670,1787,1818 'tcp':202 'termin':1598,1768,1775,2317,2324 'text':774 'thread':767 'time':2075 'to-peer-id':1103 'tofu':430,674 'tool':11,338,613 'topic':976,991,999 'topic-agent-skills' 'topic-agent-tools' 'topic-ai-agents' 'topic/content':753 'trade':1240 'traffic':75,985,1394 'transit':2329 'transport':68,864,1834,2055 'treat':65,1385 'tri':1586 'trigger':39 'troubleshoot':1535 'true':1975 'trust':50,403,650,1524,1696,2403 'truth':160,1415 'ttl':2334 'type':754,764,2034 'typic':1658,1937,2233 'udp':204 'unauthor':1664,1694 'unavail':1827,2065 'unreach':2221,2397 'unread':31,85,478,484,726,732,994,1016,1052,1056,1168,1226,1236,1319 'unrout':1820 'unsupport':1879,1902,2101,2115 'updat':261,541 'usabl':1747 'use':15,46,122,134,144,171,332,351,607,626,751,975,1064,1073,1249,1334,2185,2200,2405 'usual':566,1871 'v1':978,993,1001 'valid':1731,2153 'valu':1968,1987,2149 'variabl':1986 'verifi':374,398,425,427,644,645,669,671,1484,1520,1534,2406 'version':1910,2112 'via':467,474 'view':1276 'visibl':1595 'wake':1084,1171 'wakeup':81,115,1246,1389 'wakeup/integration':1303 'want':120,439 'warn':1949 'watch':32,78,487,735,998,1035,1043,1076,1152,1176,1194,1224,1261,1324 'webhook':38,101,1204,1219,1247,1263,1284,1299,1330,1335,1368,1386,1408,1440 'webhook-driven':1203,1329 'webhook-trigg':37 'wick':152 'window':1046,1197,1239 'without':1229,1810 'work':96 'workflow':29 'wrong':1872 'yes':1976","prices":[{"id":"8c5bffb6-7183-4c43-8180-556fc3da64c8","listingId":"ea20b168-0fc5-49f2-b0a9-319c1e90562c","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"quailyquaily","category":"aqua","install_from":"skills.sh"},"createdAt":"2026-04-18T23:44:41.534Z"}],"sources":[{"listingId":"ea20b168-0fc5-49f2-b0a9-319c1e90562c","source":"github","sourceId":"quailyquaily/aqua","sourceUrl":"https://github.com/quailyquaily/aqua","isPrimary":false,"firstSeenAt":"2026-04-18T23:44:41.534Z","lastSeenAt":"2026-04-22T18:55:26.614Z"}],"details":{"listingId":"ea20b168-0fc5-49f2-b0a9-319c1e90562c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"quailyquaily","slug":"aqua","github":{"repo":"quailyquaily/aqua","stars":253,"topics":["agent-skills","agent-tools","ai-agents"],"license":"apache-2.0","html_url":"https://github.com/quailyquaily/aqua","pushed_at":"2026-03-24T06:37:14Z","description":"Aqua, a cli message tool for AI agents ","skill_md_sha":"e48ad2b02b8d7ca27bbbff46631553256fdae687","skill_md_path":"SKILL.md","default_branch":"master","skill_tree_url":"https://github.com/quailyquaily/aqua"},"layout":"root","source":"github","category":"aqua","frontmatter":{"name":"aqua-communication","description":"Aqua is a CLI-first message tool for AI agents. Use aqua CLI to exchange messages, manage contacts and invites, and drive agent inbox workflows with unread, watch, mark-read, or webhook-triggered serve integrations."},"skills_sh_url":"https://skills.sh/quailyquaily/aqua"},"updatedAt":"2026-04-22T18:55:26.614Z"}}