Save Task Status
Update the current task status file and keep task metadata aligned with the active machine/session.
Invocation
/save-task-status [task-slug]
Shared Helper
python ~/pro/botfiles/claude/skills/_shared/task_status/scripts/sync_task_metadata.py \
--status-file "<status-file>" \
--tracker-url "<tracker-url-if-any>" \
--github-issue-url "<github-issue-url-if-any>" \
--sync-github-issue
Process
Step 1: Resolve Task Folder
- Check
CLAUDE.mdtask-status-rootoverride. - Fall back to
AGENTS.mdoverride. - Default to
context/daily/YYYY-MM-DD/<task-slug>/. - If the task is tracker-linked and a canonical task root is already known, update that canonical task folder instead of a same-session duplicate in the current repo.
- Update existing task folder when possible; do not create duplicates for resumed work.
Step 2: Update Core Status Content
- Refresh
Last Updated(PST format). - Update
User Inputs,Input Artifacts,Current State,Progress,Artifacts, andNext Stepsas needed. - Keep the
Input Artifactssection focused onuser_inputs/input_artifacts/paths and provenance notes. - Keep the
Artifactssection focused on curated top-level outputs first; referencetask-progress-artifacts/scratchpad/items only when deeper evidence is useful. - Preserve existing
## Accepted Planshistory. - Keep
user_inputs/immutable; add new Markdown notes or input-artifact captures instead of overwriting prior inputs.
Step 3: Reconcile Metadata Block
Run:
python ~/pro/botfiles/claude/skills/_shared/task_status/scripts/sync_task_metadata.py \
--status-file "<abs-status-file-path>" \
--tracker-url "<tracker-url-if-any>" \
--github-issue-url "<github-issue-url-if-any>" \
--sync-github-issue
What this does:
- Upserts the managed tracker-aware
TASK-METADATAblock in the status file. - Updates the machine-local current-task pointer for this
{project, coding-agent, agent-session}so laterget-task-detailsresolves this task as current. - Recomputes:
- Primary tracker kind/url/human ID/title
- Machine (
SYSTEM_NAME-> hostname ->unknown) - Coding agent (
codex|claude|unknown) - Agent session ID (for example
CODEX_THREAD_IDwhen available) - Task folder / task status path / transcript path
- Workspace path
- Zellij session (
ZELLIJ_SESSION_NAMEornone) - Zellij link (
ZELLIJ_WEB_ENABLE_LINKS+ZELLIJ_WEB_BASE_URL+ session) - Remote-session anchor metadata
- GitHub and Linear compatibility fields
- If
--sync-github-issueis set, upserts the managed live-session block on the primary tracker. - For GitHub trackers, this targets the issue body and requires
ghauth. - For Linear trackers, this targets the issue description and requires
LINEAR_API_KEY.
Step 4: Degraded-Mode Handling
If dependencies are missing:
- Missing
ghor auth failure: skip issue sync and continue. - Missing zellij context: use
nonevalues. - Missing
SYSTEM_NAME: use hostname fallback.
Step 5: Artifact Hygiene
- Save generated outputs continuously under
task-progress-artifacts/and reference them in status. - Put raw logs, command outputs, polling snapshots, JSON dumps, intermediate screenshots, and adhoc scripts in
task-progress-artifacts/scratchpad/. - Keep top-level
task-progress-artifacts/reserved for curated deliverables and important evidence that should be easy to review later. - Keep Markdown input notes under
user_inputs/. - Capture user-provided or user-referenced files, images, and downloaded reference copies in
user_inputs/input_artifacts/. - Maintain
user_inputs/input_artifacts/index.mdwhen an input artifact is captured or when an external input artifact cannot be copied locally. - In status summaries, prefer local
user_inputs/input_artifacts/...references for input context and top-leveltask-progress-artifacts/...references for generated outputs.
Current-Task Semantics
save-task-statusis also a task switch for the current session.- If one agent session touches multiple tasks over time, the most recently synced task becomes the session's current task.
Managed Metadata Block
The full tracker-aware contract lives in docs/task-status-tracker-contract.md.
<!-- TASK-METADATA:START -->
## Task Metadata
- Tracker Kind: <linear|github|none>
- Tracker URL: <url|none>
- Tracker Human ID: <ZON-8|owner/repo#123|none>
- Tracker Title: <title|none>
- Machine: <SYSTEM_NAME|hostname|unknown>
- Coding Agent: <codex|claude|unknown>
- Agent Session ID: <id|none>
- Task Folder: </abs/task/folder|none>
- Task Status Path: </abs/task/status.md|none>
- Transcript Path: </abs/transcript|none>
- Workspace Path: </abs/workspace|none>
- Remote Session Anchor Kind: <linear_issue_body|github_issue_body|none>
- Remote Session Anchor ID: <LIVE-SESSION|none>
- GitHub Issue: <url|none>
- GitHub Repo: <owner/repo|none>
- GitHub Issue Number: <number|none>
- Linear Issue ID: <uuid|none>
- Linear Issue Identifier: <ZON-8|none>
- Linear Team ID: <uuid|none>
- Linear Team Name: <Zone|none>
- Linear Project ID: <uuid|none>
- Linear Project Name: <Project|none>
- Zellij Session: <name|none>
- Zellij Link: <url|none>
- Last Synced: YYYY-MM-DD ~HH:MMam/pm PST
<!-- TASK-METADATA:END -->
Managed GitHub Block
<!-- LIVE-SESSION:START -->
## Live Session
_Written by Claude Code via the developer's authenticated GitHub account._
- Machine: `machine-name`
- Coding Agent: `codex|claude|unknown`
- Agent Session ID: `id|none`
- Transcript Path: `/abs/path/to/transcript`|`none`
- Zellij Session: `session|none`
- Zellij Link: https://...|none
- Task Folder: `/abs/path/to/task-folder`|`none`
- Status File: `/abs/path/to/status.md`|`none`
- Attach Command: `zellij attach ...|none`
- Last Updated: `YYYY-MM-DD ~HH:MMam/pm PST`
<!-- LIVE-SESSION:END -->