Finishing a Development Branch
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
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.
$ npx skills add ToolJet/ToolJet --skill create-pr -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ToolJet/ToolJet create-pr --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/create-pr .claude/skills/create-pr && 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 "create-pr" agent skill from https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/create-pr into .claude/skills/create-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-pr", 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/create-prType 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 create-pr -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ToolJet/ToolJet create-pr --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/create-pr .agents/skills/create-pr && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "create-pr" agent skill from https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/create-pr into .agents/skills/create-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-pr", 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 create-pr -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ToolJet/ToolJet create-pr --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/create-pr .cursor/skills/create-pr && 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 "create-pr" agent skill from https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/create-pr into .cursor/skills/create-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-pr", 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/create-pr--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 create-pr -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ToolJet/ToolJet create-pr --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/create-pr .gemini/skills/create-pr && 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 "create-pr" agent skill from https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/create-pr into .gemini/skills/create-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-pr", 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 create-prInstalls 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 create-pr -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/create-pr .github/skills/create-pr && 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 "create-pr" agent skill from https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/create-pr into .github/skills/create-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-pr", 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 create-pr -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 create-pr --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/create-pr .opencode/skills/create-pr && 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 "create-pr" agent skill from https://github.com/ToolJet/ToolJet/tree/main/.agents/skills/create-pr into .opencode/skills/create-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-pr", 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.
create-prOpens 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.
The skill opens a pull request for the current branch in the ToolJet repository, handling its enterprise submodules along the way. It pushes the root repo and submodules, creates or updates submodule PRs for ee-server and ee-frontend, and then creates the main PR with a generated description. An argument names the base branch; without one, the agent picks it.
Base detection runs in order: your input, the base of an existing PR for the branch, the branch below in a stack, then the remote's default branch, asked from the remote itself because a local origin/HEAD goes stale. It asks you when sources disagree or the work looks like a release-line backport. The agent then gathers commits and the diff and stops if nothing is ahead of the base, inspects each submodule with pointer changes (skipping any on a detached HEAD) and lists existing PRs. Commands run one repo at a time rather than in loops, because the shell environment breaks on them.
2 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:
gitghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, 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 Pull Request Creator loads about 3.6k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 1,693 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). 1,693 words, ~3,617 tokens.
.claude/skills/create-pr/SKILL.md (or your agent's skills folder).Create a pull request for the current branch. Pushes, creates submodule PRs if needed, and creates the main PR.
User input: $ARGUMENTS
Parse the input as follows:
Requires the gh CLI, authenticated against both ToolJet and the submodule repos.
IMPORTANT: The Bash tool executes in zsh via
eval.forloops causegit: command not found— never use loops. Use inline per-repo commands instead.
Pick the base from what's known, in this order (the user input was: $ARGUMENTS):
gh pr view --json baseRefName).gh stack view), or a base the user named earlier in the conversation.main). Ask the remote, because a local origin/HEAD goes stale:git ls-remote --symref origin HEAD | awk '/^ref:/ {sub("refs/heads/","",$2); print $2}'If these disagree, or the work clearly belongs on a release line (e.g. an lts-* backport), ask the user instead of guessing.
Run in a single Bash call:
ROOT=$(git rev-parse --show-toplevel)
BRANCH=$(git -C "$ROOT" rev-parse --abbrev-ref HEAD)
BASE="<detected base>"
echo "=== COMMITS ==="
git -C "$ROOT" log --oneline --no-merges "origin/${BASE}..HEAD"
echo "=== DIFF STAT ==="
git -C "$ROOT" diff --stat "origin/${BASE}..HEAD"
echo "=== SUBMODULE CHANGES ==="
git -C "$ROOT" diff "origin/${BASE}..HEAD" -- server/ee frontend/ee
echo "=== CROSS-REPO STATUS ==="
git -C "$ROOT" status --short
git -C "$ROOT/server/ee" status --short
git -C "$ROOT/frontend/ee" status --shortIf there are no commits ahead of the base branch, say "No commits ahead of <base> — nothing to create." and stop.
If you need deeper understanding of specific changes, read key modified files with git diff origin/<base>..HEAD -- <path>.
For each submodule that has pointer changes, check its branch and recent commits:
echo "BRANCH=$(git -C "$ROOT/server/ee" rev-parse --abbrev-ref HEAD 2>/dev/null)"
git -C "$ROOT/server/ee" log --oneline -5 2>/dev/null
echo "BRANCH=$(git -C "$ROOT/frontend/ee" rev-parse --abbrev-ref HEAD 2>/dev/null)"
git -C "$ROOT/frontend/ee" log --oneline -5 2>/dev/nullA submodule sitting on a detached HEAD has no branch to open a PR from — note it and skip its PR.
Run in a single Bash call:
BRANCH=$(git -C "$ROOT" rev-parse --abbrev-ref HEAD)
echo "=== MAIN REPO ==="
gh pr list --repo ToolJet/ToolJet --head "$BRANCH" --json url,title,state,number 2>/dev/null
echo "=== SERVER_EE ==="
gh pr list --repo ToolJet/ee-server --head "$BRANCH" --json url,title,state,number 2>/dev/null
echo "=== FRONTEND_EE ==="
gh pr list --repo ToolJet/ee-frontend --head "$BRANCH" --json url,title,state,number 2>/dev/nullAnalyze the commits and diff to determine:
PR Title — format rules:
Feature:, Fix:, Chore:, Refactor:, Docs:, Test:, Perf:, CI:feature/ → Feature, fix/ → Fix, chore/ → Chore, etc.Writing style — CRITICAL rules for PR descriptions:
.proto files"> [!TIP] and similar) for routine notes. Their built-in label ("Tip", "Note") reads as noise under a section heading.Merge impact: always state it, as a folded <details> block at the end of Changes. It tells the reviewer how hard to look.
🟢 reversible when a plain revert undoes the PR;🔴 not reversible for a migration that drops or rewrites data, a public API or contract change, a release or external side effect, or a deletion.<details open>, so the risk is never folded away.</summary> and before </details>, or GitHub won't render the bullets.Sources: a 📎 **Sources:** label under the summary, then one bullet per item. Include only items with content, and drop the block when there are none:
Closes #123 when the PR fully resolves the issue, Relates to #123 when it only partly does.kickoff) need the full reference, ToolJet/tj-ee#123. Use the reference only, never the issue title or body, in a public PR.PRD: [title](url) and Design: [title](url), when those links (ClickUp, Figma, a GitHub spec issue) are in the conversation.Sub-issues: #124, #125. Use numbers only, because GitHub renders the titles.Sub-issues (#123): #124, #125.<details> when there are more than about 6.Submodules: a **Submodules:** label followed by one bullet per submodule PR: - [ee-server #123](url). Leave out a submodule with no changes, and the whole block when neither changed.
Conditional sections: include only when they apply.
Architecture: when the change has a shape worth seeing (new entities, permission models, flows, a refactor across files). Use the smallest view that makes the point, placed next to the sentence it supports:
sequenceDiagram, flowchart, erDiagram);diff over the table, entity or type when the data shape changes;Pick one or two, not all. Skip it for small fixes, config or copy changes. A note longer than a few words goes inside a Mermaid node or in the prose, not after an arrow in an ASCII block: packed annotations make the block hard to read.
API Reference: when HTTP endpoints are added or changed. A table with Method, Route, Permission, Request and Response columns.
Evidence: when runtime behaviour changes. Show proof it works, as before → after:
kickoff slices, link the verifier's report comment.Skip it for docs, tooling, config or CI-only changes.
How to test: when there is runtime behaviour a reviewer can exercise. Skip it for docs, tooling, config or CI-only changes.
Main PR body: use this template exactly as written, including the emoji prefixes. Every line and section after the summary is conditional; omit any that doesn't apply.
## 📝 What this does
<1-2 sentence elevator pitch — what changed and why it matters>
📎 **Sources:**
- Closes <#issue>
- PRD: [title](url)
- Design: [title](url)
- Sub-issues: <#num, #num>
**Submodules:**
- [ee-server #<n>](<url>)
- [ee-frontend #<n>](<url>)
## 🔀 Changes
- <what changed, past tense, no prefixes, max 5 bullets>
<details>
<summary>🛡️ <b>Merge impact:</b> <🟢 reversible | 🔴 not reversible></summary>
- **Can't undo:** <irreversible only: what a revert leaves behind>
- **Rollback:** <irreversible only: plan>
- **Reach:** <scope>
- **Not included:** <optional: deliberate omissions or surprising decisions>
</details>
## 🏗️ Architecture
<smallest view that fits: mermaid / ASCII tree / diff sketch / pseudocode>
## 🔌 API Reference
| Method | Route | Permission | Request | Response |
|--------|-------|------------|---------|----------|
| **POST** | `/api/...` | `PERM` | `{ body }` | `{ response }` |
## 🧾 Evidence
- **Before:** <screenshot / output / failing test>
- **After:** <screenshot / output / passing test>
## 🧪 How to test
- [ ] <short action-first step>Omit the Sources and Submodules blocks, or any bullet in them, when there's no content.
The section order follows the questions a reviewer asks: why, how risky, what changed, how it fits, does it work, how do I try it. The Evidence and Merge impact ideas and the "smallest view that fits" visuals are adapted from Matt Pocock's pr skill and HumanLayer's show-me and visual-pr skills by Dex Horthy (both MIT).
Submodule PR body (for each submodule with changes) — simplified template, NO test plan, NO Submodules, NO Screenshots. Use headings EXACTLY as shown, including emoji prefixes:
## 📝 What this does
<1-2 sentence summary>
**Main PR:**
- [ToolJet #<n>](<main repo PR url or PENDING>)
## 🔀 Changes
- <what changed, past tense, no prefixes>Submodules first, then root:
git -C "$ROOT/server/ee" push -u origin <branch>
git -C "$ROOT/frontend/ee" push -u origin <branch>
git -C "$ROOT" push -u origin <branch>Skip a submodule that has no branch (detached HEAD) or no commits of its own. Pre-push hooks are slow on this repo — allow a generous timeout. If SSH pushes hang or SIGPIPE after long hooks, retry the same push over HTTPS.
For each submodule (server/ee, frontend/ee) where changes exist AND the branch exists in the submodule:
If an existing PR was found: update it with gh pr edit:
gh pr edit <number> --repo <ToolJet/ee-server|ToolJet/ee-frontend> --title "<TITLE>" --body "$(cat <<'PREOF'
<SUBMODULE_BODY>
PREOF
)"If no existing PR: create the PR (branch already pushed in Step 1):
gh pr create --repo <ToolJet/ee-server|ToolJet/ee-frontend> --base <base> --head <branch> --title "<TITLE>" --body "$(cat <<'PREOF'
<SUBMODULE_BODY>
PREOF
)"Capture the submodule PR URL(s) from the output.
If a submodule has pointer changes but no branch in the submodule, skip the submodule PR and note it in the main PR body (replace the placeholder with "branch not found in submodule").
Fill in the main PR's Submodules block with the submodule PR URLs captured in Step 2. After the main PR exists, replace PENDING in each submodule PR's Main PR link with the main PR URL.
If an existing PR was found: update it:
gh pr edit <number> --repo ToolJet/ToolJet --title "<TITLE>" --body "$(cat <<'PREOF'
<MAIN_BODY>
PREOF
)"If no existing PR: create it:
gh pr create --repo ToolJet/ToolJet --base <base> --head <branch> --title "<TITLE>" --body "$(cat <<'PREOF'
<MAIN_BODY>
PREOF
)"Print the result in this exact format:
PR created: <main PR url>
Submodule PRs: <urls if any, or "none">cat <<'PREOF' ... PREOF) for PR bodies so markdown renders correctly.feature/, fix/, chore/), use that to inform the prefix choice./create-pr again to update.gh pr edit to update.--no-verify. If a hook fails, fix what it reports.commit — commit changes across repos before opening PRsmerge — 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/create-pr of ToolJet/ToolJet.
Open the folder on GitHubat commit 1786038
ToolJet Pull Request Creator 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 Pull Request Creator this skillToolJet/ToolJet | 41k | — | ~3.6k | Automated safety check: Pass | AGPL-3.0 | |
| Finishing a Development Branchobra/superpowers | 296k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Contributor-First PR MergeHKUDS/OpenHarness | 16k | 1 repos | ~847 | Automated safety check: Pass | MIT | |
| Create Pull Requestcline/cline | 70k | 1 repos | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| Git Branch Namingmakeplane/plane | 60k | — | ~594 | Automated safety check: Pass | AGPL-3.0 | |
| Creating Description For Gh PRredis/jedis | 12k | — | ~838 | Automated safety check: Pass | MIT |
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
HKUDS/OpenHarness
Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.
cline/cline
Opens a GitHub pull request from your current branch with the gh CLI, after reviewing the commits and diff and gathering the details the PR needs.
makeplane/plane
Names a new Git branch with a type prefix, the lowercased work item ID and a short kebab-case description, so the ID can be extracted later from the branch name.
redis/jedis
Generate a clear, concise GitHub PR title and description from the diff between two local git branches, and save it to prDescription.md in the repo root.
makeplane/plane
Opens a pull request for the current branch using the repo's template, a work item ID in the title and a description filled in from the actual diff.
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
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.
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
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. The skill opens a pull request for the current branch in the ToolJet repository, handling its enterprise submodules along the way. It pushes the root repo and submodules, creates or updates submodule PRs for ee-server and ee-frontend, and then creates the main PR with a generated description.
ToolJet Pull Request Creator fits situations like: creating a pull request for a ToolJet branch that also changes the ee submodules; updating an existing ToolJet PR after more commits; opening a backport PR against a release branch.
Run `npx skills add ToolJet/ToolJet --skill create-pr -a claude-code`. Or copy the skill folder (.agents/skills/create-pr in ToolJet/ToolJet) into .claude/skills/create-pr in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ToolJet/ToolJet --skill create-pr -a codex`. Or copy the skill folder (.agents/skills/create-pr in ToolJet/ToolJet) into .agents/skills/create-pr 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 create-pr -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/create-pr, .gemini/skills/create-pr, .github/skills/create-pr and .opencode/skills/create-pr in your project.
Going by SKILL.md and its folder, ToolJet Pull Request Creator needs the command-line tools its instructions call (git and gh). Our summary lists: The gh CLI authenticated against ToolJet and its submodule repos; A ToolJet checkout with the ee submodules.
SKILL.md contains no URLs. Its commands use git and gh, 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 Pull Request Creator 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 3.6k tokens (SKILL.md is roughly 14k 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 Pull Request Creator: Finishing a Development Branch (obra/superpowers, 296k stars), Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars), Create Pull Request (cline/cline, 70k stars) and Git Branch Naming (makeplane/plane, 60k 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.