Skip to content

std: add caos-conversation-list tool - #309

Merged
malcolmredheron merged 11 commits into
mainfrom
claude/caos-conversation-list
Oct 5, 2026
Merged

malcolmredheron merged 11 commits into
mainfrom
claude/caos-conversation-list

Conversation

@malcolmredheron

@malcolmredheron malcolmredheron commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

What

Adds std/caos-conversation-list, a tool that lists the conversations recorded on the server, newest first. std/caos-conversation can read one conversation but needs its tip hash; nothing could produce that hash before.

Each line has the UTC time of the last message, the conversation id, the tip commit hash, the title, and user:active / user:archived membership when there is any:

2026-10-03T00:44:51Z  cc/de6ac24a-…  b6a82041…  "Import metta-ai/caos. Then read about where the mcp server …"
2026-10-03T00:43:02Z  cc/86f1e6e6-…  5036546e…  "There's unfinished work on the actors-design branch of mett…"

Parameters: filter (substring of id or title), limit (default 50, 0 for all), titles (set 0 to skip title reads). Because the list is newest first, limit=N is the N most recent.

How

  • Conversations are git refs on the server: refs/caos/v3/conversations/<hex id>/head, plus per-user refs/caos/v3/users/<hex user>/conversations/{active,archived}/<hex id> (see conversation-protocol/src/v3/refs.rs). The worker lists them with git ls-remote against $CAOS_SERVER_URL; std/go already ships git for refs work.
  • The time is the committer time of the tip commit, since refs carry none. Sorting newest first therefore reads every tip commit (one caos get-hash each) before applying limit. Titles are read only for the conversations printed, unless filter is set.
  • Layout follows std/caos-conversation: .caos-expr with the help as a here-string, DEPS on std/go, and worker.go on the w prelude. Every outcome, including an unreachable server, is returned as text rather than a job error. A conversation whose tip cannot be read is still listed, last, with the reason.
  • std/README.md has a row for the tool.

Testing

  • caos-test on this branch's tree: SUITE OK, 49/49 passed (293s), including lint, unit-fmt, unit-clippy, caos-tools, deep-deps and eval-path. The run used the cache, so tests whose inputs did not change replayed earlier results; I did not salt it to force every test to re-run.
  • The suite has no test for this tool, so that result shows the change breaks nothing else, not that the tool works. No tests/ entry is added here.
  • The tool itself was exercised through run_tool against a live server with 59 conversations: ordering, limit, titles and timestamps check out.
  • The members tags were not exercised: none of the conversations printed in my runs had a membership ref.

Related

std/caos-conversation/recording-gaps.md (item 5) says every commit has the same timestamp. That does not hold on the server I tested: tips have distinct committer times, and this tool depends on that. I left the note unchanged here; it may be worth correcting separately.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Qmq9SYrkF8KYc2iZYjtgoh

@malcolmredheron
malcolmredheron merged commit b57d285 into main Oct 5, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant