Loading...
Loading...
Search, install, and share boilerplates for AI coding tools.
Manage configurations for Claude Code, Codex, and Gemini CLI through GitHub repositories.
Requires Node.js 18 or later.
npx updose <command>
# Search for boilerplates in the marketplace
npx updose search react
# Install a boilerplate from a GitHub repository
npx updose add owner/repo-name
# Install from a subdirectory within a monorepo
npx updose add owner/repo-name/nextjs
updose add <repo>Install a boilerplate from a GitHub repository into your project.
The <repo> argument accepts two formats:
owner/repo — installs from the repository root (standard boilerplate)owner/repo/dir — installs from a subdirectory within the repository (monorepo boilerplate). The dir can be nested (e.g., owner/repo/templates/v2).npx updose add owner/repo-name # Install from repository root
npx updose add owner/repo-name/nextjs # Install from "nextjs" subdirectory
npx updose add owner/repo-name/templates/v2 # Install from nested subdirectory
npx updose add owner/repo-name -y # Skip all prompts
npx updose add owner/repo-name/nextjs --dry-run # Preview monorepo install
What happens when you run add:
<repo> argument to determine the repository (owner/repo) and optional subdirectoryupdose.json manifest from the repository root or the specified subdirectory-y, all targets are installed automatically.CLAUDE.md, AGENTS.md, GEMINI.md): Append / Overwrite / Skipskills.json file exists in the boilerplate (or its subdirectory), installs each declared skill via skills.sh. Skills are installed for the selected targets (-a), copied into the project (--copy), and auto-confirmed (-y)| Option | Description |
|---|---|
-y, --yes | Skip all interactive prompts. Installs all targets, appends to main docs, and overwrites other files. |
--dry-run | Lists all files and skills that would be installed, without actually writing anything. |
Example — after installing a Claude boilerplate:
my-project/
├── CLAUDE.md ← main instructions (project root)
├── .claude/
│ ├── rules/
│ │ ├── code-style.md
│ │ └── testing.md
│ ├── commands/
│ │ ├── review.md
│ │ └── test.md
│ ├── agents/
│ │ └── reviewer.md
│ └── skills/
│ └── react-guide/
│ └── SKILL.md
See the full example in examples/after-install-claude/.
Also available: examples/after-install-codex/ and examples/after-install-gemini/.
updose search [query]Search the marketplace for boilerplates. The query is optional — you can search by keyword, filter by options, or combine both.
# Search by keyword
npx updose search react
npx updose search "web framework"
# Filter by target, tag, or author
npx updose search --target claude # Only show boilerplates that support Claude
npx updose search --tag typescript # Filter by tag
npx updose search --author james # Filter by author
# Combine keyword with filters
npx updose search react --target claude # React boilerplates for Claude
npx updose search react --author james # React boilerplates by james
npx updose search react --target gemini --tag web # React + Gemini + web tag
# Filter-only search (no keyword)
npx updose search --author james # All boilerplates by james
npx updose search --author james --target claude # james's Claude boilerplates
npx updose search --tag typescript --target codex # TypeScript boilerplates for Codex
Running npx updose search with no arguments returns popular boilerplates.
Results display the boilerplate name, version, author, description, download count, supported targets, and tags.
| Option | Description |
|---|---|
--target <target> | Filter results by target: claude, codex, or gemini. |
--tag <tag> | Filter results by tag (e.g., react, typescript, web). |
--author <author> | Filter results by author (e.g., example-user). |
updose initScaffold a new boilerplate repository with the correct directory structure.
mkdir my-boilerplate && cd my-boilerplate
npx updose init
To scaffold inside a subdirectory (for monorepo setups), use the --dir option:
npx updose init --dir nextjs # Creates boilerplate in the "nextjs" subdirectory
npx updose init --dir templates/v2 # Nested subdirectory is also supported
| Option | Description |
|---|---|
--dir <dir> | Create the boilerplate inside the specified subdirectory instead of the repository root. The directory is created if it doesn't exist. |
What happens when you run init:
updose.json, skills.json, README.md, and target directoriesWhen --dir is used, all generated files are placed inside the specified subdirectory instead of the repository root.
Interactive prompts:
| Prompt | Description | Default |
|---|---|---|
| Name | Boilerplate name | Without --dir: current directory name (e.g., my-boilerplate). With --dir: <repo>/<dir> (e.g., my-boilerplate/nextjs) |
| Description | Short description (optional) | — |
| Author | GitHub username | Auto-detected from git config github.user or gh api user. If neither is available, you enter it manually. |
| Targets | Which AI tools to support (multiselect) | All selected (claude, codex, gemini) |
Generated files:
Every scaffold includes these common files:
| File | Description |
|---|---|
updose.json | Manifest with name, author, version, and targets |
skills.json | Empty skills array (see skills.json Reference for how to add skills) |
README.md | Project description, target list, and installation instructions |
Plus target-specific directories based on your selection:
| Target | Generated Files |
|---|---|
| Claude | claude/CLAUDE.md, claude/rules/, claude/agents/, claude/skills/ |
| Codex | codex/AGENTS.md |
| Gemini | gemini/GEMINI.md, gemini/skills/ |
Example — scaffolding with all targets selected (no --dir):
my-boilerplate/
├── updose.json
├── skills.json
├── README.md
├── claude/
│ ├── CLAUDE.md
│ ├── rules/
│ ├── agents/
│ └── skills/
├── codex/
│ └── AGENTS.md
└── gemini/
├── GEMINI.md
└── skills/
Example — scaffolding with --dir nextjs:
my-monorepo/
├── nextjs/ ← created by --dir
│ ├── updose.json
│ ├── skills.json
│ ├── README.md
│ ├── claude/
│ │ ├── CLAUDE.md
│ │ ├── rules/
│ │ ├── agents/
│ │ └── skills/
│ ├── codex/
│ │ └── AGENTS.md
│ └── gemini/
│ ├── GEMINI.md
│ └── skills/
├── remix/ ← another boilerplate in the same repo
│ └── ...
└── README.md ← repo-level README (not managed by updose)
After scaffolding, follow the next steps printed by the command:
npx updose publish (or npx updose publish --dir nextjs for monorepo)npx updose add <author>/<name> (or npx updose add <author>/<repo>/nextjs for monorepo)updose publishPublish your boilerplate to the marketplace so others can find and install it.
npx updose publish # Publish from repository root
npx updose publish --dir nextjs # Publish from a subdirectory (monorepo)
| Option | Description |
|---|---|
--dir <dir> | Read updose.json from the specified subdirectory instead of the repository root. Use this when publishing a monorepo boilerplate. |
What happens when you run publish:
updose.json from the current directory (or the subdirectory specified by --dir). If the file is missing, shows an error and suggests running updose init first.git remote get-url origin. Supports both HTTPS (https://github.com/owner/repo.git) and SSH (git@github.com:owner/repo.git) formats.author and name in updose.json match the expected name:
--dir: name must match the repository name (e.g., react-starter)--dir: name must match <repo>/<dir> (e.g., my-monorepo/nextjs)login flow (see below)Publishing:
Name: react-starter
Version: 1.0.0
Repository: example-user/react-starter
Targets: claude, gemini
Tags: react, typescript, web
When --dir is used, the summary also includes a Directory field:
Publishing:
Name: my-monorepo/nextjs
Version: 1.0.0
Repository: example-user/my-monorepo
Directory: nextjs
Targets: claude
Tags: react, nextjs
--dir: Users can now install with: npx updose add owner/repo--dir: Users can now install with: npx updose add owner/repo/dirPrerequisites:
updose.json in the current directory or specified subdirectory (run updose init to create one)origin) configured and pushed to GitHubupdose loginAuthenticate with GitHub using the Device Flow.
npx updose login
What happens when you run login:
~/.updose/auth.jsonTo authenticate with GitHub:
1. Open https://github.com/login/device
2. Enter code: ABCD-1234
~/.updose/auth.json (file permissions: owner read/write only)Stored credentials (~/.updose/auth.json):
{
"github_token": "gho_xxxxxxxxxxxx",
"github_username": "your-username"
}
The token is requested with public_repo scope, which grants read/write access to public repositories only.
updose logoutRemove stored GitHub credentials.
npx updose logout
What happens when you run logout:
~/.updose/auth.json~/.updose/auth.json and displays "Logged out from {username}."updose supports three AI coding tool targets:
| Target | Main Doc | Config Directory | Skills Directory |
|---|---|---|---|
| Claude (Claude Code) | CLAUDE.md | .claude/ | .claude/skills/ |
| Codex (OpenAI Codex) | AGENTS.md | Project root | .agents/skills/ |
| Gemini (Gemini CLI) | GEMINI.md | .gemini/ | .gemini/skills/ |
When you run updose add, files from the boilerplate's target directory are mapped to your project:
| Target | Source (in boilerplate repo) | Installed to (in your project) |
|---|---|---|
| Claude | claude/CLAUDE.md | CLAUDE.md (project root) |
| Claude | claude/rules/code-style.md | .claude/rules/code-style.md |
| Claude | claude/skills/react-guide/SKILL.md | .claude/skills/react-guide/SKILL.md |
| Codex | codex/AGENTS.md | AGENTS.md (project root) |
| Codex | codex/.agents/skills/... | .agents/skills/... |
| Gemini | gemini/GEMINI.md | GEMINI.md (project root) |
| Gemini | gemini/commands/review.toml | .gemini/commands/review.toml |
Main docs (CLAUDE.md, AGENTS.md, GEMINI.md) are always placed at the project root. All other files go into the target's config directory.
When a file already exists in your project, updose asks how to handle it:
| File Type | Interactive Mode | With --yes |
|---|---|---|
Main docs (CLAUDE.md, etc.) | Append / Overwrite / Skip | Append |
| Other files | Overwrite / Skip | Overwrite |
---A boilerplate repository contains a updose.json manifest, an optional skills.json, and one directory per supported target.
my-boilerplate/
├── updose.json ← required manifest
├── skills.json ← optional skill dependencies
├── README.md
├── claude/ ← Claude target files
│ ├── CLAUDE.md
│ ├── rules/
│ │ ├── code-style.md
│ │ └── testing.md
│ ├── commands/
│ │ ├── review.md
│ │ └── test.md
│ ├── agents/
│ │ └── reviewer.md
│ └── skills/
│ └── react-guide/
│ └── SKILL.md
├── codex/ ← Codex target files
│ ├── AGENTS.md
│ └── .agents/
│ └── skills/
│ └── react-guide/
│ └── SKILL.md
└── gemini/ ← Gemini target files
├── GEMINI.md
├── commands/
│ ├── review.toml
│ └── test.toml
└── skills/
└── react-guide/
└── SKILL.md
See complete examples in:
examples/boilerplate-claude/ — single-target (Claude)examples/boilerplate-codex/ — single-target (Codex)examples/boilerplate-gemini/ — single-target (Gemini)examples/boilerplate-multi-target/ — multi-target (all three)updose.json ReferenceThe manifest file that describes your boilerplate.
{
"name": "react-starter",
"author": "example-user",
"version": "1.0.0",
"description": "React + TypeScript boilerplate for AI coding tools",
"targets": ["claude", "gemini"],
"tags": ["react", "typescript", "web"]
}
| Field | Required | Description |
|---|---|---|
name | Yes | The boilerplate name. Must match the GitHub repository name (e.g., react-starter). For monorepo boilerplates, must be <repo>/<dir> (e.g., my-starters/nextjs). |
author | Yes | Author name. Must match the GitHub repository owner. |
version | Yes | Version string following semver (e.g., 1.0.0). |
targets | Yes | Array of supported targets: "claude", "codex", and/or "gemini". |
description | No | A short description shown in search results. |
tags | No | Array of tags for search discovery (e.g., ["react", "typescript"]). |
skills.json ReferenceAn optional file that declares external skill dependencies. When a user installs your boilerplate, these skills are automatically installed via skills.sh.
Each entry in the skills array is a command string (e.g., npx skills add <repo> --skill <name>). During installation, updose automatically appends the following flags:
-a <agents> — installs for the selected targets (e.g., -a claude-code codex gemini-cli)--copy — copies skill files into the project instead of symlinking-y — skips confirmation prompts{
"skills": [
"npx skills add https://github.com/intellectronica/agent-skills --skill context7",
"npx skills add https://github.com/microsoft/playwright-cli --skill playwright-cli"
]
}
For example, if a user selects Claude and Gemini as targets, the first command above becomes:
npx skills add https://github.com/intellectronica/agent-skills --skill context7 -a claude-code gemini-cli --copy -y
| Field | Description |
|---|---|
skills | Array of command strings. Do not include -a, --copy, or -y flags — they are added automatically. |
Skills are installed into the target's skills directory (e.g., .claude/skills/, .gemini/skills/).
From examples/boilerplate-claude/:
updose.json
{
"name": "react-starter",
"author": "example-user",
"version": "1.0.0",
"description": "React + TypeScript boilerplate for Claude Code",
"targets": ["claude"],
"tags": ["react", "typescript", "web"]
}
Directory structure:
boilerplate-claude/
├── updose.json
├── skills.json
└── claude/
├── CLAUDE.md ← main instructions (stack, conventions, etc.)
├── rules/
│ ├── code-style.md ← coding style rules
│ └── testing.md ← testing conventions
├── commands/
│ ├── review.md ← /review slash command
│ └── test.md ← /test slash command
├── agents/
│ └── reviewer.md ← automated reviewer agent
└── skills/
└── react-guide/
└── SKILL.md ← React best practices skill
When a user runs npx updose add example-user/react-starter, the result looks like examples/after-install-claude/.
From examples/boilerplate-multi-target/:
A boilerplate can support multiple targets at once. Each target has its own directory with target-specific configurations.
updose.json
{
"name": "multi-target-starter",
"author": "example-user",
"version": "1.0.0",
"description": "Starter boilerplate for Claude, Codex, and Gemini",
"targets": ["claude", "codex", "gemini"],
"tags": ["starter", "multi-target"]
}
Directory structure:
boilerplate-multi-target/
├── updose.json
├── skills.json
├── claude/
│ └── CLAUDE.md
├── codex/
│ └── AGENTS.md
└── gemini/
└── GEMINI.md
When a user installs a multi-target boilerplate, they are prompted to choose which targets to install. With -y, all targets are installed automatically.
A single GitHub repository can contain multiple boilerplates, each in its own subdirectory. This is useful when you want to publish several related boilerplates (e.g., framework-specific starters) from one repo.
How it works:
updose.json, skills.json, and target directoriesname field in updose.json must be <repo>/<dir> (e.g., my-starters/nextjs)npx updose add owner/repo/dir instead of npx updose add owner/repoMonorepo directory structure:
my-starters/ ← GitHub repository root
├── README.md ← repo-level README (not managed by updose)
├── nextjs/ ← boilerplate for Next.js
│ ├── updose.json ← name: "my-starters/nextjs"
│ ├── skills.json
│ ├── claude/
│ │ ├── CLAUDE.md
│ │ └── rules/
│ │ └── nextjs-conventions.md
│ └── gemini/
│ └── GEMINI.md
├── remix/ ← boilerplate for Remix
│ ├── updose.json ← name: "my-starters/remix"
│ ├── skills.json
│ └── claude/
│ ├── CLAUDE.md
│ └── rules/
│ └── remix-conventions.md
└── sveltekit/ ← boilerplate for SvelteKit
├── updose.json ← name: "my-starters/sveltekit"
├── skills.json
└── claude/
└── CLAUDE.md
updose.json for a monorepo boilerplate (nextjs/updose.json):
{
"name": "my-starters/nextjs",
"author": "example-user",
"version": "1.0.0",
"description": "Next.js boilerplate for Claude and Gemini",
"targets": ["claude", "gemini"],
"tags": ["nextjs", "react", "web"]
}
Note: The
namefield uses the format<repo>/<dir>(e.g.,my-starters/nextjs), not just the directory name.
Workflow for creating a monorepo boilerplate:
# 1. Scaffold each boilerplate in its own subdirectory
npx updose init --dir nextjs
npx updose init --dir remix
npx updose init --dir sveltekit
# 2. Edit each boilerplate's files
# (edit nextjs/claude/CLAUDE.md, remix/claude/CLAUDE.md, etc.)
# 3. Push to GitHub
git add . && git commit -m "Add boilerplates" && git push
# 4. Publish each boilerplate separately
npx updose publish --dir nextjs
npx updose publish --dir remix
npx updose publish --dir sveltekit
Users install each boilerplate independently:
npx updose add example-user/my-starters/nextjs
npx updose add example-user/my-starters/remix
To share your boilerplate with others through the marketplace:
npx updose init (or npx updose init --dir <dir> for monorepo)npx updose publish (or npx updose publish --dir <dir> for monorepo)After publishing, anyone can install your boilerplate:
# Standard boilerplate
npx updose add your-username/my-boilerplate
# Monorepo boilerplate
npx updose add your-username/my-monorepo/nextjs
updose uses GitHub OAuth solely to identify authors when publishing boilerplates.
What we collect:
What we store locally:
~/.updose/auth.json (never sent to updose servers)What we don't do:
Third-party services: Supabase (database), Vercel (hosting)
To request data deletion, contact email.
MIT