skills/preqstation/SKILL.md
Fetch tasks from PREQSTATION, execute work, and push updates/results back to PREQSTATION APIs. Use when asked to run a PREQ task, fetch todo tasks, or update execution status. Prefer the remote MCP endpoint at /mcp with OAuth login. Shell helper mode still uses PREQSTATION_API_URL and PREQSTATION_TOKEN. Tasks carry an `engine` field (`claude-code` | `codex` | `gemini-cli`) indicating which AI agent should execute them.
npx skillsauth add sonim1/preqstation-skill preqstationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This is the agent-side lifecycle skill. Dispatcher-host setup and launch orchestration live in the separate PREQ CLI/OpenClaw runtime package.
Recommended MCP mode:
projects-manager service:
claude mcp add -s user --transport http preqstation https://<your-domain>/mcpcodex mcp add preqstation --url https://<your-domain>/mcpgemini mcp add --scope user --transport http preqstation https://<your-domain>/mcp/mcpadd because it probes the server immediatelygemini mcp list still shows preqstation as Disconnected, open an interactive Gemini session and run /mcp auth preqstation.Needs authentication until first use or claude mcp get preqstationclaude mcp list, codex mcp list, or gemini mcp listOptional shell helper mode:
PREQSTATION_API_URL: PREQSTATION API base URL (example: https://mypreqstation.vercel.app)PREQSTATION_TOKEN: PREQSTATION Bearer token (generated in PREQSTATION /api-keys)PREQSTATION_ENGINE (optional): fallback engine (claude-code | codex | gemini-cli) when client auto-detection is unavailableEach agent must identify itself and use the corresponding engine value in all task operations (list, create, plan, start, update status, complete, review, block):
| If you are... | Use engine= |
| -------------------- | ------------- |
| Claude (Anthropic) | claude-code |
| GPT / Codex (OpenAI) | codex |
| Gemini (Google) | gemini-cli |
Always include your engine value when listing, creating, planning, starting, completing, reviewing, or blocking tasks.
Gemini CLI workers can run interactively with gemini or headless with gemini -p "<prompt>".
If your installed Gemini environment does not expose remote HTTP MCP, use the shell helper fallback instead of this MCP path.
If MCP is available, prefer the remote /mcp endpoint exposed by the PREQSTATION service.
All mutation tools accept an optional engine parameter and always send an engine value using this order:
initialize.clientInfo.name auto-detectionPREQSTATION_ENGINEcodex fallback| Tool | engine usage |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| preq_list_projects | Read-only, no engine needed (list PREQ projects for setup and local repo mapping) |
| preq_list_project_activity | Read-only, no engine needed; date-range activity feed for sync/cron consumers, not task execution lifecycle |
| preq_list_tasks | Read-only, no engine needed |
| preq_get_task | Read-only, no engine needed |
| preq_get_project_settings | Read-only, no engine needed (fetch project deploy settings by key) |
| preq_list_task_comments | Read-only; for comment objectives, fetch task comments as conversation history/reference around the target comment |
| preq_get_task_comment | Read-only; fetch the exact comment being handled before replying or changing comment state |
| preq_update_qa_run | Read-only from task lifecycle perspective; updates branch-level QA run status/report without task transitions |
| preq_plan_task | Assign engine, send lifecycle action plan, backend moves inbox task to todo and clears run_state |
| preq_create_task | Assign engine to new inbox task |
| preq_start_task | Record engine claiming the task; backend marks run_state=working |
| preq_update_task_note | Record engine while replacing the task note markdown without changing workflow status |
| preq_update_task_status | Record engine while updating workflow status-only endpoint (/api/tasks/:id/status) |
| preq_update_task_comment_state | Record engine while marking a task comment working, done, or failed without changing task workflow status |
| preq_reply_task_comment | Record engine while replying to a task comment; backend creates work logs for comment replies/failures automatically |
| preq_list_dispatch_requests | Read-only; inspect explicit dispatch requests used by launcher runtimes for ask parity and project-level insight |
| preq_update_dispatch_request | Launcher runtime only; mark an explicit dispatch request as dispatched or failed after launch succeeds or fails |
| preq_complete_task | Record engine in work log result, send lifecycle action complete; backend moves → ready and clears run_state |
| preq_review_task | Record engine running verification, send lifecycle action review; backend moves → done and clears run_state |
| preq_block_task | Record engine reporting the block, send lifecycle action block; backend moves → hold and clears run_state |
| preq_delete_task | Permanently delete a task by ticket number or UUID |
This gives deterministic task-id based execution and result upload.
You must follow this execution flow exactly.
Do not skip, reorder, combine, or substitute lifecycle actions.
PREQ launcher-driven runs are non-interactive by default.
You may use process skills such as brainstorming or writing-plans only as internal guidance while continuing the PREQ lifecycle in the same run.
Do not stop to ask the user for approval, clarifications, or design feedback mid-run unless PREQ tools are unavailable or the prompt/worktree/task state is invalid.
Project deploy settings are explicit operator authorization for this PREQ run. When deploy_strategy requires commit, push, or PR work, perform those git/GitHub actions without asking for separate approval.
Load -> Initialize -> Execute -> Finalize
Load:
Load the .preqstation-prompt.txt in this worktree/branch
Initialize:
preq_get_task once at the start to fetch task details, acceptance criteria, workflow status, run_state, and the initial engine.preq_get_task returns latest_preq_result, read it before substantive work and treat it as previous execution context, especially for resumed or previously blocked tasks.preq_start_task, except for comment objectives where task claiming is explicitly forbidden.insight, skip task lifecycle reads/writes and treat the prompt metadata plus project key as the source of truth.debug mode, create or refresh preqstation-progress.md after preq_get_task and update it after each major checkpoint.Ask: helper block first, then acceptance criteria, and only using the task title as a weak tie-breaker.agent_instructions only as a final tie-breaker when the task note, Ask: block, and acceptance criteria are still mixed or ambiguous. The current task content takes precedence.- [ ] or - [x] in AI-generated task notes, plan markdown, acceptance criteria, QA reports, descriptions, or newly created task content unless the user explicitly requests checkboxes. Preserve user-authored checkboxes when rewriting existing content; otherwise use plain bullets or numbered lists..preqstation-prompt.txtplan:
.gitignore being tracked, but the primary checkout contains the real app files, treat that as repo recovery rather than a missing project.origin exists and matches the PREQ repo URL. If origin is missing and the repo URL is known, add it with git remote add origin <repo_url>.main, push origin/main, recreate or refresh the worktree, and continue planning after the code becomes inspectable.origin/main fails.preq_plan_task with plan markdown and plain verification criteria. Do not format those criteria as Markdown checkboxes unless preserving user-authored checkboxes or the user explicitly requested checkbox items.preq_plan_task.ask:
Ask: helper block as the source material for the rewrite.private-or-skip policy. Authenticated workspace targets, member-restricted shares, and registered-account shares count as acceptable private access. Skip non-expiring anyone with the link URLs or other public-link-only modes.access=quickshare or the provider's equivalent and include expires=...; do not create non-expiring public links.Artifacts: markdown block. Keep the task note focused on durable task context.artifacts array passed to preq_update_task_note. Use objects with type, title, url, provider, access, expires, localPath, reason, and optional metadata as applicable.artifacts. If publishing is skipped, include the local artifact path and a concise reason such as provider unavailable, unauthenticated, or no safe target.127.0.0.1 URLs as local-only diagnostics. Do not present them as the only review link; either publish a private artifact URL or explicitly mark the artifact as local-only with the skip reason.preq_update_task_note(noteMarkdown=..., artifacts=[...]), passing any published artifact URLs or artifact publishing skip/local records through the structured artifacts field.preq_update_task_status with the current workflow status from preq_get_task.Ask: helper block.comment:
preq_update_task_note.preq_get_task, preq_get_task_comment, and preq_list_task_comments at the start to fetch task details, the current note, workflow status, existing run state, the exact comment being handled, and the surrounding task-scoped comment conversation.comment_id as the primary request for this run. Other user, agent, and system comments are conversation history/reference only, including prior AI replies; use them to understand flow and avoid contradictory or context-blind responses.preq_update_task_note.preq_start_task; comments use comment state rather than task run_state claiming.working with preq_update_task_comment_state before substantive work.preq_update_task_note only when the comment explicitly requests a note, plan, or specification change. This is the only “promote comment to notes” path: convert the requested change into canonical note/spec language, then mention that the note was updated in the reply. Do not rewrite the note for a normal answer, acknowledgement, or implementation-review comment.preq_reply_task_comment and set noteUpdated accurately to indicate whether preq_update_task_note was used.done with preq_update_task_comment_state after the reply succeeds.preq_complete_task, preq_review_task, preq_plan_task, or preq_block_task for a comment objective.preq_reply_task_comment if possible, then mark the original comment failed with preq_update_task_comment_state. If replying is impossible, still mark the comment failed with the most concrete failure reason available.insight:
preq_list_tasks with the current projectKey and detail=full before creating anything so you can avoid duplicates in inbox, todo, hold, and ready.preq_create_task.description detailed, but keep acceptanceCriteria to plain verification criteria without Markdown checkbox syntax.qa:
qa_run_id from .preqstation-prompt.txt and use preq_update_qa_run to mark the run running as soon as the local target URL is known.qa_task_keys from .preqstation-prompt.txt when present. If listed, call preq_get_task for each task key before browser testing and treat those tasks' titles, descriptions, and acceptance criteria as the QA scope.dogfood skill, use it as the default QA workflow for browser testing and report generation.private-or-skip policy when a safe provider is available.artifacts array, not the markdown report body.preq_update_qa_run again with final status (passed or failed), target_url, markdown report, summary counts, and artifacts=[...] when artifacts were generated.preq_complete_task, preq_review_task, or preq_block_task unless this run is also handling a real PREQ task.implement or resume:
latest_preq_result is present, use it to understand the latest blocked reason, prior summary, and most recent PREQ execution context before making changes.direct_commit, feature_branch, or none. Follow the Deployment Strategy Contract section.review:
tests, build, lint).preq_review_task with review notes.On any failure in an active task branch, call preq_block_task with the blocking reason and stop. This does not apply to comment objectives; use the comment failure lifecycle instead.
On any failure in a QA branch, update the QA run to failed with a concise markdown report and stop.
preq_complete_task with summary, branch, and pr_url when applicable.
On success for ask branches, do not call preq_complete_task; the successful note rewrite ends after preq_update_task_note plus preq_update_task_status using the unchanged workflow status.
On success for comment branches, do not call task completion, review, plan, or block tools; the successful comment response ends after preq_reply_task_comment plus marking the original comment done.
On success for insight branches, stop after the Inbox tasks are created; do not call preq_complete_task or mutate existing task workflow state.Before any git action, resolve deployment strategy through MCP:
preq_get_task <task_id>.task.deploy_strategy from the response.preq_get_project_settings <project_key> and resolve from:
settings.deploy_strategysettings.deploy_default_branchsettings.deploy_auto_prsettings.deploy_commit_on_reviewsettings.deploy_squash_mergeExpected values from PREQSTATION backend:
strategy: direct_commit | feature_branch | nonedefault_branch: string (usually main)auto_pr: boolean (feature_branch only)commit_on_review: booleansquash_merge: boolean (direct_commit only)Default when absent/invalid:
strategy=nonedefault_branch=mainauto_pr=falsecommit_on_review=truesquash_merge=trueBehavior by strategy:
none: do not run git commit/push/PR. Only code changes + task update result.
direct_commit and feature_branch are authorized git-operation modes. Do not block solely because general coding-agent defaults discourage autonomous commits, pushes, or PRs; the PREQ project deploy strategy is the approval source for this run.
Git-facing artifacts must default to English even when PREQ-facing task updates use another language. This includes commit messages, PR titles, PR bodies, branch names, and other repository-facing metadata.
direct_commit: merge worktree commits into default_branch and push. No PR.
After completing work in the worktree:
# In primary checkout: update and merge
git -C <project_cwd> checkout <default_branch>
git -C <project_cwd> pull origin <default_branch>
# squash_merge=true (default): single commit
git -C <project_cwd> merge --squash <worktree_branch>
git -C <project_cwd> commit -m "<task_id>: <summary>"
# squash_merge=false: regular merge
git -C <project_cwd> merge <worktree_branch>
# Push to remote
git -C <project_cwd> push origin <default_branch>
feature_branch: push worktree branch to remote. Create PR only when auto_pr=true (requires GitHub access on the agent such as gh auth or GitHub MCP).
git -C <project_cwd> push origin <worktree_branch>
# if auto_pr=true: create PR via GitHub MCP or gh CLI and capture the PR URL
PR creation rule for feature_branch + auto_pr:
preq_complete_task.Rule for commit_on_review:
true and strategy is direct_commit or feature_branch, do not move task to ready until remote push is verified.false, ready transition is allowed without mandatory remote push.Required completion rule for feature_branch + auto_pr + commit_on_review:
preq_complete_task.worktree_branchpreq_complete_task with both branchName and prUrlpreq_block_task with the exact missing prerequisite and the next operator action.Auto PR required before ready, but gh is not authenticated on the coding agent. Run gh auth login or configure GitHub MCP, then resume.Auto PR required before ready, but gh pr create failed after pushing task/proj-123/example. Fix the GitHub error and resume.Auto PR required before ready, but the PR is still a draft. Mark it ready for review, capture the final PR URL, then resume.If MCP is unavailable, source scripts/preqstation-api.sh and use the shell helpers documented in docs/shell-helper-mode.md.
Keep SKILL.md focused on lifecycle rules; use the helper reference doc for function signatures and jq/curl notes.
Use this only when the caller explicitly asks for debug mode or requests progress visibility.
<worktree>/preqstation-progress.mdWrite down the current execution flow steps
For example:
# PREQ Progress
- Task: PROJ-123
- Objective: implement
- Status: todo
- Run State: working
- Current Step: running task-level tests
- Last Updated: 2026-03-13T14:30:00Z
## Timeline
- 2026-03-13T14:10:00Z fetched task details using `preq_get_task`
- 2026-03-13T14:11:00Z called preq_start_task using `preq_start_task`
- 2026-03-13T14:18:00Z finished local code inspection
- 2026-03-13T14:30:00Z running task-level tests
...
tools
Fetch tasks from PREQSTATION, execute work, and push updates/results back to PREQSTATION APIs. Use when asked to run a PREQ task, fetch todo tasks, or update execution status. Prefer the remote MCP endpoint at /mcp with OAuth login. Shell helper mode still uses PREQSTATION_API_URL and PREQSTATION_TOKEN. Tasks carry an `engine` field (`claude-code` | `codex` | `gemini-cli`) indicating which AI agent should execute them.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------