agentsclimarketplace

Repo scaffold

Skill motiful/repo-scaffold

Project workspace scaffolding for AI-driven development. Pick an archetype (public split-repo or private monorepo), get the right structure with AI configuration, backstage separation, and skill organization built in.

Install
npx -y skills add motiful/repo-scaffold

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Scaffold a new project workspace. Supports two archetypes: public open-source (split repos with independent skill distribution) and private monorepo (unified codebase with optional doc separation). Use when the user says "scaffold a project", "set up a workspace", or "create a new repo". Also called by skill-forge when creating a complex new skill that needs a full workspace with backstage.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

9.9 KB, as published. Nobody here has run it

repo-scaffold

Scaffold a new project with appropriate repo structure and AI configuration.

When to Use

User wants to create a new project, scaffold a repo, or set up a workspace. Also invoked by skill-forge when scaffolding a new standalone skill that needs a backstage for design docs and iteration plans. In that case, skill-forge passes "git init but skip push" — the push is handled by skill-forge's own Step 4.

Execution Procedure

scaffold(project_name) → workspace_ready

Step 0: Ask archetype
  IF user specifies public/open-source → Archetype A
  IF user specifies private/internal/monorepo → Archetype B
  IF unclear → ask user

Step 1: Create structure
  IF Archetype A → create_split_repos(project_name)
  IF Archetype B → create_monorepo(project_name)

Step 2: Generate AI config files
  → CLAUDE.md (constitutional, public)
  → CLAUDE.local.md (bridge, gitignored)
  → .claude/progress.md (execution state, gitignored)
  → .gitignore

Step 3: Initialize git repos
  IF Archetype A → git init per subfolder, push to separate remotes
  IF Archetype B → git init single repo, push

GATE: all files exist, git repos initialized, .gitignore correct

Archetype A: Public Open-Source (Split Repos)

For projects published as public repos, especially those with skills or components needing independent distribution.

<project>-project/                  # Parent folder (NOT a git repo)
├── .gitignore                      # Contains `*` — prevents accidental git init
├── <project>/                      # Public code repo → GitHub public
│   ├── src/
│   ├── CLAUDE.md                   # Public, constitutional
│   ├── CLAUDE.local.md             # Gitignored, points to backstage
│   ├── .claude/
│   │   └── progress.md             # Gitignored execution state
│   ├── .gitignore
│   ├── README.md
│   └── LICENSE
├── <project>-backstage/            # Private repo → GitHub private
│   ├── design/                     # Design truth
│   ├── plan/                       # Execution plans
│   └── research/                   # Technical references
└── <project>-<skill-name>/         # Standalone skill repo (if needed)
    ├── SKILL.md
    ├── references/
    └── README.md

Key Points

  • Parent folder is NOT a git repo — just filesystem namespace
  • Each subfolder is an independent git repo with its own remote
  • Backstage uses full name <project>-backstage/ (matches GitHub repo name exactly)
  • Skills needing independent distribution get their own repos under the parent
  • In-repo skills (.claude/skills/) stay in the main code repo

Naming Convention

ItemLocal pathGitHub name
Parent folder<project>-project/— (not a repo)
Public code<project>-project/<project>/org/<project>
Private backstage<project>-project/<project>-backstage/org/<project>-backstage
Standalone skill<project>-project/<project>-<skill>/org/<project>-<skill>

Why full name everywhere: Local folder name = GitHub repo name. No mental translation needed. No name collisions when cloning multiple projects into the same parent.

Setup

# 1. Parent folder
mkdir -p <project>-project && cd <project>-project
echo '*' > .gitignore

# 2. Public repo
mkdir <project> && cd <project> && git init
# Create: CLAUDE.md, CLAUDE.local.md, .claude/progress.md, .gitignore, README.md, LICENSE

# 3. Backstage
cd .. && mkdir <project>-backstage && cd <project>-backstage && git init

# 4. Push
cd ../<project>
gh repo create ORG/<project> --public --source=. --push
cd ../<project>-backstage
gh repo create ORG/<project>-backstage --private --source=. --push

Archetype B: Private Monorepo

For internal projects, SaaS products, or teams preferring a unified codebase.

<project>/                          # Single monorepo (private)
├── src/                            # Application code
├── packages/                       # Internal packages (if monorepo tooling)
├── CLAUDE.md                       # Project identity
├── CLAUDE.local.md                 # Gitignored, local dev context
├── .claude/
│   ├── progress.md                 # Gitignored execution state
│   └── skills/                     # In-repo skills (project-specific)
│       └── maintenance-rules/
├── docs/                           # Internal docs (in-repo, since private)
│   ├── design/
│   ├── plan/
│   └── research/
├── .gitignore
└── README.md

