feat: named harnesses and interactive template picker#15
Merged
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
agentstring with no per-invocation override. Now:harnessesname→command map anddefault_harness.--harness NAME(orSCRY_HARNESS) selects a configured harness; an unknown name fails fast before the TUI opens.agentstring is still honored when noharnessesmap 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
defaulttemplate. That's a poor default whendefaultis a heavyweight, specific context. Now:defaulttemplate exists it's preselected, so Enter still gives the old behavior — but it's visible and overridable.--template NAMEstill skips the picker..claudedir no longer shows as an option).Notes
cd-wrapper needs; a rewrite would buy nothing observable.crystal spec -Dspec,ameba, andcrystal tool format --checkall pass; added coverage forresolve_harnessand the picker flow.🤖 Generated with Claude Code