Terminal demo: three roles, one artifact, one prompt #324

Open
opened 2026-08-23 22:29:09 +00:00 by coilyco-ops · 2 comments
Member

Shoot plan for a short terminal demo showing that role selection changes what an agent attends to. Filed so the design survives the session.

Shape

Same artifact, same prompt, three roles. A values question makes roles converge on "the important thing". Pointing all three at one concrete artifact makes them diverge on what they look at, which is the actual claim of the system.

Cast

Chosen for zero shared personalities, so the divergence is structural rather than tonal, and for color separation on screen.

  • sysadmin - Olaf (he) - protective + grounded - #009895
  • frontend - Delphi (she) - playful + imaginative - #e583f7
  • tpm - Saiya (they) - decisive + outward - #e36966

Prompt

Pasted identically into all three sessions.

Here is the output of agent-compose catalog roles. What is the first thing you would change about it, and why that first?

Expected split

Olaf goes to what happens when it fails on a host. Delphi goes to whether a human can read it. Saiya goes to whether it is worth changing at all this week. If they converge, the demo has found a real problem and that is worth knowing too.

Sequencing

Issue #322 gates this. The demo runs catalog roles on camera, and that command currently prints the personality meld under the label boundary:. Shoot after the label fix lands.

Issue #323 does not gate this.

Shoot plan for a short terminal demo showing that role selection changes what an agent attends to. Filed so the design survives the session. ## Shape Same artifact, same prompt, three roles. A values question makes roles converge on "the important thing". Pointing all three at one concrete artifact makes them diverge on what they look at, which is the actual claim of the system. ## Cast Chosen for zero shared personalities, so the divergence is structural rather than tonal, and for color separation on screen. * `sysadmin` - Olaf (he) - protective + grounded - `#009895` * `frontend` - Delphi (she) - playful + imaginative - `#e583f7` * `tpm` - Saiya (they) - decisive + outward - `#e36966` ## Prompt Pasted identically into all three sessions. > Here is the output of `agent-compose catalog roles`. What is the first thing you would change about it, and why that first? ## Expected split Olaf goes to what happens when it fails on a host. Delphi goes to whether a human can read it. Saiya goes to whether it is worth changing at all this week. If they converge, the demo has found a real problem and that is worth knowing too. ## Sequencing Issue #322 gates this. The demo runs `catalog roles` on camera, and that command currently prints the personality meld under the label `boundary:`. Shoot after the label fix lands. Issue #323 does not gate this.
Author
Member

Production method

Recording this live is the wrong shape. It puts timing, retakes, and lucidity on the critical path for a demo whose content is entirely deterministic. Two tools remove that.

VHS (charmbracelet/vhs, v0.11.0, 2026-03) for the CLI beats. A .tape file renders to GIF, MP4, or WebM with no live session at all. Timing is a number in a text file, so a wrong pause is an edit rather than a retake.

asciinema (v3.2.1, 2026-06) for anything involving a live agent session, recorded with -i 2 so every pause over two seconds clamps to two seconds on playback. The cast is plain text with per-event timings and stays editable afterwards.

Both are in brew core at current upstream versions, along with agg for cast-to-GIF.

brew install vhs asciinema agg

Why the split

VHS drives a headless terminal on fixed sleeps. That suits catalog roles and compose --explain, which are instant and deterministic. It does not suit the three role sessions: responses run 30 to 90 seconds and vary, so the correct Sleep cannot be known in advance, and every tape iteration would re-run three real inference sessions.

  • CLI beats - VHS tape, unattended, re-runnable
  • Three role sessions - asciinema rec -i 2, recorded once, edited later if at all

Reduced scope, if the full version stalls

VHS only. Record the three identity cards and their --explain output, and carry the three actual answers as text in the accompanying post. It loses the side-by-side reveal and it needs nothing from a human but a tape file.

Starter tape