Key Points

  • Single git repo — code, docs, and in-repo skills together
  • No backstage needed — the whole repo is private
  • Docs live in docs/ directly (or split to <project>-backstage/ if team prefers)
  • CLAUDE.local.md still gitignored — contains machine-specific paths and local state

When to Split Docs Out

Even for private projects, separate backstage makes sense when:

  • Multiple repos share the same design docs
  • Non-engineering stakeholders need doc access without code access
  • Docs have a different review/approval workflow

If splitting: create <project>-backstage/ as a sibling repo.

Skill Organization (Private Projects)

Skill typeLocationWhen to use
In-repo capability.claude/skills/<name>/Project-specific workflows, commands, helpers
In-repo rule-skill (paired).claude/skills/<name>-rules/Constraints that augment an in-repo capability skill
In-repo rule-skill (maintenance).claude/skills/<name>-rules/Repo maintenance constraints (e.g., skills-cli-rules) — stand-alone, no capability pair
Product skillskills/<name>/SKILL.mdSkills distributed with the product to end users
Product collectionskills/*/SKILL.md (multi)Multiple skills always consumed together
Protocol skill (rare)Standalone repo with scripts/install-*.shSkills that activate by modifying the host environment (e.g., global meta-rule injection)
Personal toolGraduate to standalone repoCross-project utility worth sharing

Notes on rule-skill sub-types:

  • Any skill with the -rules suffix is treated as MUST-level hard constraint if the user has installed rules-as-skills and activated its meta-rule protocol. Don't use the suffix for non-constraint content.
  • Maintenance rule-skills (no capability pair) are legitimate when they enforce something about the repo itself rather than a capability — e.g., how to run a CLI safely, how to update a cache. See skills-cli-rules in this repo for an example pattern.

In-repo skills use relative symlinks for cross-vendor: .agents/skills/X → ../../.claude/skills/X

Product skills at repo root follow collection layout when multiple: skills/<a>/SKILL.md, skills/<b>/SKILL.md.

For detailed taxonomy, collection sub-types (Augmented vs Peer), Protocol Skill classification, and publishing guidance, see skill-forge. For rule-skill authoring discipline (three-layer model, decision tree, paths field), see rules-as-skills.

File Roles

CLAUDE.md — public, in git

Constitutional: stable, rarely-changing content.

  • Project identity, tech stack, design principles, code conventions
  • No internal paths, no backstage references, no progress tracking

CLAUDE.local.md — private, gitignored

CC reads automatically alongside CLAUDE.md. Must live at project root.

Template (Archetype A):

# Local Development Context

## Internal Docs
Design documents and plans live in a sibling private repo:
`../<project>-backstage/`

## Execution State
Read `.claude/progress.md` for current phase and next steps.

## Git Workflow
Two repos, two commit flows:
- Code changes → commit here
- Doc changes → commit in `../<project>-backstage/`

Template (Archetype B):

# Local Development Context

## Execution State
Read `.claude/progress.md` for current phase and next steps.

## Internal Docs
Design docs in `docs/design/`, plans in `docs/plan/`.

.claude/progress.md — private, gitignored

Dynamic execution state: current phase, completed items, next steps. Referenced by CLAUDE.local.md, never by CLAUDE.md.

.gitignore must include

.claude/*
!.claude/skills/
.agents/*
!.agents/skills/
CLAUDE.local.md
node_modules/
dist/
*.tsbuildinfo
.DS_Store
.env
coverage/

Why the .claude/* + !.claude/skills/ exception: In-repo skills (including rule-skills) live at .claude/skills/<name>/ and MUST be version-controlled for distribution via clone/fork. A naive .claude/ ignore rule silently swallows them. Same logic for .agents/skills/ (Codex/Windsurf symlink target). See rules-as-skills §In-Repo Rule-Skills for the full convention.

Platform Support

PlatformProject instructionsLocal bridgeProgress
Claude CodeCLAUDE.mdCLAUDE.local.md.claude/progress.md
Cursor.cursor/rules/*.mdc.cursor/rules/personal.mdc.cursor/progress.md
CodexAGENTS.mdAGENTS.override.mdtracked in AGENTS.md
OpenClawAGENTS.mdvia openclaw.jsontracked in AGENTS.md

Daily Workflow

Run CC in the code repo root. CC reads CLAUDE.md + CLAUDE.local.md automatically — full backstage context without special prompts.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.