Ask: Add a Reinstall skill button in Settings → General → Corveil CLI, next to the existing Verify button (SettingsView.swift:615 for Verify's neighbor placement). Clicking it runs the same corveil skill install --path {devRoot}/.claude/commands/query-corveil.md flow that the launch-time and (per #490) config-change paths use — without requiring an app restart, a workspace switch, or re-picking the path.
Why this is its own button
#490 hot-triggers the install when the picker value changes. But the most common rebuild loop doesn't change the picker — the user runs go build ./cmd/corveil in the corveil repo, the binary at the configured path now contains a newer embedded skill version, and they want that newer version installed into their devroot. With #490 alone, the user has three workarounds:
- Restart Crow (heavy — closes every session).
- Switch workspaces (alternate scaffold path; awkward side-channel).
- Re-pick the same path in Settings (works but unintuitive — "why am I telling it the same thing?").
A dedicated Reinstall skill button names the action and makes it discoverable. Verify already establishes the "Settings has interactive buttons next to the picker" pattern; this is the parallel for "I rebuilt corveil, install the new skill."
Fix
SettingsView.swift — adjacent to the Verify button at :615:
Button("Reinstall skill") {
Task { @MainActor in
let warning = await Scaffolder.installCorveilSkill(
config.defaults.binaries["corveil"]
)
appState.corveilSkillInstallWarning = warning
// Surface a transient toast/banner: "Skill reinstalled" or the warning.
}
}
.disabled((config.defaults.binaries["corveil"] ?? "").isEmpty)
Reuse the same installCorveilSkill function #490 exposes (this ticket depends on #490 landing the function-accessibility refactor; if #490 keeps it private, surface it here too).
The button is disabled when the picker is unset — there's no path to install from, and the launch-time install would also no-op. Tooltip on the disabled state: "Set the Corveil CLI path first."
Acceptance
- With a valid corveil path configured, click Reinstall skill. Without restart,
{devRoot}/.claude/commands/query-corveil.md matches <corveilPath> skill show byte-for-byte (proves the new embedded skill content from the rebuilt binary installed).
- Transient success indication (toast / "✓ Skill reinstalled" label that fades after a few seconds — match the Verify button's success surface for consistency).
- With a broken path (set but non-existent / non-executable), clicking Reinstall surfaces the same diagnostic as the launch-time path via
corveilSkillInstallWarning. No crash.
- Button is disabled and visually grayed when the picker is unset.
- Repeated clicks are idempotent (the underlying install is —
os.WriteFile + os.Chmod).
Critical files
| Purpose |
Path |
| Button placement |
Packages/CrowUI/Sources/CrowUI/SettingsView.swift (next to Verify around :615) |
| Installer function (already exposed by #490) |
Sources/Crow/App/Scaffolder.swift:230 (installCorveilSkill) |
| Warning surface (reuse) |
Packages/CrowCore/Sources/CrowCore/AppState.swift:237 (corveilSkillInstallWarning) |
Out of scope
Related
🐦⬛ Created with Crow via Claude Code
Ask: Add a Reinstall skill button in Settings → General → Corveil CLI, next to the existing Verify button (
SettingsView.swift:615for Verify's neighbor placement). Clicking it runs the samecorveil skill install --path {devRoot}/.claude/commands/query-corveil.mdflow that the launch-time and (per #490) config-change paths use — without requiring an app restart, a workspace switch, or re-picking the path.Why this is its own button
#490 hot-triggers the install when the picker value changes. But the most common rebuild loop doesn't change the picker — the user runs
go build ./cmd/corveilin the corveil repo, the binary at the configured path now contains a newer embedded skill version, and they want that newer version installed into their devroot. With #490 alone, the user has three workarounds:A dedicated Reinstall skill button names the action and makes it discoverable. Verify already establishes the "Settings has interactive buttons next to the picker" pattern; this is the parallel for "I rebuilt corveil, install the new skill."
Fix
SettingsView.swift— adjacent to the Verify button at:615:Reuse the same
installCorveilSkillfunction #490 exposes (this ticket depends on #490 landing the function-accessibility refactor; if #490 keeps it private, surface it here too).The button is disabled when the picker is unset — there's no path to install from, and the launch-time install would also no-op. Tooltip on the disabled state: "Set the Corveil CLI path first."
Acceptance
{devRoot}/.claude/commands/query-corveil.mdmatches<corveilPath> skill showbyte-for-byte (proves the new embedded skill content from the rebuilt binary installed).corveilSkillInstallWarning. No crash.os.WriteFile+os.Chmod).Critical files
Packages/CrowUI/Sources/CrowUI/SettingsView.swift(next to Verify around:615)Sources/Crow/App/Scaffolder.swift:230(installCorveilSkill)Packages/CrowCore/Sources/CrowCore/AppState.swift:237(corveilSkillInstallWarning)Out of scope
Related
installCorveilSkillcallable from outsideScaffolder's private surface.🐦⬛ Created with Crow via Claude Code