native-ui: pass the resolved seat name to Claude Code as --name #236

Closed
opened 2026-08-06 20:20:14 +00:00 by coilyco-ops · 2 comments
Member

Step 4 of the native UI build order.

Claude Code accepts --name, and shows the value in the prompt box, the /resume picker, and the terminal title. A composed session already knows its seat name, so this is identity for free.

Scope

  • Pass the resolved seat name from the native launch path when the harness is claude.
  • Respect a caller-supplied --name rather than overwriting it.

Why it is first among the remaining items

It is the only surface that needs no host mutation at all. No file lands in ~/.claude, so nothing has to be installed or converged, and it survives --safe-mode along with the status line.

Done when

A launched Claude seat shows its name in the prompt box and terminal title, and a caller-supplied name still wins.

Step 4 of the [native UI build order](docs/claude-native-ui-plan.md). Claude Code accepts `--name`, and shows the value in the prompt box, the `/resume` picker, and the terminal title. A composed session already knows its seat name, so this is identity for free. ## Scope * Pass the resolved seat name from the native launch path when the harness is `claude`. * Respect a caller-supplied `--name` rather than overwriting it. ## Why it is first among the remaining items It is the only surface that needs no host mutation at all. No file lands in `~/.claude`, so nothing has to be installed or converged, and it survives `--safe-mode` along with the status line. ## Done when A launched Claude seat shows its name in the prompt box and terminal title, and a caller-supplied name still wins.
Author
Member

This issue is probably bigger than --name alone. Claude Code also takes --settings <file-or-json>, which loads into the flagSettings precedence tier:

["userSettings","projectSettings","localSettings","flagSettings","policySettings"]

That beats the user, project, and local settings files and loses only to policy. theme, spinnerVerbs, spinnerTipsEnabled, and spinnerTipsOverride are all in the schema that tier validates, and theme accepts a custom: prefixed slug.

So the launch path can hand a composed session its whole native identity as launch arguments, with no host mutation:

  • --name <seat> for the prompt box and terminal title
  • --settings <bundle>/claude-settings.json for the theme selection, spinner verbs, and tips

native-ui already emits exactly that settings shape per role, so the file needs no new format. Only the theme file itself still has to exist under <home>/.claude/themes/, which is the convergence half tracked in agentic-os#962.

Worth deciding whether this issue grows to cover both flags or whether --settings splits out. They share one insight and one code path, so I lean toward one issue.

Precedence and schema membership are read from the 2.1.221 binary. End-to-end selection through --settings has not been run and needs an interactive check, since print mode silently ignores settings files that fail validation.

This issue is probably bigger than `--name` alone. Claude Code also takes `--settings <file-or-json>`, which loads into the `flagSettings` precedence tier: ``` ["userSettings","projectSettings","localSettings","flagSettings","policySettings"] ``` That beats the user, project, and local settings files and loses only to policy. `theme`, `spinnerVerbs`, `spinnerTipsEnabled`, and `spinnerTipsOverride` are all in the schema that tier validates, and `theme` accepts a `custom:` prefixed slug. So the launch path can hand a composed session its whole native identity as launch arguments, with no host mutation: * `--name <seat>` for the prompt box and terminal title * `--settings <bundle>/claude-settings.json` for the theme selection, spinner verbs, and tips `native-ui` already emits exactly that settings shape per role, so the file needs no new format. Only the theme file itself still has to exist under `<home>/.claude/themes/`, which is the convergence half tracked in agentic-os#962. Worth deciding whether this issue grows to cover both flags or whether `--settings` splits out. They share one insight and one code path, so I lean toward one issue. Precedence and schema membership are read from the 2.1.221 binary. End-to-end selection through `--settings` has not been run and needs an interactive check, since print mode silently ignores settings files that fail validation.
Author
Member

Landed on main as 10a78e1, covering both flags as the comment above proposed.

What ships

  • nativelaunch.Refresh resolves SeatName from the composed person: the selected seat's own name wins, then the role-owned agent identity, then the role. That mirrors the status line rather than inventing a second rule.
  • For the claude harness only, Refresh writes the role's nativeui fragment to <bundle>/claude-settings.json and returns the path. Other harnesses still resolve a seat name, since a name is identity rather than a file.
  • The launch path appends --name <seat> and --settings <path> ahead of the caller's arguments.

Caller precedence

A caller-supplied flag wins in either the separate-value or the inline --flag=value spelling. Anything after a -- terminator is harness input, so a --name past the terminator does not suppress the launcher's own. Tests cover all four cases plus the three non-Claude harnesses.

Verification

End-to-end --settings theme selection is confirmed interactively, recorded in detail on #241. A session launched with the engineer fragment renders the engineer theme even though ~/.claude/settings.json selects a different custom theme, which is the precedence claim as well as the selection claim.

Note for the rollout

The theme document the fragment names still has to exist under <home>/.claude/themes/, which is agentic-os#962. Claude Code drops an unresolvable custom: reference silently, so a host without the theme files loses the colors and keeps the name, the verbs, and the tips. That degradation is deliberate, not a gap.

Docs: claude-launch-identity.md.

Landed on `main` as 10a78e1, covering both flags as the comment above proposed. ## What ships * `nativelaunch.Refresh` resolves `SeatName` from the composed person: the selected seat's own name wins, then the role-owned agent identity, then the role. That mirrors the status line rather than inventing a second rule. * For the `claude` harness only, `Refresh` writes the role's `nativeui` fragment to `<bundle>/claude-settings.json` and returns the path. Other harnesses still resolve a seat name, since a name is identity rather than a file. * The launch path appends `--name <seat>` and `--settings <path>` ahead of the caller's arguments. ## Caller precedence A caller-supplied flag wins in either the separate-value or the inline `--flag=value` spelling. Anything after a `--` terminator is harness input, so a `--name` past the terminator does not suppress the launcher's own. Tests cover all four cases plus the three non-Claude harnesses. ## Verification End-to-end `--settings` theme selection is confirmed interactively, recorded in detail on #241. A session launched with the engineer fragment renders the engineer theme even though `~/.claude/settings.json` selects a different custom theme, which is the precedence claim as well as the selection claim. ## Note for the rollout The theme document the fragment names still has to exist under `<home>/.claude/themes/`, which is agentic-os#962. Claude Code drops an unresolvable `custom:` reference silently, so a host without the theme files loses the colors and keeps the name, the verbs, and the tips. That degradation is deliberate, not a gap. Docs: [claude-launch-identity.md](https://forgejo.coilysiren.me/coilyco-flight-deck/agent-compose/src/branch/main/docs/claude-launch-identity.md).
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#236
No description provided.