archive
File a finished shift into its own archive folder, laid out like the live site, so the live…
Open the plan room: explore the code and design the work with the owner, building nothing until the owner leaves.
$ npx -y skills add orwa-mahmoud/nightshift --skill plan --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/planContext preview
The summary Claude sees to decide when to auto-load this skill.
Open the plan room: explore the code and design the work with the owner, building nothing until the owner leaves.
name: plan description: Open the plan room: explore the code and design the work with the owner, building nothing until the owner leaves. license: MIT
Plan with the owner in the plan room. Here the conversation explores, weighs options and draws the plan; nothing gets implemented until the owner leaves the room on purpose. The room is enforced by the hooks, not by this text: while it binds this conversation, every edit, write and mutating command outside the staging folder is denied, however the request is worded.
Resolve the installed plugin root to an absolute `$NIGHTSHIFT_PLUGIN_ROOT` — `${CLAUDE_PLUGIN_ROOT}` on Claude Code, `$PLUGIN_ROOT` on Codex when set, otherwise the absolute path this skill was attached from (`skills/plan/SKILL.md`). Run every command below through `"$NIGHTSHIFT_PLUGIN_ROOT/runtime/ns"` — native Windows: `& "$NIGHTSHIFT_PLUGIN_ROOT\runtime\windows\ns.ps1"` in the PowerShell tool, same verbs — which resolves the host and the workspace; `ns help` lists the verbs, and `ns bind` prints the six resolved facts (`TASK_ROOT`, `NIGHTSHIFT_WORKSPACE`, `NS`, `NIGHTSHIFT_PLUGIN_ROOT`, `HOST`, `SOURCE`); `$NS` below is that `NS`. Never a bare relative path: the working directory persists between calls. Each `$NS/...` path below is where the current layout keeps that file; `ns path <key>` prints where this workspace keeps it, and `ns path --list` names every key.
Pass the host you are running on (`claude`, `codex` or `cursor`):
"$NIGHTSHIFT_PLUGIN_ROOT/runtime/ns" plan-enter --host claude
Native Windows: `& "$NIGHTSHIFT_PLUGIN_ROOT\runtime\windows\ns.ps1" plan-enter --host claude`.
The room opens unbound. **The very next tool call is the probe that binds it to this conversation** — nothing in between, not even a read:
: nightshift-plan-probe
$null = 'nightshift-plan-probe'
plan room is open, that nothing is implemented here, and how they leave it (section 6).
They plan in that conversation, or leave the room first.
owner; they plan in another conversation, or stop the shift first.
Setup, and stop.
An open room bound to this conversation (after compaction, say) needs no new entry: run `plan-enter` and the probe again, and both pass.
**Resume before anything else.** `plan-enter` also prints `plan record <path>` and one `open plan: <entry>` line for each plan the record still holds open (`open plan: none` when there is none). With an open plan, read the record first and pick up exactly where its `Where we are` line left off: say in a sentence or two what was decided and what comes next, so the owner never repeats themselves. With more than one open plan, ask which one this conversation continues.
`plan-enter` ends with `review` lines: what waits for the owner's word. `review none` means there is nothing, and the room is plain planning. Otherwise, before new planning, offer to walk the owner through them, one at a time, in this order:
receipts index (`ns path receipts-index`). Read them first and give the owner the outcome in a few lines: what shipped, what did not, what needs a decision.
the shift chose and why, and ask whether it stands. Record the answer by appending ` · answered: <the owner's decision>` to that entry.
the owner's decision becomes its disposition (` · rejected-because: <why>` or ` · accepted-tradeoff: <why>`), and a snag to fix becomes an item drafted for the next shift (section 5), its disposition written once the fix lands.
in the punch list (`ns path punch-list`). Ask for each: keep it for the next shift as it is, rework it (draft the new version, section 5), or drop it. The punch list is the owner's to edit: a box to reopen, reword or remove is theirs to change, and the room cannot write it.
Nothing is written without the owner's answer to that entry. The parking lot, the snag log, the drafting table and the plan record are the only files the room writes; an archived shift reads the same way, from what Archive left live.
This is a conversation, not a procedure. Follow the owner's direction and pace; do not impose phases, templates or a checklist while discussing.
(`git log`, `git show`, `git blame` and every read-only tool are free here). Name paths and lines. A question the code already answers is not one to ask the owner.
costs and buys, then say which one you would pick and why. A survey with no recommendation hands the work back.
a paragraph cannot. Use one when it helps, not by default.
comes next.
so it is not reopened by accident.
When the owner says "just do it" or "implement it":
Give the agent a shift. Come back to work you can review. Nightshift gives Claude Code, OpenAI Codex, and Cursor a durable work contract for long coding runs. Bring a task list, choose a ready-made shift, or give your agent an objective and hours to work.
Repo: orwa-mahmoud/claude-nightshift
File a finished shift into its own archive folder, laid out like the live site, so the live…
Read-only diagnosis of the workspace, rules, markers, lease, watchman and deadline, with…
Compose a shift from the ready catalog under one time budget, guided or automatic, reviewed…
Stage explicitly selected GitHub issues onto the drafting table as quoted source; never…
Work a punch list to completion autonomously — overnight, through a todo list, or until a…
Leave the plan room and name the next step toward building what was planned.