There is no origin remote in this demo. "Push" means: make sure the branch
is in a clean reviewable state and record a local PR entry on the issue via
the tasks CLI so the human reviewer can drag the issue to Merging when
ready.
Prerequisites
Working tree is clean (everything committed via the commit skill).
You know the issue identifier (it's in the prompt as {{ issue.identifier }}
for the agent that invoked you, but you can also re-read it from the
workpad).
The branch you're on is symphony/<identifier> — that's what the
after_create hook set up.
If anything is unstaged, commit it first via the commit skill.
Resolve the issue identifier. If your branch is named symphony/eng-3,
the identifier is the suffix uppercased: ENG-3. If you're unsure, check
the workpad header you stamped earlier.
Build the PR body. If the workpad has a clean summary, reuse it; otherwise
write a concise outcome-focused note covering:
What — short summary of the change
Why — link back to the issue (tasks://{{ issue.identifier }})
How — implementation notes
Validation — how you verified it works
Write it to a file:
cat > /tmp/pr_body.md <<'EOF'
## What
...
## Why
tasks://IDENT — see issue body.
## How
...
## Validation
...
EOF
Check whether a local PR already exists for this issue:
If state is MERGED or CLOSED — that PR is final. Create a fresh one
(the tasks CLI will refuse to create over an OPEN PR but accepts a new
one over a closed/merged one):
Capture the PR number — it's pr.number in the JSON output.
The branch lives only on this machine. Do NOT call git push and do NOT
call gh — neither will work. The branch is the artifact; the local PR
record points at it.
Guardrails
Never call git push, gh pr ..., or any remote-touching command. There
is no remote.
Never --force anything; there's nothing to force against.
Never paste the local PR record into the workpad — the issue's pr field
is the canonical view, accessible via tasks pr-view IDENT.
1---2name: push3description: Push (offline-demo)4---56# Push (offline-demo)78There is no `origin` remote in this demo. "Push" means: make sure the branch9is in a clean reviewable state and record a local PR entry on the issue via10the `tasks` CLI so the human reviewer can drag the issue to `Merging` when11ready.1213## Prerequisites1415- Working tree is clean (everything committed via the `commit` skill).16- You know the issue identifier (it's in the prompt as `{{ issue.identifier }}`17 for the agent that invoked you, but you can also re-read it from the18 workpad).19- The branch you're on is `symphony/<identifier>` — that's what the20 `after_create` hook set up.2122## Steps23241. Identify branch: `branch=$(git branch --show-current)`.252. Verify the working tree is clean and committed:26 ```sh27 git status --porcelain28 ```29 If anything is unstaged, commit it first via the `commit` skill.303. Resolve the issue identifier. If your branch is named `symphony/eng-3`,31 the identifier is the suffix uppercased: `ENG-3`. If you're unsure, check32 the workpad header you stamped earlier.334. Build the PR body. If the workpad has a clean summary, reuse it; otherwise34 write a concise outcome-focused note covering:35 - **What** — short summary of the change36 - **Why** — link back to the issue (`tasks://{{ issue.identifier }}`)37 - **How** — implementation notes38 - **Validation** — how you verified it works3940 Write it to a file:41 ```sh42 cat > /tmp/pr_body.md <<'EOF'43 ## What44 ...4546 ## Why47 tasks://IDENT — see issue body.4849 ## How50 ...5152 ## Validation53 ...54 EOF55 ```565. Check whether a local PR already exists for this issue:57 ```sh58 tasks pr-view IDENT --json59 ```60 - If output is `null` or `(no PR)` — create one:61 ```sh62 tasks pr-create IDENT \63 --branch "$branch" \64 --title "<clear PR title>" \65 --body-file /tmp/pr_body.md \66 --label symphony67 ```68 - If state is `OPEN` — update it in place:69 ```sh70 tasks pr-update IDENT \71 --title "<clear PR title>" \72 --body-file /tmp/pr_body.md \73 --label symphony74 ```75 - If state is `MERGED` or `CLOSED` — that PR is final. Create a fresh one76 (the `tasks` CLI will refuse to create over an OPEN PR but accepts a new77 one over a closed/merged one):78 ```sh79 tasks pr-create IDENT \80 --branch "$branch" \81 --title "<clear PR title>" \82 --body-file /tmp/pr_body.md \83 --label symphony84 ```856. Confirm the local PR is recorded:86 ```sh87 tasks pr-view IDENT88 ```89 Capture the PR number — it's `pr.number` in the JSON output.907. The branch lives only on this machine. Do NOT call `git push` and do NOT91 call `gh` — neither will work. The branch is the artifact; the local PR92 record points at it.9394## Guardrails9596- Never call `git push`, `gh pr ...`, or any remote-touching command. There97 is no remote.98- Never `--force` anything; there's nothing to force against.99- Never paste the local PR record into the workpad — the issue's `pr` field100 is the canonical view, accessible via `tasks pr-view IDENT`.
Run npx skillmds@latest add everyinc/push in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Push (offline-demo) It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
everyinc (@everyinc) published this skill. Their other Agent Skills are listed on their SkillMD profile.