Output acompose-roles.gif
Set Shell zsh
Set FontSize 20
Set Width 1600
Set Height 900
Set TypingSpeed 40ms

Type "agent-compose catalog roles"
Sleep 800ms
Enter
Sleep 4s

Type "clear"
Enter
Sleep 300ms

Verified against the installed v2.44.0: the personalities: label from #322 is live on this host, so the gating work in the issue body is done and the tape above renders correct output today.

## Production method Recording this live is the wrong shape. It puts timing, retakes, and lucidity on the critical path for a demo whose content is entirely deterministic. Two tools remove that. **VHS** ([charmbracelet/vhs](https://github.com/charmbracelet/vhs), v0.11.0, 2026-03) for the CLI beats. A `.tape` file renders to GIF, MP4, or WebM with no live session at all. Timing is a number in a text file, so a wrong pause is an edit rather than a retake. **asciinema** (v3.2.1, 2026-06) for anything involving a live agent session, recorded with `-i 2` so every pause over two seconds clamps to two seconds on playback. The cast is plain text with per-event timings and stays editable afterwards. Both are in brew core at current upstream versions, along with `agg` for cast-to-GIF. ``` brew install vhs asciinema agg ``` ## Why the split VHS drives a headless terminal on fixed sleeps. That suits `catalog roles` and `compose --explain`, which are instant and deterministic. It does not suit the three role sessions: responses run 30 to 90 seconds and vary, so the correct `Sleep` cannot be known in advance, and every tape iteration would re-run three real inference sessions. * CLI beats - VHS tape, unattended, re-runnable * Three role sessions - `asciinema rec -i 2`, recorded once, edited later if at all ## Reduced scope, if the full version stalls VHS only. Record the three identity cards and their `--explain` output, and carry the three actual answers as text in the accompanying post. It loses the side-by-side reveal and it needs nothing from a human but a tape file. ## Starter tape ``` Output acompose-roles.gif Set Shell zsh Set FontSize 20 Set Width 1600 Set Height 900 Set TypingSpeed 40ms Type "agent-compose catalog roles" Sleep 800ms Enter Sleep 4s Type "clear" Enter Sleep 300ms ``` Verified against the installed `v2.44.0`: the `personalities:` label from #322 is live on this host, so the gating work in the issue body is done and the tape above renders correct output today.
Author
Member

Tooling installed and the tapes render

vhs 0.11.0, asciinema 3.2.1, agg 1.9.0 installed on the MacBook. Rendered both tapes end to end and inspected the frames rather than trusting exit 0.

Finding: catalog roles is too wide to film

Longest line is 196 characters. At any readable font size that is a 2400px-wide image, giving a 6.7:1 letterbox strip. Narrower and every line wraps mid-word.

This is not a CLI defect. The line is built to be grepped, and it is good at that. It just does not survive being turned into a picture. Recording it means choosing between an unusable aspect ratio and visible wrapping.

describe is the better shot

The bundle decision tree carries the same story in a vertical shape, and the ✓/✗ column is the actual selection logic rather than a description of it.

bundle a876bcc4f7b65487 // frontend/playful+imaginative // native-skills

profile
  ✓ role frontend                        (roster:core)
  ✓ personality playful                  (roster:core)
  ✓ personality imaginative              (roster:core)
  ✓ boundary build-foundational-software (roster:core)
  ✓ boundary modify-live-backend         (roster:core)
  ✓ boundary seek-external-validation    (roster:core)
  ✓ boundary suggest-external-comms      (roster:core)

Three of these side by side is the demo. Same command, three bundles, and the block changes.

Full describe output runs past a screen and its longest line is 325 characters, so it needs both head and cut. Two beats worth stealing from further down the output:

  • ✗ 143 skills excluded - role provider is scoped to role(s) sysadmin, not selected role
  • the context budget section, which puts token counts against each provider

Working tape

Renders correctly against v2.44.0 today. Run from ~/.agent-compose/bundles.

