v0.1.0: agent wiring, first-run fixes, OSS layout - #9
Merged
Conversation
Makes tess safe to hand to someone else's laptop, and teaches every AI agent on that laptop to actually use it. Agent wiring (`tess wire`) — three layers, run by the installer, idempotent: - skills: portable SKILL.md linked into every skills root found (Claude Code, Cursor, Codex, Gemini, opencode) - guardrail: a shell hook that blocks raw `git worktree add/remove/move` and hands back the `tess new` equivalent. Speaks both Claude Code PreToolUse and Cursor beforeShellExecution. Fails open; only ever denies, never grants. - primer: agent-primer.md fenced into CLAUDE.md / AGENTS.md / GEMINI.md Symlinks, not copies, so `tess update` refreshes every wired agent. Ships as a Claude Code plugin too (.claude-plugin/ + 5 slash commands). First-run fixes found by auditing a clean machine: - spawn checked for the agent CLI and fleet backend only AFTER creating the worktree and branch, leaving orphans behind. Now preflights, and rolls the worktree back if the launch fails. - config.example shipped `TESS_REPOS="app api"` uncommented, so a new user's first `tess new` failed about repos they'd never heard of. Fleet is opt-in now. - unknown flags fell through the dispatcher into the vault note search and printed private filenames. They error with exit 2. - status/digest claimed "no agents running" when the backend was missing. - `tess ls` leaked a raw find error on a machine with no worktrees. - worktree.sh flag errors pointed at an internal libexec path. Also: tess --version, VERSION, CHANGELOG, uninstall.sh, TESS_NO_AUTOUPDATE opt-out, README cut 321 to 75 lines with detail moved to docs/, and 13 new smoke tests covering every fix above (59 total, all green).
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.
Makes tess safe to hand to someone else's laptop, and teaches every AI agent on that laptop to actually use it.
Agent wiring —
tess wireThree layers, run by the installer, idempotent, with
--dry-runand--undo:SKILL.md, loaded only when the task is worktree- or fleet-shaped~/.agents/skills/+ Claude Code, Cursor, Codex, Gemini, opencodegit worktree add/remove/move, hands back thetess newequivalentPreToolUse· CursorbeforeShellExecutionagent-primer.mdfenced into instruction filesCLAUDE.md·AGENTS.md·GEMINI.mdSymlinks, not copies, so
tess updaterefreshes every wired agent. The guard fails open in every ambiguous case and only ever denies, never grants — returningpermission: allowwould have made it approve any command it saw.Also ships as a Claude Code plugin (
.claude-plugin/+/tess:status|new|ship|fleet|todo).tess wiredetects the plugin and skips its own Claude hooks so nothing double-fires.First-run fixes
Found by auditing a clean machine with an empty
HOME:tess claudeleft orphans. It checked for the agent CLI and fleet backend after creating the worktree and branch. Now preflights before touching disk, and rolls the worktree back if the launch fails.config.exampleshipped fictional repos.TESS_REPOS="app api"was uncommented, so a new user's firsttess newfailed about repos they'd never heard of. The fleet is opt-in now.tess --versionfell through the dispatcher's catch-all into the vault lookup and printed private note filenames. Unknown options exit 2.status/digestlied when the backend was missing — an empty result and an uninstalled backend were indistinguishable.tess lsleaked a rawfind:error on a machine with no worktrees.worktree.shflag errors pointed at an internallibexec/path.Also
tess --version,VERSION,CHANGELOG.md,uninstall.sh(never touches repos, worktrees, or your vault),TESS_NO_AUTOUPDATE=1opt-out, and README cut from 321 to 75 lines with the detail moved intodocs/.Testing
59 smoke tests, all green — 13 new ones covering every fix above. The
tess lsregression test was verified by deliberately re-introducing the bug (suite went 58/1) and restoring it.