Commit and Push
Commit staged changes, push the branch, create a PR if needed, and handle initial Gemini review.
Setup
Determine the repository for all gh commands:
REPO=$(./scripts/agents/tooling/agentTool.ts getRepo)Always pass -R "$REPO" to gh commands.
Track these state flags during execution:
gemini_quota_exhausted: Boolean, startsfalse. Set totruewhen Gemini returns its daily quota message.used_fallback_agent_review: Boolean, startsfalse. Set totrueafter running one fallback cross-agent review.deferred_items: Array of{thread_id, path, line, body, html_url}, starts empty. Populated by$address-gemini-feedbackwhen review feedback is deferred rather than fixed on-the-fly. Pass this state to$enter-merge-queuefor issue creation.
Workflow
- Check branch:
./scripts/agents/tooling/agentTool.ts setVscodeTitle
- If on main, create a new branch named for the change. - After creating/switching, update the VS Code title:
- Analyze changes:
- Run git status and git diff --staged to confirm what will be committed. - If tooling reports actions but git status shows no unexpected changes, proceed without asking about generated files.
- Commit format:
- Follow CLAUDE.md commit guidelines (conventional commits, GPG signed with 5s timeout, no co-author lines, no footers). - Header must be ≤ 50 characters (enforced by commitlint header-max-length). The header is the entire first line: type(scope): description. To ensure adherence, count characters before committing. If too long, shorten the scope or description: - Drop the scope: feat: add redis and garage reset scripts - Abbreviate: feat(scripts): add reset scripts (put details in body) - Use a broader verb: feat(scripts): add stack reset tooling - Do not bump versions here.
- Push:
- Run ./scripts/agents/tooling/agentTool.ts ensureDeps before pushing to avoid pre-push hook failures caused by stale or missing dependencies. - Push the current branch to the remote after the commit. - The pre-push hook runs full builds and tests; set a long timeout and do not assume timeouts mean failure.
- Verify push completed:
BRANCH=$(git branch --show-current) git fetch origin "$BRANCH" ["$(git rev-parse HEAD)" = "$(git rev-parse origin/$BRANCH)"] || echo "NOT PUSHED"
- Before proceeding to PR creation or Gemini follow-up, verify the push actually completed: - Do NOT proceed to step 6 or 7 until verification passes. Replying to Gemini with "Fixed in commit X" when X is not visible on remote creates confusion.
- Open PR: Compute the agent id:
AGENT_ID=$(basename "$(git rev-parse --show-toplevel)")PR body template (fill in real bullets, keep section order). Prefer this safe pattern:PR_BODY_FILE=$(mktemp) cat <<'EOF' > "$PR_BODY_FILE" ## Summary - <verb-led, concrete change> - <second concrete change if needed> ## Testing - <command run or "not run (reason)"> ## Issue - #<issue-number> Agent: __AGENT_ID__ EOF sed -i'' -e "s/__AGENT_ID__/${AGENT_ID}/g" "$PR_BODY_FILE" gh pr create... --body-file "$PR_BODY_FILE" rm -f "$PR_BODY_FILE"If there is no associated issue, replace the## Issuesection with:## Related - <link or short reference>
- If no PR exists, create one with gh pr create. - Do not include auto-close keywords (Closes, Fixes, Resolves). - Use the Claude-style PR body format and include the evaluated agent id. - Avoid shell interpolation bugs in PR bodies: always build body content with a single-quoted heredoc and pass it via --body-file (or --body "$(cat...)" only when no backticks/$/[] are present). - After creating the PR, run: - ./scripts/agents/tooling/agentTool.ts setVscodeTitle - ./scripts/agents/tooling/agentTool.ts tagPrWithTuxedoInstance
- Wait for Gemini:
- Wait 60 seconds for Gemini Code Assist to review.
- Check for quota exhaustion:
./scripts/agents/tooling/agentTool.ts checkGeminiQuota --number "$PR_NUMBER"Treatquota_exhausted: truein the JSON response as quota exhaustion.
- Gemini quota exhaustion can happen during the initial wait OR later follow-up interactions. - Check all Gemini response surfaces for the quota message: - If found: # Equivalent skill invocation: /cross-agent-review codex./scripts/agents/tooling/agentTool.ts solicitCodexReview - Set gemini_quota_exhausted=true. - If used_fallback_agent_review=false, run one fallback cross-agent review (Codex): - Set used_fallback_agent_review=true. - Skip further Gemini follow-ups for this run. - Proceed to /enter-merge-queue or end the skill.
- Address feedback:
- If gemini_quota_exhausted=false, run $address-gemini-feedback for unresolved comments. - When replying to Gemini, always tag @gemini-code-assist to ensure it receives a notification. - Reply to Gemini with ./scripts/agents/tooling/agentTool.ts replyToGemini --number <pr> --comment-id <id> --commit <sha> (not gh pr review). - Use replyToComment only for custom non-fix responses. - Re-run step 8 after each Gemini interaction. If quota appears later, switch to fallback immediately. - $address-gemini-feedback may populate deferred_items if any feedback is deferred rather than fixed on-the-fly.
- Report state for downstream skills: If
deferred_itemsis non-empty, mention that$enter-merge-queuewill create a tracking issue with thedeferred-fixlabel after merge.
- PR number and URL - Whether Gemini quota was exhausted - Any deferred_items that were collected
Token Efficiency (CRITICAL)
MANDATORY: ALL git commit and push commands MUST redirect stdout to /dev/null. Failure to do this wastes thousands of tokens on hook output.
# CORRECT - always use these forms
git commit -S -m "message" >/dev/null
git push >/dev/null
# WRONG - NEVER run without stdout suppression
git commit -m "message" # Burns 1000+ tokens on pre-commit output
git push # Burns 5000+ tokens on pre-push outputWhy this is non-negotiable:
- Husky pre-commit hooks output lint results, type-check results
- Husky pre-push hooks run full test suites and builds
- A single unsuppressed
git pushcan add 5,000+ lines to context - Errors go to stderr, which
>/dev/nullpreserves