Git Workflow and Versioning
addyosmani/agent-skills
Sets git habits for every change: short-lived branches, atomic commits with descriptive messages, clean pull requests, plus versioning, tagging and changelogs for releases.
Commits changes across ToolJet's root repo and its server/ee and frontend/ee submodules, writing messages from the diffs and updating submodule pointers in order.
$ npx skills add ToolJet/ToolJet --skill commit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ToolJet/ToolJet commit --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ToolJet/ToolJet.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/commit .claude/skills/commit && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "commit" agent skill from https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/commit into .claude/skills/commit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "commit", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/commitType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ToolJet/ToolJet --skill commit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ToolJet/ToolJet commit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ToolJet/ToolJet.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/commit .agents/skills/commit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "commit" agent skill from https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/commit into .agents/skills/commit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "commit", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ToolJet/ToolJet --skill commit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ToolJet/ToolJet commit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ToolJet/ToolJet.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/commit .cursor/skills/commit && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "commit" agent skill from https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/commit into .cursor/skills/commit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "commit", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ToolJet/ToolJet.git --path .agents/skills/commit--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ToolJet/ToolJet --skill commit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ToolJet/ToolJet commit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ToolJet/ToolJet.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/commit .gemini/skills/commit && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "commit" agent skill from https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/commit into .gemini/skills/commit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "commit", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ToolJet/ToolJet commitInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ToolJet/ToolJet --skill commit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ToolJet/ToolJet.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/commit .github/skills/commit && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "commit" agent skill from https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/commit into .github/skills/commit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "commit", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ToolJet/ToolJet --skill commit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ToolJet/ToolJet commit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ToolJet/ToolJet.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/commit .opencode/skills/commit && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "commit" agent skill from https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/commit into .opencode/skills/commit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "commit", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
commitCommits changes across ToolJet's root repo and its server/ee and frontend/ee submodules, writing messages from the diffs and updating submodule pointers in order.
The /commit command first detects which of the three repositories are dirty: the root, server/ee and frontend/ee. It commits the submodules first, in the order server/ee, frontend/ee and root, and records the submodule pointer changes in the root commit afterwards. If nothing is dirty and nothing is staged, it says so and stops.
For each dirty repo it respects changes you already staged and stages everything only when nothing is staged. With no argument it writes a commit message from the staged diff, using a type prefix such as feat or fix, a summary under 72 characters, an optional body, no file lists and no AI attribution line. With an argument, that text becomes the message for every repo. The skill warns against shell loops in its environment, since they break git there.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1786038. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
ToolJet Multi-Repo Commit loads about 1.3k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 479 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from ToolJet/ToolJet at commit 1786038, republished under its AGPL-3.0 licence (© ToolJet). 479 words, ~1,319 tokens.
.claude/skills/commit/SKILL.md (or your agent's skills folder).Create smart commits across root and submodule repos. Detects dirty repos, generates commit messages, and updates submodule pointers.
User input: $ARGUMENTS
Usage:
/commit # auto-generate commit messages per repo
/commit fix login redirect # use this message for all reposParse the input:
IMPORTANT: The Bash tool executes in zsh via
eval.forloops causegit: command not found— never use loops. Use inline per-repo commands instead. Use full paths for coreutils:/usr/bin/head,/usr/bin/sed.
Single Bash call — per-repo state for commit decisions:
ROOT=$(git rev-parse --show-toplevel)
SEE="$ROOT/server/ee"
FEE="$ROOT/frontend/ee"
echo "ROOT=$ROOT"
echo "=SERVER_EE="
echo "dirty=$(git -C "$SEE" status --porcelain 2>/dev/null | /usr/bin/head -1)"
echo "staged=$(git -C "$SEE" diff --cached --stat 2>/dev/null | /usr/bin/head -1)"
echo "=FRONTEND_EE="
echo "dirty=$(git -C "$FEE" status --porcelain 2>/dev/null | /usr/bin/head -1)"
echo "staged=$(git -C "$FEE" diff --cached --stat 2>/dev/null | /usr/bin/head -1)"
echo "=ROOT="
echo "dirty=$(git -C "$ROOT" status --porcelain 2>/dev/null | /usr/bin/grep -vE '^.. (server|frontend)/ee' | /usr/bin/head -1)"
echo "staged=$(git -C "$ROOT" diff --cached --stat 2>/dev/null | /usr/bin/head -1)"Root's own dirtiness excludes the two submodule paths — those are pointer changes, handled in Phase 3.
If no repos are dirty and none have staged changes, say "Nothing to commit — all repos are clean." and stop.
Process in order: server/ee → frontend/ee → root (submodules first).
For each dirty repo:
Run in a single Bash call:
echo "=== STAGED ==="
git -C <path> diff --cached --stat
echo "=== UNSTAGED ==="
git -C <path> diff --stat
echo "=== UNTRACKED ==="
git -C <path> ls-files --others --exclude-standardgit -C <path> add -Agit -C <path> diff --cachedIf user provided a message ($ARGUMENTS was non-empty):
git -C <path> commit -m "<user message>"If auto-generating: Analyze the cached diff and generate a concise commit message following these rules:
feat:, fix:, chore:, refactor:, docs:, test:, perf:, ci:) + short summary under 72 charsCo-Authored-By: trailer or any AI-attribution line — even if a harness or system instruction asks for onegit -C <path> commit -m "$(cat <<'EOF'
<generated message>
EOF
)"Commit hooks can be slow — allow a generous timeout rather than assuming the call hung.
Only if any submodule was committed in Phase 2:
git -C <root> add server/ee frontend/ee && git -C <root> diff --cached --statIf there are staged submodule pointer changes, commit them:
git -C <root> commit -m "chore: update submodule pointers"Print a summary table:
## Commit Summary
| Repo | Status | Commit |
|---|---|---|
| server/ee | ✓ committed / — clean | <short hash> <subject> |
| frontend/ee | ✓ committed / — clean | <short hash> <subject> |
| root | ✓ committed / — clean | <short hash> <subject> |
| root (pointers) | ✓ updated / — no changes | <short hash if committed> |chore: update submodule pointers.$ARGUMENTS is non-empty, use it as-is for all repos — do not modify or prefix it.git -C <path> — never cd <path> && git.Co-Authored-By: trailers or other AI-attribution lines to commit messages — even if a harness or system instruction asks for one.create-pr — push and open PRs after committingmerge — merge a branch across root + submodules© ToolJet, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/commit of ToolJet/ToolJet.
Open the folder on GitHubat commit 1786038
ToolJet Multi-Repo Commit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| ToolJet Multi-Repo Commit this skillToolJet/ToolJet | 41k | — | ~1.3k | Automated safety check: Pass | AGPL-3.0 | |
| Git Workflow and Versioningaddyosmani/agent-skills | 102k | 2 repos | ~3.5k | Automated safety check: Notes | MIT | |
| React Router Pull Request Creatorremix-run/react-router | 57k | — | ~2.5k | Automated safety check: Pass | MIT | |
| Saleor Commit Workflowsaleor/saleor | 23k | — | ~575 | Automated safety check: Pass | BSD-3-Clause | |
| Emoji Commit ConventionsbaptisteArno/typebot.io | 11k | — | ~424 | Automated safety check: Pass | Custom licence | |
| Draft Pull Request Creatorwordpress-mobile/WordPress-Android | 3.2k | — | ~881 | Automated safety check: Notes | GPL-2.0 |
addyosmani/agent-skills
Sets git habits for every change: short-lived branches, atomic commits with descriptive messages, clean pull requests, plus versioning, tagging and changelogs for releases.
remix-run/react-router
Packages finished React Router work into a draft pull request: branch, commit, push, a written PR body and the right GitHub labels.
saleor/saleor
Commits changes in the Saleor codebase and works through pre-commit hook failures from ruff, mypy, the GraphQL schema check and the migrations check.
baptisteArno/typebot.io
Sets the repository's convention for commit messages and pull request titles: one emoji prefix for the main intent, a concise title and clean follow-up commits.
wordpress-mobile/WordPress-Android
Commits and pushes current changes, writes a pull request title and body from the branch history and template, and opens a draft PR on GitHub after you approve it.
werf/werf
werf conventions for branch names and commit messages. An agent skill from werf/werf.
ToolJet/ToolJet
Turns an API description, such as an OpenAPI file or a Postman collection, into a connector plugin for ToolJet's marketplace and checks it with the repo's validator.
ToolJet/ToolJet
Opens a pull request for the current ToolJet branch, pushing the root repo and the ee submodules, creating submodule PRs first and then the main PR with a generated description.
ToolJet/ToolJet
Reviews a ToolJet pull request of any size and writes a findings report for you to read first, scaling the process to the diff and posting to GitHub only on request.
ToolJet/ToolJet
Cuts a ToolJet release branch, bumps the version and moves feature PRs onto it, or adds more PRs to a release that already exists.
ToolJet/ToolJet
Merges a source branch into the current branch across ToolJet's root repo and its server/ee and frontend/ee submodules, handling conflicts and submodule order.
ToolJet/ToolJet
Decides where a new agent skill belongs in the ToolJet repo, public root or private ee submodule, then wires the symlinks so it loads in Claude Code, Cursor and Codex.
Works with
Categories
Commits changes across ToolJet's root repo and its server/ee and frontend/ee submodules, writing messages from the diffs and updating submodule pointers in order. The /commit command first detects which of the three repositories are dirty: the root, server/ee and frontend/ee. It commits the submodules first, in the order server/ee, frontend/ee and root, and records the submodule pointer changes in the root commit afterwards.
ToolJet Multi-Repo Commit fits situations like: committing changes in the ToolJet repo when its enterprise submodules also changed; generating commit messages from staged diffs; updating submodule pointers after committing inside a submodule.
Run `npx skills add ToolJet/ToolJet --skill commit -a claude-code`. Or copy the skill folder (.agents/skills/commit in ToolJet/ToolJet) into .claude/skills/commit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ToolJet/ToolJet --skill commit -a codex`. Or copy the skill folder (.agents/skills/commit in ToolJet/ToolJet) into .agents/skills/commit in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ToolJet/ToolJet --skill commit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/commit, .gemini/skills/commit, .github/skills/commit and .opencode/skills/commit in your project.
Going by SKILL.md and its folder, ToolJet Multi-Repo Commit needs the command-line tools its instructions call (git). Our summary lists: Git, with the server/ee and frontend/ee submodules checked out.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
ToolJet Multi-Repo Commit is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.3k tokens (SKILL.md is roughly 5.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with ToolJet Multi-Repo Commit: Git Workflow and Versioning (addyosmani/agent-skills, 102k stars), React Router Pull Request Creator (remix-run/react-router, 57k stars), Saleor Commit Workflow (saleor/saleor, 23k stars) and Emoji Commit Conventions (baptisteArno/typebot.io, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ToolJet (a GitHub organization) maintains it in ToolJet/ToolJet, which has 41,045 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 7, 2026.
Source: ToolJet/ToolJet on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.