Output acompose-describe.gif
Set Shell zsh
Set FontSize 18
Set Width 1240
Set Height 320
Set Padding 24
Set TypingSpeed 35ms

Type "agent-compose describe <bundle-id> | head -11 | cut -c1-72"
Sleep 700ms
Enter
Sleep 5s

The right edge truncates mid-word at 72. Dropping to cut -c1-46 gives a clean block but loses the (roster:core) provenance column and clips the bundle header. Unresolved, and it is one number either way.

Second tape, if the wide strip is wanted anyway

Output acompose-roles.gif
Set Shell zsh
Set FontSize 14
Set Width 2400
Set Height 360
Set Padding 20
Set TypingSpeed 40ms

Type "agent-compose catalog roles"
Sleep 800ms
Enter
Sleep 4s

No wrapping at 2400px. Aspect ratio is 6.7:1, so it suits a README banner and not a social post.

Not verified

Whether compose --explain films well. It converges the host, so I did not run it. Its expanded personality block from #323 has short lines and a vertical shape, which suggests it is the best-shaped surface of the three, and that is inference rather than a measurement.

## Tooling installed and the tapes render `vhs 0.11.0`, `asciinema 3.2.1`, `agg 1.9.0` installed on the MacBook. Rendered both tapes end to end and inspected the frames rather than trusting exit 0. ## Finding: `catalog roles` is too wide to film Longest line is **196 characters**. At any readable font size that is a 2400px-wide image, giving a 6.7:1 letterbox strip. Narrower and every line wraps mid-word. This is not a CLI defect. The line is built to be grepped, and it is good at that. It just does not survive being turned into a picture. Recording it means choosing between an unusable aspect ratio and visible wrapping. ## `describe` is the better shot The bundle decision tree carries the same story in a vertical shape, and the ✓/✗ column is the actual selection logic rather than a description of it. ``` bundle a876bcc4f7b65487 // frontend/playful+imaginative // native-skills profile ✓ role frontend (roster:core) ✓ personality playful (roster:core) ✓ personality imaginative (roster:core) ✓ boundary build-foundational-software (roster:core) ✓ boundary modify-live-backend (roster:core) ✓ boundary seek-external-validation (roster:core) ✓ boundary suggest-external-comms (roster:core) ``` Three of these side by side is the demo. Same command, three bundles, and the block changes. Full `describe` output runs past a screen and its longest line is 325 characters, so it needs both `head` and `cut`. Two beats worth stealing from further down the output: * `✗ 143 skills excluded - role provider is scoped to role(s) sysadmin, not selected role` * the `context budget` section, which puts token counts against each provider ## Working tape Renders correctly against `v2.44.0` today. Run from `~/.agent-compose/bundles`. ``` Output acompose-describe.gif Set Shell zsh Set FontSize 18 Set Width 1240 Set Height 320 Set Padding 24 Set TypingSpeed 35ms Type "agent-compose describe <bundle-id> | head -11 | cut -c1-72" Sleep 700ms Enter Sleep 5s ``` The right edge truncates mid-word at 72. Dropping to `cut -c1-46` gives a clean block but loses the `(roster:core)` provenance column and clips the bundle header. Unresolved, and it is one number either way. ## Second tape, if the wide strip is wanted anyway ``` Output acompose-roles.gif Set Shell zsh Set FontSize 14 Set Width 2400 Set Height 360 Set Padding 20 Set TypingSpeed 40ms Type "agent-compose catalog roles" Sleep 800ms Enter Sleep 4s ``` No wrapping at 2400px. Aspect ratio is 6.7:1, so it suits a README banner and not a social post. ## Not verified Whether `compose --explain` films well. It converges the host, so I did not run it. Its expanded personality block from #323 has short lines and a vertical shape, which suggests it is the best-shaped surface of the three, and that is inference rather than a measurement.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agent-compose#324
No description provided.