channel: add 'list' verb to surface active agent channels #10

Closed
opened 2026-06-03 08:51:00 +00:00 by coilysiren · 1 comment
Owner

Ported from closed coilyco-bridge/coily#98. Home moved to otel-a2a-relay-cli - coily's channel surface was removed in coily v2.51.0 so coily stays unaware of o2r. Command prefix below is the o2r-cli binary's own.

Problem

The channel CLI exposes create / read / state / spec / events / post / close, but no list. The backend (otel-a2a-relay channels router, channels/src/otel_a2a_relay_channels/router.py:130) already implements GET /agent-channel?include_closed=false&limit=N, which returns the active set newest-first.

Without a wrapper verb, "pull active agent channels" requires a raw curl with the SSM bearer token, which an agent's auto-mode classifier correctly denies as token exfil to an agent-inferred destination.

Desired surface

channel list [--include-closed] [--limit N] [--format json|yaml|markdown]
  • Default: active only, newest first, capped at the server's 500.
  • Same auth + base-url resolution as the existing verbs (SSM at channel.ssm_token_path, base channel.base_url).
  • Markdown default for human read. json/yaml for piping.

Why now

Phone-dictated "pull active agent channels" is exactly the mobile-first surface that should be one verb, not a curl + token plumb. Every list-style ask either bounces off the classifier or requires naming an id you don't have yet.

Out of scope

Filtering by author / kind / age. Add later if needed. First cut is just the existing backend list.

_Ported from closed coilyco-bridge/coily#98. Home moved to otel-a2a-relay-cli - coily's `channel` surface was removed in coily v2.51.0 so coily stays unaware of o2r. Command prefix below is the o2r-cli binary's own._ **Problem** The channel CLI exposes create / read / state / spec / events / post / close, but no `list`. The backend (otel-a2a-relay channels router, `channels/src/otel_a2a_relay_channels/router.py:130`) already implements `GET /agent-channel?include_closed=false&limit=N`, which returns the active set newest-first. Without a wrapper verb, "pull active agent channels" requires a raw curl with the SSM bearer token, which an agent's auto-mode classifier correctly denies as token exfil to an agent-inferred destination. **Desired surface** ``` channel list [--include-closed] [--limit N] [--format json|yaml|markdown] ``` - Default: active only, newest first, capped at the server's 500. - Same auth + base-url resolution as the existing verbs (SSM at `channel.ssm_token_path`, base `channel.base_url`). - Markdown default for human read. json/yaml for piping. **Why now** Phone-dictated "pull active agent channels" is exactly the mobile-first surface that should be one verb, not a curl + token plumb. Every list-style ask either bounces off the classifier or requires naming an id you don't have yet. **Out of scope** Filtering by author / kind / age. Add later if needed. First cut is just the existing backend list.
Author
Owner

Backlog burndown 2026-06-17: closing low-priority (P3/P4) to bring the open count to a manageable level. Nothing lost — reopen if this resurfaces. Batch tag: burndown-2026-06.

Backlog burndown 2026-06-17: closing low-priority (P3/P4) to bring the open count to a manageable level. Nothing lost — reopen if this resurfaces. Batch tag: `burndown-2026-06`.
coilysiren 2026-06-17 08:23:41 +00:00
Commenting is not possible because the repository is archived.
No description provided.