CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

verify-session-lifecycle

TLA+ model check of the agent-tty session lifecycle when several agent-tty processes use one Home at the same time - create, the session host (start-up, resize, destroy, SIGTERM shutdown, exit), reconcileSession (list, inspect, destroy, gc), gc and destroy (with and without --force). Use it before you change src/host/lifecycle.ts, src/host/programGroup.ts, the start-up, shutdown or exit path of src/host/hostMain.ts, src/host/manifestWriter.ts, src/cli/commands/gc.ts, src/cli/commands/create.ts, src/cli/commands/destroy.ts, src/storage/manifests.ts or src/protocol/sessionStatusPolicy.ts, before you add a new writer of session.json, and when you must know whether a race can delete a session, corrupt its status, leave its program running or kill a process group that is not the session's.

Quality

85%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Quality

Content

70%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

Operationally this skill is outstanding — exact commands, explicit exit-code semantics, a rigorous bug-versus-modeling-error workflow, and a validated change procedure. Its weakness is shape: a 588-line SKILL.md that inlines race narratives, replay transcripts, expected results, and scope assumptions that belong in reference files, with substantial duplication between those sections.

Suggestions

Move the 'Races the guards prevent' narratives and their replay transcripts into a reference file (e.g. references/races.md), keeping one-line summaries with rule numbers in SKILL.md and linking each guard heading to its detail.

Split the expected-results table and the 'Scope' assumptions into their own reference files, leaving SKILL.md with how to run the check, how to read exit codes, and where to look next.

Deduplicate the guard/race explanations that currently appear in three places (the runs table's Why column, the races section, and the Scope assumptions) — state each guard's semantics once and cross-reference it.

DimensionReasoningScore

Conciseness

The 588-line body is noticeably verbose: the expected-results table's Why column ('Each witness is a state that must be reachable: a create that gave up recorded the session destroyed, gc removes a session, a session serves, a resize lands...') runs to thousands of words in table cells, and the 'Races the guards prevent' narratives plus paragraph-length Scope bullets re-explain much of the same guard and race content. Not a 3: the duplication across the table, the races section, and Scope is substantial rather than a few spots to tighten; not a 1: nothing explains concepts Claude already knows and there is no filler — every section is project-specific and load-bearing.

2 / 5

Actionability

Fully executable throughout: the exact run command ('.agents/skills/verify-session-lifecycle/scripts/check.sh'), tunables ('CHECK_JOBS=79', 'JAVA=/path/to/java', 'TLA2TOOLS_JAR=...', 'CHECK_OUT=<folder>'), exit-code semantics (0/1/2/3 with 'When both 1 and 3 apply, the exit code is 1'), and copy-paste-ready replay blocks with setup and cleanup ('.agents/skills/verify-agent-tty/scripts/cleanup.sh "$ENV_FILE"'). Specific examples cover the common cases; not a 4 because no key detail is missing.

5 / 5

Workflow Clarity

Multi-step processes are explicitly sequenced with validation checkpoints and feedback loops: run → interpret via exit codes and the expected-results table → 'Bug or modeling error' decision flow (map each step to code, replay with replay-hold.mjs, then 'If a step cannot happen in the code, the model is wrong... do not weaken a rule') → the numbered 'When you change covered code on purpose' procedure that requires breaking a guard once and confirming a run turns 'UNEXPECTED' before updating coverage.json. Not a 4: checkpoints are explicit, including error recovery and drift handling ('A guard reads FALSE when its condition text... differs... That is drift in the check, not a bug').

5 / 5

Progressive Disclosure

There is real structure — clear section headers, a 'Files' section, and genuinely external scripts (scripts/check.sh, scripts/facts.mjs, scripts/replay-hold.mjs all exist in the bundle) — but hundreds of lines that clearly belong in separate reference files are inlined: the ~20 'Races the guards prevent' narratives with full replay transcripts, the giant expected-results table, and the Scope assumptions all live in SKILL.md, and the referenced model/SessionLifecycle.tla, model/statechart-view.mjs and coverage.json are absent from this bundle. Not a 4: the bulk of the detail is inline rather than one level deep; not a 2: sections are well-organized and the operational scripts really are external, so it is not a monolith.

3 / 5

Total

15

/

20

Passed

Description

95%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

An exemplary description: it states the capability concretely, enumerates the lifecycle operations it covers, and gives precise file-based and failure-mode triggers for when to use it. The only deduction is the rubric's voice penalty for the second-person 'before you change' phrasing in the trigger clause.

DimensionReasoningScore

Specificity

Capability coverage is comprehensive and concrete — 'create, the session host (start-up, resize, destroy, SIGTERM shutdown, exit), reconcileSession (list, inspect, destroy, gc), gc and destroy (with and without --force)' — which matches the 5 anchor, but the rubric's voice rule costs one point for the second-person trigger phrasing 'Use it before you change src/host/lifecycle.ts'. Not a 3: the actions named are specific and complete, with no generic filler.

4 / 5

Completeness

Both halves are explicit: what it does ('TLA+ model check of the agent-tty session lifecycle when several agent-tty processes use one Home at the same time') and when to use it ('Use it before you change [specific files]... and when you must know whether a race can...'). This matches the 5 anchor's 'concrete trigger phrases' requirement; not a 4 because the 'when' is as explicit and specific as the 'what'.

5 / 5

Trigger Term Quality

Triggers are the natural terms for this skill's users: named source files ('before you change src/host/lifecycle.ts, src/host/programGroup.ts... the start-up, shutdown or exit path of src/host/hostMain.ts'), command names (create, gc, destroy, list, inspect), and concern-level phrases ('whether a race can delete a session, corrupt its status, leave its program running or kill a process group that is not the session's'). Not a 4: it covers both the file-path and failure-mode vocabularies users would actually say, with no obvious synonyms missing.

5 / 5

Distinctiveness Conflict Risk

A clear niche — TLA+ model checking of the agent-tty session lifecycle, keyed to named source files — that no generic skill would collide with. Not a 4: the named files and race-failure phrases are triggers no other skill would claim, so conflict risk is minimal.

5 / 5

Total

19

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

skill_md_line_count

SKILL.md is long (589 lines); consider splitting into references/ and linking

Warning

Total

15

/

16

Passed

Repository

coder/agent-tty

Path

.agents/skills/verify-session-lifecycle/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.