npx skills add ...
npx skills add theorcdev/skills --skill grond
One word, GROND, and the agent stages everything, commits it, gets it onto the default branch, pushes, and reports every step in orc voice. Saying GROND is the authorization, so the agent never asks for confirmation. Use when the user says "GROND", "grond it", "smash it to main", or invokes /grond.
npx skills add theorcdev/skills --skill grond
The hammer of the underworld. The user says one word, GROND, and you take every change in the working tree, put it on the default branch, and push it. No plan, no confirmation prompt, no "are you sure". The word is the order.
GROND is the authorization. Committing and pushing to main is normally a
confirm-first action. Here the user has pre-authorized it by name, once, in
advance. Do not ask again. Do not offer a gentler alternative. Swing.
But an orc is blunt, never wrong. You report what actually happened. If the gate holds, you say the gate holds. Never announce a push that did not land.
Run these yourself, in order, verifying as you go.
Look at what you are about to commit before you stage it:
Halt if that list holds secrets that do not belong in history: .env and its
variants (.env.example is fine), *.pem, *.key, id_rsa, *.p12,
*credentials*.json, service-account keys. Name the files and say GROND does
not smash secrets into a remote. If the user says GROND a second time after
seeing the list, that is their call. Proceed.
Everything else goes in. GROND does not curate.
Read git diff --cached --stat and the diff itself, then write a message that
describes the actual change. Imperative, one line, no em dashes, and no "GROND"
in it. The chant belongs in the chat, not in the log.
Nothing staged and nothing ahead of the remote: "Gate already down." Skip to the report.
Find the real default branch name, do not assume main:
Both lines matter. origin/HEAD is often unset on a fresh clone, and a failing
symbolic-ref piped into sed still exits 0, so a plain || fallback would
never run and you would push to an empty branch name.
Read the name off echo, then substitute it literally for main in every
command below. Do not rely on $MAIN surviving into a later shell.
git merge --abort, return with git checkout <branch>, and
report the conflicting files. Do not resolve someone's conflicts under a
one-word order. The tree goes back exactly where it started.Rejected because the remote moved ahead, one retry only:
If it fails again, stop and quote the remote's own error text verbatim.
Never --force, never --force-with-lease, never rewrite pushed history.
GROND smashes forward through the gate. It does not smash the warband behind it.
Rejected by a branch protection rule: that gate is stronger than the ram. Name the rule, report it, and offer the PR route. Do not try to route around it.
Report the SHA that is actually on the remote. If local and origin/main do not
match, the push did not land, whatever the earlier output looked like.
Orc voice. Chant on top, facts underneath. Short lines, no hedging.
Gate down:
Gate held:
Never dress a failure as a win. Code, paths, SHAs, and remote error text stay verbatim. The orc voice is for the prose around them.
GROND is one swing, not a mode. After the report you return to your normal voice, and nothing else is pushed until the user says the word again.
git add -Agit commit -m "<message>"MAIN=$(git symbolic-ref --short refs/remotes/origin/HEAD 2>/dev/null | sed 's|^origin/||')
[ -n "$MAIN" ] || MAIN=$(git remote show origin | sed -n 's/.*HEAD branch: //p')
echo "$MAIN"git checkout main && git merge <branch>git push origin maingit pull --rebase origin main && git push origin maingit status -sb && git log --oneline -1 origin/mainGROND. GROND. GROND.
Gate is down, warchief.
Smashed: 7 files, 1 commit
Message: "Add rate limiting to the auth endpoint"
Landed: main @ a3f9c21
Lok'tar.GROND. GROND. GROND.
Gate holds, warchief. Ram bounced.
Reason: main is protected, direct pushes rejected
Remote: "GH006: Protected branch update failed"
Local commit stands at a3f9c21. Nothing pushed.
Next swing: open a PR, or drop the protection.