AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Ship First

skill-bearded-illirian-trailmark-ship-first · by bearded-illirian

|

No reviews yet
0 installs
18 views
0.0% view→install

Install

$ agentstack add skill-bearded-illirian-trailmark-ship-first

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-bearded-illirian-trailmark-ship-first)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
20d ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Ship First? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Ship-First Protocol

Final protocol after task execution. Receives context from the calling skill:

  • {task_id} — slug or task id
  • {artifact_type}fast-track or task
  • {log_dir} — path to the log folder
  • {task_file} — path to the original task file
  • {project}, {project_path} — from projects config
  • {title} — task name (one line)
  • {date} — current date
  • {arch_ref} — arch-map result (string or null)
  • {block_num} — current block number (per-block mode only)

Input

Complete block or task execution context — the report artifacts from plan-first, block-num or "final" marker, task_id, log_dir, project metadata.

Output

report-*.md + user-note-*.md per block; task-level aggregate user-note.md; STATUS.md in project root; routing.db row updated (status / archref / closedat); block or task marked done.

Hands off to

flow-first for the next open block (per-block mode), or — (terminal) when all blocks are done.


ship-first Modes

ship-first operates in two modes:

Per-block mode

Trigger: {block_num} is in context. Called by: plan-first after block execute. Does: writes report-N.M.md + user-note-N.M.md, deploys the block, runs smoke test, closes the block in task_blocks, then moves to the next block or switches to task-level mode.

Task-level mode

Trigger: {block_num} not passed or equals 'final'. Called by: decomposition orchestrators after all blocks are closed, or per-block ship-first when it sees no open blocks. Does: artifact completeness check, ui-ai-first if needed, aggregate final user-note, "close?" question, guide?, arch-map, routing.db update, propagate arch_ref, parent chain check, STATUS + sessions.

Mode determination

If {block_num} in context → per-block. Otherwise → task-level. Modes are mutually exclusive.


Per-block mode

Step B1 — Write report-N.M.md

Determine round {R}. Create {log_dir}/report-{N.M}.{R}.md with sections: What was done / What was notable / Next. Register in task_artifacts with artifact_type='report'.

Step B2 — Write user-note-N.M.md

