github
Skill0 starsChanged 50 days agoMITView on GitHub
Git and GitHub interaction conventions for loop commits, pushes, and PRs. Use gh / the GitHub API for writes when the local .git is read-only (constrained containers); set the commit author from AGENTS.md commit_identity; never a company/shared email; no Co-authored-by trailers unless configured (no_unconfigured_coauthors); PR body conventions (Closes #, standards block) and the squash-merge co-author caveat. Triggers: github, git push, gh cli, commit identity, commit author, coauthor, co-author, pull request, pr body, squash merge.
- Deletes or force-pushes
- Commits and pushes
166 other projects use a version of this.
Adopted by
Most recently taken up by
- Moriarty33/jb-kaizentheir own version, first seen Nov 8, 2026
- GradScalerTeam/claude_clitheir own version, first seen Nov 8, 2026
- artivilla/agent-skillstheir own version, first seen Nov 8, 2026
- DmacMcgreg/psibottheir own version, first seen Nov 8, 2026
- ashleysbrain/skillstheir own version, first seen Nov 8, 2026
- sidmanale643/pekka-bottheir own version, first seen Nov 8, 2026
Used with
Projects with it also use taskflow-inbox-triage, BlueBubbles and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
AtomicBot-aiSkilltaskflow-inbox-triage
Also in 6 projects that use this
jiulingyunSkillBlueBubbles
为Clawdbot构建或更新BlueBubbles外部通道插件(扩展包,REST发送/探测,webhook入站)。
Also in 20 projects that use this
hkyutongSkillnode-connect
Diagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps. Use when QR/setup code/manual connect fails, local Wi-Fi works but VPS/tailnet does not, or errors mention pairing required, unauthorized, bootstrap token invalid or expired, gateway.bind, gateway.remote.url, Tailscale, or plugins.entries.device-pair.config.publicUrl.
Also in 18 projects that use this
molt-botSkilldiscord-e2e
Test Discord with Convex-leased QA bots: check credentials without a Gateway, exercise owned messages, or prove OpenClaw replies, files, threads, reactions, streaming, and typing. Distinguish API and Gateway evidence from manual user interactions.
Also in 10 projects that use this
molt-botSkillopenclaw-repair-sweep
Run scoped OpenClaw issue/PR repair campaigns: coordinate workers, prove root causes, and land or close verified work under the requested authority.
Also in 10 projects that use this
clawdbotSkillopenclaw-performance
Performance work in OpenClaw: a slow or heavy flow (latency, CPU, memory, SQL, RPC, renders), writing or reviewing a perf PR, or adding a cache. Count the work, delete waste first, cache last.
Also in 7 projects that use this
- +2 more from molt-bot
Other versions166 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 166
- moltbot/clawdbot★ 394ksame name
- steipete/warelay★ 394ksame name
- steipete/clawdis★ 394ksame name
- moltbot/moltbot★ 394ksame name
- clawdbot/clawdbot★ 394ksame name
- openclaw/openclaw★ 394ksame name
- molt-bot/clawdbot★ 391ksame name
- NousResearch/hermes-agent★ 262ksame name
- spinabot/brigade★ 11ksame name
- the-open-agent/openagent★ 5.7ksame name
156 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository7 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- create-issueSkill
- init-agentsSkill
- loopSkill
- plan-issuesSkill
- work-issueSkill
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 1 is distinctive, and 5 are very specific to this project.
0
Common
Most of the 151 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 33
Read-only
.git: do not fight the local push. - Very specific: line 34
Commit + push via the Contents API (gh api --method PUT repos/<slug>/contents/<path> with base64 content + branch), or gh api GraphQL …
- Very specific: line 42
When commit_identity is set, run before every commit:
- Distinctive: line 47
When it is absent, fall back to the ambient git config (no change).
- Very specific: line 52
Do not add a Co-authored-by: trailer or a bot footer to any commit message or PR body — unless AGENTS.md explicitly configures one.
- Very specific: line 81
Avoid commands that open an interactive editor/pager: set GIT_PAGER=cat / --no-pager, provide -m for commit messages, use gh --json/-q …
“Common” is measured: kept by at least 6 in 10 of the 151 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
github — git / gh interaction conventions
Type: reference / convention
Shared conventions for every stagecrew stage that touches git or GitHub (Implementer, Closer, /init-agents). Keeps commit attribution clean and drift-free.
Canonical source (read this before editing anything below)
This file is the canonical source for the git/gh interaction conventions — the commit author identity from AGENTS.md commit_identity, the no_unconfigured_coauthors rule, gh-instead-of-git on a read-only .git, the PR-body conventions, the squash-merge co-author caveat, and the non-interactive-shell rules. Every consumer in this repo either points here or receives the text by transclusion; none of them restates a rule, except the one declared copy artifact named below. Change a convention here and nowhere else.
Transclusion into the rendered subagent briefs. The two Implementer briefs and the inline Closer briefing cannot follow a pointer — a subagent receives a rendered brief, not a filesystem. They therefore carry the placeholder {{git_conventions}}, which skills/work-issue/SKILL.md fills from this file at dispatch time, exactly as it already fills {{commit_identity}} and {{git_remote}}. The rules stay in one file and every rendered brief carries the current text by construction — there is no copy to keep in sync.
- Path resolution is skill-relative: the render step reads
../github/SKILL.mdfrom its own skill directory (skills/work-issue/). There is noCLAUDE_PLUGIN_ROOTand no plugin-cache lookup — the plugin's own directory layout is the only thing that has to hold. This is the repo's existing precedent (skills/work-issue/SKILL.mdalready reads../init-agents/references/AGENTS.md.template). - The injected extent is the delimited block below, and nothing else: everything between the two
git_conventionsHTML-comment markers (BEGIN and END) that stand alone on their own lines further down, i.e. §1–§6 verbatim. Keep each marker on a line of its own and never reproduce a full marker comment elsewhere in this file — the render step locates them by whole-line match, and a marker buried in a sentence is a decoy. The YAML frontmatter, this section and the "See also" are outside the block on purpose — the frontmatter is loader metadata, and "See also" points back at the briefs, which would be a circular reference inside a rendered brief. - A new section belongs inside the markers only if a committing stage must obey it. Anything a stage does not act on (metadata, cross-links, rationale) goes outside them. Moving a marker changes what every brief receives; say so in the PR.
Full mechanics, including the failure mode when the block cannot be read: skills/work-issue/SKILL.md, "Transcluded git/gh conventions ({{git_conventions}})". Rationale: docs/adr/0012-transcluded-git-conventions.md.
Declared copy artifact — one. skills/init-agents/references/AGENTS.md.template restates these conventions in two comments: the never a company/shared email note beside its commit_identity entry (§2) and the no_unconfigured_coauthors note beside its hard_gates entry (§3, §5). That file is not rendered and never sees this one: a human reads it inside a foreign repo, where nothing resolves a path into this plugin — the same standalone-readability argument that already exempts its commented models:, plan-issues: and strategy: blocks. It is named as a copy artifact in the repo's AGENTS.md hard-gate 8 and changes together with this file. The briefs are not copy artifacts — they are transclusion consumers and hold no text of their own.
<!-- BEGIN git_conventions -->1. Writes: prefer gh / the API when .git is read-only
In a constrained container the local .git can be read-only (no git push), and tooling like python3 may be missing.
- Normal environment: plain
git—git commit,git push -u origin <branch>. - Read-only
.git: do not fight the local push. Usegh/ the GitHub REST API for the write:- Commit + push via the Contents API (
gh api --method PUT repos/<slug>/contents/<path>with base64 content +branch), orgh apiGraphQLcreateCommitOnBranchfor multi-file commits. - Open the PR with
gh pr create(orgh api repos/<slug>/pulls).
- Commit + push via the Contents API (
- Detect the case first: if
git pushfails with a read-only / permission error, switch to theghpath rather than retrying.
2. Commit author identity — from AGENTS.md commit_identity
The author identity is not ambient. It comes from the AGENTS.md work-issue: commit_identity block (name + email).
- When
commit_identityis set, run before every commit:git config user.name "<commit_identity.name>" git config user.email "<commit_identity.email>" - When it is absent, fall back to the ambient
git config(no change). - Never author a loop commit under a company or shared email. Use a personal identity or a GitHub noreply address (
<id>+<user>@users.noreply.github.com).
3. No unconfigured co-authors (no_unconfigured_coauthors)
Do not add a Co-authored-by: trailer or a bot footer to any commit message or PR body — unless AGENTS.md explicitly configures one.
- Rationale: a stray
Co-authored-by:line pulls a bot or a foreign account into the repo's contributor list. That is exactly the failure this gate prevents. - Scope (narrowed, #104). The gate targets a bot or a foreign human ending up in the contributor list — an account this repo does not recognize. A trailer where every identity involved resolves to the same human is not that failure: the recurring case is a
commit_identitymismatch against the merging account (§5), which names the same person twice under two addresses. That case does not violate this gate on its own. It is still worth avoiding — a permanent trailer is noise even when harmless — so §5's mitigation stays the default; this line only says what counts as a violation of this rule. - This is a hard-gate; the Implementer and Closer briefs enforce it.
4. PR body conventions
- Link the issue: include
Closes #<num>so the merge auto-closes it. - Standards block: summarize the AGENTS.md standards used (branch pattern, syntax check, smoke test, hard gates honored).
- Sections: summary, test plan, loop-workflow process block.
- No co-author lines / bot footers in the body (same gate as §3).
5. Squash-merge caveat
stagecrew squash-merges PRs, and the appended Co-authored-by: trailer has two distinct causes — the fix for one does not fix the other.
- Dirty branch commits. GitHub appends the co-author lines from the individual squashed commits onto the squash commit. So a clean PR body is not enough — every individual commit on the branch must already be free of
Co-authored-by:trailers. Keep the commits clean at author time (§2, §3); do not rely on cleaning up at merge time. Identity mismatch (#104). Even when every commit is clean, GitHub still appends a trailer whenever the account performing the merge differs from the identity that authored the branch commits — same human, two addresses, included. This happens because GitHub's default, auto-generated squash message lists the squashed commits' authors as co-authors whenever they differ from the merging account; it is not reading the commits for dirt, it is computing a message from two identities on one squash. Cleaning the branch commits (the bullet above) does nothing for this case, because they were never dirty.
Mitigation, not a gate. The Closer may compare the branch commits' author identity against its own merging identity before merging and note a mismatch in its stage comment — a report, never a merge-blocking condition: attribution cosmetics are not a reason to fail a merge (see §3's narrowed scope above). The cheaper fix avoids the trailer outright — the two identities still differ either way, nothing closes that gap:
gh pr merge --squash --subject "<title>" --body "<body>"supplies the squash commit message directly, which the observed mechanism above says replaces GitHub's default-generated message — the one place the co-author line is computed — rather than editing it after the fact. This is not a documented GitHub guarantee; it is the mechanism inferred from the default-message behavior above, and every merge that uses it is itself a further data point. The Closer's merge step records which happened (canonical:skills/work-issue/SKILL.md, Stage 5 step 4). Design record:docs/adr/0022-squash-merge-identity-mismatch.md.The cyclical trap. Removing
commit_identitydoes not fix this — it trades a known, chosen mismatch for whatever the ambient session default happens to be, which is still generally a different address from the merging account. The mismatch moves; it does not close. The actual fix is operator-side (aligning the GitHub account's commit email withcommit_identity, or vice versa — see the ADR above), and is out of this plugin's reach.
6. Non-interactive shell commands (agent-hardening)
An agent runs shell commands non-interactively — a prompt for y/n hangs the loop indefinitely. On many systems cp/mv/rm are aliased to -i (interactive) mode, and git/gh can open a pager or editor.
- Always pass non-interactive flags for file ops:
cp -f,mv -f,rm -f,rm -rf(never a barecp/mv/rmthat may inherit an-ialias). - Avoid commands that open an interactive editor/pager: set
GIT_PAGER=cat/--no-pager, provide-mfor commit messages, usegh --json/-qinstead of paged output, and useghflags like--yeswhere a confirmation would otherwise block. - Interactive git flows (
git rebase -i,git add -i) are unavailable — script the non-interactive equivalent.
<!-- END git_conventions -->See also
skills/work-issue/SKILL.md, "Transcluded git/gh conventions ({{git_conventions}})" — how the block above reaches a rendered brief.skills/work-issue/references/subagent-briefs/code-implementer.md/research-implementer.md— transclusion consumers: their commit step carries{{git_conventions}}, not a copy of these rules.skills/work-issue/SKILL.md, Stage 5 (Closer) — the third transclusion consumer (step 0), plus the Closer's own PR + squash-merge mechanics.skills/init-agents/references/AGENTS.md.template— thecommit_identityfield shape and theno_unconfigured_coauthorshard-gate entry; the declared copy artifact named above.docs/adr/0012-transcluded-git-conventions.md— why transclusion rather than a declared copy artifact.docs/adr/0022-squash-merge-identity-mismatch.md— why the identity-mismatch case in §5 is a report and not a gate, the--subject/--bodyverdict, and the narrowed scope ofno_unconfigured_coauthorsin §3.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

