Skip to content

feat: named harnesses and interactive template picker#15

Merged
stephendolan merged 2 commits into
mainfrom
feat/harness-and-template-picker
Jul 2, 2026
Merged

feat: named harnesses and interactive template picker#15
stephendolan merged 2 commits into
mainfrom
feat/harness-and-template-picker

Conversation

@stephendolan

Copy link
Copy Markdown
Owner

Why

Scry is architected as a directory manager that incidentally launches an agent, but in practice it's a conversation launcher where the directory is incidental. This makes the two things that actually vary per launch — the harness and the template — first-class and selectable at creation time.

Harnesses (--harness)

Previously the launched command was a single global agent string with no per-invocation override. Now:

  • Config gains a harnesses name→command map and default_harness.
  • --harness NAME (or SCRY_HARNESS) selects a configured harness; an unknown name fails fast before the TUI opens.
  • The legacy agent string is still honored when no harnesses map is configured, so existing configs keep working (dual-read).
{
  "default_harness": "claude",
  "harnesses": {
    "claude": "claude --dangerously-skip-permissions",
    "codex": "codex"
  }
}

Template picker

Creating a new scry previously silently auto-applied the default template. That's a poor default when default is a heavyweight, specific context. Now:

  • New scries open an interactive template picker; if a default template exists it's preselected, so Enter still gives the old behavior — but it's visible and overridable.
  • --template NAME still skips the picker.
  • Hidden dirs are excluded from the template list (a stray .claude dir no longer shows as an option).

Notes

  • Kept the Crystal stack — single static binary + instant startup is exactly what a shell-integrated cd-wrapper needs; a rewrite would buy nothing observable.
  • Version bumped to 0.9.0 to trigger release.
  • crystal spec -Dspec, ameba, and crystal tool format --check all pass; added coverage for resolve_harness and the picker flow.

🤖 Generated with Claude Code

stephendolan and others added 2 commits July 2, 2026 09:52
Scry is really a conversation launcher, so make the two things that vary
per launch first-class and selectable at the moment of creation.

Harnesses: config gains a `harnesses` name→command map and `default_harness`,
selectable with `--harness NAME` (or `SCRY_HARNESS`). The legacy single `agent`
string is still honored when no map is configured, so existing configs keep
working.

Templates: creating a new scry now opens an interactive picker (the `default`
template, if present, is preselected) instead of silently auto-applying
`default`. `--template NAME` still skips the picker. Hidden dirs are excluded
from the template list so stray dotfile dirs don't appear as options.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YEowEH4w4YtnyQiSPxgiim
Up-arrow at the top jumps to the last item (Create new / (no template)) and
down-arrow at the bottom returns to the first, in both the browse list and the
template picker.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YEowEH4w4YtnyQiSPxgiim
@stephendolan stephendolan merged commit 3508e80 into main Jul 2, 2026
4 checks passed
@stephendolan stephendolan deleted the feat/harness-and-template-picker branch July 2, 2026 14:20
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