Skip to content
Back to skills

Push

ASecurity

Otaq's default Push workflow skill - get the context with `otaq prime`, propose messages for the commits not yet on the PR's branch with `otaq pr propose --stdin`, and only once Otaq says they are confirmed (by the user, or at once in automatic mode) push them to the existing PR, then report it with `otaq pr opened <url>`.

  • 4 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added October 26, 2026
ai-agentsgoazuregitdevops

Works with

  • cli

Security analysis

A100/100

Scanned November 11, 2026

npx -y skills add otaq-io/otaq --skill push --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Push?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Push
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/otaq-io-push/badge)](https://www.skillsdirectory.com/skills/otaq-io-push)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: push
description: Otaq's default Push workflow skill - get the context with `otaq prime`, propose messages for the commits not yet on the PR's branch with `otaq pr propose --stdin`, and only once Otaq says they are confirmed (by the user, or at once in automatic mode) push them to the existing PR, then report it with `otaq pr opened <url>`.
disable-model-invocation: true
---

# Push new commits to your ticket's pull request

Your ticket (its key is in `$OTAQ_TICKET`, for example `SHOP-26`) already has an open pull request. The user
reviewed the rework and clicked **Push to PR**, or the ticket came back after a Send back with PR comments and its
flow pushes on its own. You propose the messages of the new commits; **nothing is pushed until the proposal is
confirmed**. This happens in two turns, like opening the PR did.

- **Click mode:** you were started with this skill alone. The user confirms your messages in a dialog; the message
  that starts turn 2 reads "The user confirmed the push".
- **Automatic mode:** the text after this skill starts with the word `automatic`, and `prime`'s "Pull request"
  section has the line `- Mode: automatic (no dialog): nobody reviews your proposal; Otaq confirms it at once`.
  Nobody reviews your messages: Otaq confirms them as they are, and the message that starts turn 2 reads
  "The push was confirmed automatically". So propose exactly what you want pushed.

## Turn 1: propose

1. **Get the context first.** Run `otaq prime` and read all of it. Its "Pull request" section names the PR, its
   branch (locked: it can't be renamed any more), the target branch, and the **new** commits that aren't on the remote
   branch yet, oldest first, with their current messages. Commits that were already pushed are not yours to change.
2. **Follow the Agent instructions** that `prime` prints. They are the user's own rules and they apply to every step
   below. They add to these steps; they never remove getting the context (step 1), proposing before pushing (step 3)
   or reporting back (step 8).
3. **Propose** with `otaq pr propose --stdin`: one message per new commit, in the listed order. Keep the branch as
   `prime` names it. The title and description stay those of the open PR, so leave them out:

   ```sh
   otaq pr propose --stdin <<'PROPOSAL'
   {
     "branch": "bugfix/SHOP-26-checkout-totals",
     "commits": [
       {"sha": "9c8d7e6", "message": "SHOP-26: round totals per line, as the review asked"}
     ]
   }
   PROPOSAL
   ```

   If the command refuses the proposal, fix what it names and propose again. Never reword or rebase commits yourself.
   When the "Pull request" section has **Tickets merged into this one**, those tickets' work goes into the PR too:
   you add them to its description in turn 2 (step 7).
4. **End your turn.** Don't push. In click mode the user reviews the messages in Otaq; in automatic mode Otaq's
   confirmation arrives as your next message.

## Turn 2: push

Otaq types "The user confirmed the push" into this session once the user clicks **Push**, or "The push was confirmed
automatically" in automatic mode. Either one is your go-ahead. If the user cancels instead, nothing happens and
nothing is pushed.

5. Run `otaq prime` again. Otaq has already reworded the new commits as confirmed; don't change them.
6. **Push the branch** to `origin`, without `--force`:

   ```sh
   git push origin bugfix/SHOP-26-checkout-totals
   ```

   Use the user's own git credentials as they are; never store, print or ask for a token. If the push is rejected
   (for example because someone else pushed to the PR), don't force it and don't rebase: tell the user what git said
   with `otaq ask human --stdin` and end your turn.
7. **List the merged-in tickets.** When the "Pull request" section has **Tickets merged into this one**, the PR's
   description lists each of them, with its key, its title and a line on what it changed (for example
   `- SHOP-20 Coupon codes: customers enter a coupon code at checkout`). Add the ones it doesn't list yet, keeping
   the rest of the description as it is. Put the new description in a file, never in a quoted argument:
   - **GitHub:** `gh pr view 481 --json body --jq .body` reads it; `gh pr edit 481 --body-file /tmp/SHOP-26-pr.md`
     replaces it.
   - **Azure DevOps:** `az repos pr show --id 481 --query description --output tsv` reads it;
     `az repos pr update --id 481 --description "$(cat /tmp/SHOP-26-pr.md)"` replaces it.

   If editing the description fails, tell the user what failed with `otaq ask human --stdin` and end your turn.
8. **Report back** with the PR's URL as `prime` shows it: `otaq pr opened <url>`, for example
   `otaq pr opened https://github.com/acme/shop-web/pull/481`. The ticket waits in the flow's last stage as "PR
   open". End your turn.

## Rules

- **Never push before Otaq tells you the push is confirmed**, and never with `--force`.
- Don't change files or commits. If something must change, ask the user with `otaq ask human --stdin`.
- **Long text always goes through stdin** (`--stdin`), never quoted arguments.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in ai-agents →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.