From forge-skills
Guides building, deploying, troubleshooting, and installing Atlassian Forge apps — custom extensions built with the Forge CLI (forge create, forge deploy, forge install). Use when the user wants to create a Forge app (issue panels, dashboard gadgets, Confluence macros, global pages), is encountering Forge CLI errors or deployment issues (e.g. forge install failures, environment errors), or needs help with Forge-specific concepts like resolvers, UI Kit, manifest scopes, or developer spaces. Do not use for general Jira configuration, automation rules, JQL queries, or Atlassian REST API usage outside of a Forge app context.
npx claudepluginhub atlassian/forge-skills --plugin forge-skillsThis skill uses the workspace's default tool permissions.
**When building a Forge app, the agent MUST complete this workflow in order. Do not skip steps. Do not substitute manual instructions for running the scripts below.**
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
When building a Forge app, the agent MUST complete this workflow in order. Do not skip steps. Do not substitute manual instructions for running the scripts below.
forge create to scaffold apps — it registers the app and generates a valid app IDforge create fails, STOP — inform the user and provide the manual commandforge login in their terminal and enter credentials thereforge deploy / forge install commands as the primary outcome; run scripts.deploy_forge_app.py yourselfThis skill works best with the following MCP servers. The scripts and CLI workflow function without them, but the agent will lack access to up-to-date Forge documentation for template selection, module configuration, and code patterns.
| MCP Server | Required? | Purpose |
|---|---|---|
| Forge MCP | Strongly recommended | Template lookup, module discovery, manifest syntax, UI Kit/backend guides |
| ADS MCP | Optional | Atlaskit component/token/icon lookup (Custom UI apps only) |
If MCP servers are not connected, inform the user that code guidance may be based on the model's training data and could be outdated. Recommend they verify against developer.atlassian.com/platform/forge. |
Complete steps 0–5 in order. Run the scripts yourself; do not only instruct the user to run them.
Before any other steps, call the forge-development-guide tool to get the current Node.js version requirement and CLI setup instructions. Then check and install prerequisites:
node -v. If missing or below the version specified in the development guide:brew install nodenvm install <version> then nvm use <version>fnm install <version> then fnm use <version>forge --version. If missing: npm install -g @forge/cli
forge whoami. If not logged in:forge login in their own terminal (not via the agent). The CLI will prompt for:
forge login in your terminal. Enter your email and token when prompted — do not paste them here."Install in order: Node.js first (required for npm), then Forge CLI, then login. Retry the workflow after installing.
forge developer-spaces list --json
Do not proceed to Step 3 until the user has selected a developer space. Present the list from Step 1 (names and IDs) and ask which space to use. If only one space exists, you may use it and briefly inform the user. Never pick one of multiple spaces on the user's behalf.
All python3 -m scripts.* commands must be run from the skill directory (the directory containing this SKILL.md file). Derive it from the SKILL.md path provided in the system prompt. Use python3 on macOS if python is not available.
Run from the skill directory. The --directory flag sets the parent directory under which the app folder (named after --name) will be created. The script cds into that directory before running forge create, so the app appears as a subdirectory (e.g. <parent-directory>/<app-name>/). If omitted, the app is created under the current directory.
python3 -m scripts.create_forge_app \
--template <template> \
--name <app-name> \
--dev-space-id <selected-id> \
--directory <parent-directory>
To find the right template for the user's needs:
list-forge-modules to identify the appropriate module typesearch-forge-docs with a query like "template for " to find the matching template nameValidate a template: python3 -m scripts.list_templates --validate <name>
List all templates: python3 -m scripts.list_templates --list
After forge create succeeds:
cd <app-name>
npm install
Before writing any UI code, determine which approach the app uses. Getting this wrong causes import errors and broken builds.
forge create templates): manifest uses render: native or code imports from @forge/react. Use forge-ui-kit-developer-guide as the ONLY UI reference. Do NOT suggest @atlaskit/* imports — they won't work.resource pointing to a static/ directory. Use ADS MCP tools (ads_plan, ads_get_components, ads_get_all_icons) for component discovery. Do NOT use forge-ui-kit-developer-guide — it describes a different API.forge-ui-kit-developer-guide — Frontend components (UI Kit only)ads_plan / ads_get_components — Component and token lookup (Custom UI only)forge-backend-developer-guide — Backend resolvers and APIsforge-app-manifest-guide — Manifest configurationsearch-forge-docs — Search for specific APIs or propsYou MUST run the deploy script — do not only paste manual forge deploy / forge install commands for the user to run. Execute the script from the skill directory.
python3 -m scripts.deploy_forge_app \
--app-dir <app-directory> \
--site <site-url> \
--product <jira|confluence>
# 1) Deploy only
python3 -m scripts.deploy_forge_app \
--app-dir <app-directory> \
--product <jira|confluence> \
--deploy-only
# 2) Ask the user: "What is your Atlassian site URL (e.g. yourcompany.atlassian.net)?"
# 3) After they reply, run again with their site to complete install
python3 -m scripts.deploy_forge_app \
--app-dir <app-directory> \
--site <site-url> \
--product <jira|confluence> \
--skip-deps
Always ask the user for their site URL when needed for install; never try to discover it. If scopes changed from a previous install, add --upgrade to the install (or run the script again with --site and the script will handle it; for manual upgrade use forge install ... --upgrade).
When an app uses scopes from multiple products (e.g. a Confluence macro that also reads Jira data), the deploy script automatically detects the required products from the manifest scopes and installs on all of them. The --product flag sets the primary product; the script adds any additional products found in the scopes.
If you need to install manually, run forge install once per product:
forge install --non-interactive --site <site-url> --product confluence -e development
forge install --non-interactive --site <site-url> --product jira -e development
forge create FailuresWhen forge create fails, never attempt workarounds or manual scaffolding.
| Error | Action |
|---|---|
| Prerequisites missing (Node.js, Forge CLI) | Run Step 0 install commands, then retry |
| "Prompts can not be meaningfully rendered" | Ask user to run forge create in an interactive terminal |
| "No developer spaces found" | Direct user to https://developer.atlassian.com/console/ |
| "directory already exists" | A folder named <app-name> already exists inside the parent directory. Choose a different name or remove the existing folder |
| Network/auth issues, not logged in | Direct user to https://id.atlassian.com/manage/api-tokens, then run forge login in their terminal |
| Any other error | Show error, ask user for guidance |
Example response when it fails:
forge create needs an interactive terminal. Please run:
forge create --template jira-dashboard-gadget my-app-name
Once created, let me know and I'll help customize it.
Call list-forge-modules for a comprehensive, up-to-date list of all available modules organized by product. Then use search-forge-docs with the module name for configuration details and YAML examples.
| Script | Purpose |
|---|---|
scripts/create_forge_app.py | Create app with dev space selection and template validation. --directory sets the parent dir (script cd's into it). Run: python3 -m scripts.create_forge_app |
scripts/list_templates.py | List/validate all Forge templates from Atlassian registry. Run: python3 -m scripts.list_templates |
scripts/deploy_forge_app.py | Deploy and install app (prerequisites check, npm install, lint, deploy, install). Auto-detects cross-product scopes and installs on all required products. Run: python3 -m scripts.deploy_forge_app |
Before considering the workflow done, confirm:
create_forge_app (or user ran forge create after a failure)npm install run in the app directory--site (or user provided site and install completed)forge deploy and forge install" instructions instead of running deploy_forge_app.py yourself.For CLI commands, debugging techniques, and common error patterns, call forge-development-guide. For quick checks:
forge login in your terminal (never paste token in chat)forge logs -e development --limit 50, verify manifest with forge lint, re-install with --upgrade if scopes changednpm install -g @forge/cli