app-session
Census/launch/teardown for a repo's declared app.
SKILL.mdskills/app-session/SKILL.md
GitHubApp Session
Stateful lifecycle around a repo-declared app: three named verbs, keyed by target, backed by
per-repo config declared in coordinator.local.md's app_session mapping.
app_session:
desktop:
runtime: electron
command: pnpm dev
Each key under app_session is a target name (desktop above); its value is an object
carrying a runtime discriminator (electron | command | server | ...) plus runtime-specific
fields. An unrecognised or absent runtime degrades to a plain argv command with no resolution
step -- the electron-specific resolution mechanics are out of this skill's scope (wiki).
Verbs
Each verb dispatches through the app-session trampoline, one binary three verbs, which routes
to the control-plane engine's app_session.census / app_session.launch / app_session.teardown
ops and prints that op's own result object verbatim as JSON.
census -- reports the current state of a target: whether it is running, and (where the runtime resolver supports it) which process/port it occupies. Read-only; makes no state change.
--keyis optional -- omitted, it lists every persisted handle in the repo.Invoke through the
.exelauncher by absolute path via the PowerShell call operator (Shape W). Ladder and shapes:${CLAUDE_PLUGIN_ROOT}/snippets/resolve-coordinator-bin.md.& "$env:COORDINATOR_SETTINGS_HOME\bin\app-session.exe" census --key <target>& "$env:COORDINATOR_SETTINGS_HOME\bin\app-session.exe" censuslaunch -- starts a target per its
app_sessionconfig and records that it is running, so a latercensusorteardowncall can find it. Fails loudly on a launch error -- this verb's failures propagate rather than being swallowed.& "$env:COORDINATOR_SETTINGS_HOME\bin\app-session.exe" launch --key <target>teardown -- stops a previously launched target and clears its recorded state. Matches the specific command line it launched rather than a blanket process kill, because this machine routinely runs concurrent sessions against the same runtimes (wiki).
& "$env:COORDINATOR_SETTINGS_HOME\bin\app-session.exe" teardown --key <target>
<target> is the app_session mapping key (desktop above). --repo-root <path> is accepted on
every verb but normally omitted -- it defaults to the git toplevel. Exit code 0 covers both a real
result and a structured "not configured" one (see § No config, no effect); 2 is a usage error; 3
is a transport/op failure.
launch without a later teardown leaves state behind for census and teardown to find.
Config resolution
Each op resolves its target via cs_read_local_md_mapping(repo_root, key) -> dict
(coordinator_core/resolve_validation_cmd.py), not cs_read_local_md_key, which cannot read the
nested per-target mapping. It returns a bare dict for a present, well-formed target and None
for an absent or malformed one; callers turn None into the structured "not configured" result
below rather than raising.
No config, no effect
A repo declaring no app_session keys is not an error: every verb degrades to a silent no-op,
because app_session is opt-in, unlike fast_test_cmd, which fails loud at a cadence gate
(validate/SKILL.md). The ops return {"ok": true, "configured": false, ...}, exit 0.
app_session carries no environment-variable override rung: the configured value spawns a
process, and an env-settable spawn target is a worse blast radius than an env-settable test
command. Resolution reads only coordinator.local.md.
Relationship to the platform's run skill
app-session complements the built-in run skill (one-shot "start it and look at it"): it is the
stateful census/launch/teardown lifecycle with per-repo config, and is not named run* because
run is a taken platform primitive. Registration with run is unconfirmed.