Same {R} as B1. Contents: What changed (1-3 lines from the user's perspective) + Where it affects. Purely technical block → Nothing changes for the user. Register with artifact_type='user-note'.

Step B3 — Deploy block

Read block types from library-first artifact. For ai-skill type:

cd {skills_project_path} && git add .claude/ && git commit -m "block-{N.M}" && git push origin main
bash {skills_project_path}/.claude/shared/scripts/sync-agents.sh

For application code — additionally push in {project_path}. In any case sync tasks to the ops server. For sandbox projects — skip deploy. Remember {last_commit_hash} for Step B5.

Step B4 — Smoke test by atom types

Get types via SELECT atom_type FROM task_blocks WHERE task_id='{task_id}' AND block_num={NM}. Where {NM} = N*10+M. If NULL — fallback: read library-first artifact.

| Type | What it does | |---|---| | backend | curl / command from plan, check status + response | | infra | nginx -t / systemctl status / curl endpoint | | integration | trigger webhook/API, check log | | ai-skill | re-read changed SKILL.md, check logic for contradictions | | ui / manual | skip — plan-first shows a UI test plan separately |

Step B5 — Close block

sqlite3 {routing_db} \
  "UPDATE task_blocks SET status='done', commit_hash='{last_commit_hash}', closed_at='{date}'
   WHERE task_id='{task_id}' AND block_num={NM};"

Update the row in ## Blocks in task.md: replace with and with {last_commit_hash}.

Step B6 — Move to next block or task-level

Check for open blocks. Found → Skill('flow-first') with next block context. None → switch to task-level mode with {block_num} cleared.


Task-level mode

Step 0.5.0 — Hot-fix bypass

If all task blocks have source='idea-first' (hot-fix), the flow/library/plan/report/user-note artifacts were intentionally not created — skip Step 0.5. Otherwise execute standard Step 0.5.

Step 0.5 — Check artifact completeness

For each block check for mandatory artifacts (flow-first, library-first, plan-first, report, user-note). All present → OK. Gaps → list them and ask "Restore? (go / skip)". On "go" — invoke the missing skill.

Step 0.6 — Launch ui-ai-first (if needed)

Check run_ui_ai_first flag from session. false → skip. true → run full ui-ai-first protocol with task_path={task_file} and wait.

Step 1.5 — Aggregate final user-note.md

From all block user-note-NN.md files, write {log_dir}/user-note.md with sections: What changed (by blocks) / Summary for the user / Where it affects. Purely technical refactor → Nothing changes for the user. Never skip creating the file. Register with artifact_type='user-note-final'.

Step 4 — Close the task?

Close the task?
1. Close — everything accepted
2. More work — need to do more

If a prior step had "problems" — set status open immediately without asking.

Step 4.5 — Create a guide?

Only if artifact_type == fast-track AND Step 4 answer was "1=close". Ask:

Create a full instruction for guides?
1. Create   2. Don't create

Answer "1" → invoke /go-guide with mode='from-task' and contentsource = all block user-notes + final user-note.md + last report. The guide skill picks storagemode automatically. Answer "2" → skip.

Step 4.7 — arch-map (if arch_ref not passed)

{arch_ref} is null → automatically invoke Skill('arch-map'). Save result in {arch_ref} for Step 5. If unavailable → continue with null, not a blocker.

Step 5 — Write to routing.db

Check if the record exists. UPDATE status / archref / closedat. Fallback INSERT if UPDATE affects no rows (task created before the go-fast Step 3 fix). Status: done if Step 4 answered "1", open otherwise.

After INSERT/UPDATE — write atoms from library-first: read ## Table, for each row INSERT into task_atoms. Then aggregate counters (cnt_ui, cnt_backend, cnt_integration, cnt_infra, cnt_ai_skill, cnt_manual) via UPDATE on artifacts. Missing library-first → silently skip.

Step 5.5 — Write-back linked improvement records (if any)

If task.md contains linked_improv_artifact: header → extract the linked slug. If task status = done → UPDATE the linked improvement rows and close the linked artifact. Otherwise skip — improvements stay open.

Step 6 — Propagate arch_ref

If arch_ref not null → check for a related brief via links (link_type='escalated_into'). Found → merge-write arch_ref into the brief and its spec per arch-map.

Step 6.5 — Check unclosed areas of parent task

If the current task is part_of a chain — find sibling tasks with status ≠ done. Any → warn:

⚠️ This task is part of chain {parent_id}. Unclosed:
- {id}: {title}

1. Close this — handle the rest separately
2. Open the next unclosed one now

Step 7 — Update STATUS.md

Create/overwrite {project_path}/STATUS.md with: Last task / Pending / Next step.

Step 7.5 — Close open/pending task blocks

Bulk-close any remaining blocks with commit_hash='task-completed' marker (distinguishes bulk-close from real per-block commits).

Step 8 — Append to sessions.md

Append one line via Edit tool:

{date} {time} | {project}--{slug} | {✅ / ⚠️ / ❌} | {one-line summary}

Never overwrite — only append.


Anti-patterns

❌ Inlining the skill instead of using the Skill() tool

Started executing the protocol manually from memory — outdated version, no accuracy guarantee. Always via Skill('ship-first').

❌ Skipping Step 0.5 artifact check silently

Missing flow/library/plan/report/user-note artifacts left ungated — task closes with holes. Always check and prompt "Restore? (go / skip)".

❌ Executing both modes in one run

Per-block mode and task-level mode are mutually exclusive. Per-block does B1-B6 only. Task-level does 0.5-8 only.

❌ Overwriting sessions.md

The sessions log is append-only. Overwriting destroys history. Always Edit append, never Write.


Related skills

  • plan-first — invokes per-block ship-first after execute
  • arch-first / audit-first — invoke task-level ship-first after all blocks close
  • ui-ai-first — invoked at Step 0.6 if flag is set
  • go-guide — invoked at Step 4.5 to create a guide
  • arch-map — invoked at Step 4.7 to compute arch_ref

Step 99 — Log invocation

sqlite3 {routing_db} \
  "INSERT INTO skill_invocations (task_id, block_num, skill_name, invoked_at)
   VALUES ('{slug}', '{N}', 'ship-first', datetime('now'))" 2>/dev/null || true

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.