Onboard Project Skill
Purpose
Entry point for the portable AI resources pool. When copied to a new project, this skill bootstraps the project-specific configuration that agents need to function correctly.
What it produces:
copilot-instructions.md — project-specific context for the AI assistant
project-config.md — populated with project values (profile + placeholders)
agent-docs/ARTIFACTS.md — artifact manifest (if missing)
When to Use
- Setting up AI resources on a new project for the first time
- After copying the
.github/ (or .cursor/) portable pool to a new repo
- When
project-config.md has a blank profile and empty placeholder values
- To add missing sections to an existing
copilot-instructions.md
Behavior: Idempotent & Non-Destructive
CRITICAL: This skill NEVER overwrites or degrades existing content.
| Scenario |
Behavior |
copilot-instructions.md does not exist |
Create from template, populate from user Q&A |
copilot-instructions.md exists |
Read it, compare sections vs. template, append ONLY missing sections with <!-- Added by onboard-project --> marker |
project-config.md has blank profile |
Ask user for values, populate |
project-config.md has profile set |
Skip — already configured |
agent-docs/ARTIFACTS.md missing |
Create from template |
agent-docs/ARTIFACTS.md exists |
Skip — already configured |
Conflict resolution: If existing content contradicts template defaults, keep the user's version. It's more battle-tested.
Steps
Step 1: Check Current State
Read the following files (if they exist):
project-config.md — check if profile is set, if placeholders are filled
copilot-instructions.md — check which sections already exist
agent-docs/ARTIFACTS.md — check if manifest exists
Report what exists and what's missing before proceeding.
Step 2: Gather Project Information
Ask the user for information needed to populate the configuration. Skip questions where answers can be inferred from existing files.
Required information:
| Category |
Questions |
| Identity |
Project name? Organization name? One-line description? |
| Tech Stack |
Language(s)? Frontend framework? Backend framework? Database type? |
| Branding |
Primary brand color (hex)? Dark color? Light color? Additional brand colors? |
| Infrastructure |
Deployment environment (cloud/on-premise/hybrid)? Air-gapped? Authentication method? |
| Logging |
Logging library? (loguru, logging, structlog, etc.) |
| Shared Libraries |
Any shared/internal libraries? Paths? |
| Project Structure |
Entry point file? Source root? Key directories? |
| Data Sources |
Database name(s)? Connection method? Key tables? |
| Key Conventions |
Query externalization? Path resolution patterns? CSS scoping method? Component reuse patterns? |
| Commands |
How to run the app? Run tests? Lint? Build? |
| Recipe |
Delivery workflow pattern? (enterprise-dashboard for data-to-UI dashboards, or blank for generic projects) |
Step 3: Populate project-config.md
- Set the
profile field (use org name slug, e.g., acme, myorg, or leave blank if no profile needed)
- If using a profile, create a Profile Definition section with:
- Core Placeholders table (
<ORG_NAME>, <BRAND_PRIMARY>, <BRAND_DARK>, <BRAND_LIGHT>, <DB_TYPE>, <DEPLOY_ENV>, <LOGGING_LIB>, <SHARED_LIBS>)
- Brand Color Palette table (if provided)
- Tech Stack table
- Data Sources table
- Project Structure block
- Key Conventions list
- If not using a profile, fill in the "Step 2: Project Values" table directly
- If user specified a recipe:
- Verify
.github/recipes/{recipe}.recipe.md exists in the pool
- Set the
recipe field in the Step 1 table: | **recipe** | {recipe} |
- If recipe file is missing, warn but continue — recipe is optional
Step 4: Create or Update copilot-instructions.md
Template sections (check each — add only what's missing):
# {Project Name} — AI Assistant Context
## Project Overview
{One paragraph: what the project does, who it's for, key goals}
## Architecture
{High-level architecture: components, data flow, key patterns}
## Tech Stack
{Table: Layer → Technology}
## Data Sources
{Table: Source → Table/Collection → Description}
## Key Patterns & Conventions
{Bullet list of project-specific patterns the AI must follow}
## Database Access
{Connection method, query patterns, ORM/raw SQL, caching}
## Project Structure
{Directory tree of key folders}
## Deployment
{How the app is deployed, environment specifics}
## Key Commands
{Run, test, lint, build commands}
Merge logic for existing files:
- Parse existing
copilot-instructions.md into sections (by ## headings)
- If the file contains
<!-- junai:start --> … <!-- junai:end --> sentinel markers, leave that block untouched — it is managed by the junai extension
- For each template section, check if an equivalent heading exists outside the managed block (fuzzy match — "Tech Stack" matches "Technology Stack", "Stack", etc.)
- If section exists → skip it (preserve user's content entirely)
- If section is missing → append it before the managed section (or at the end if no managed section) with marker:
<!-- Added by onboard-project — review and customize -->
## {Section Title}
{Template content populated with project values}
- Never reorder, rewrite, or delete existing sections
Step 5: Create agent-docs/ARTIFACTS.md (if missing)
If agent-docs/ARTIFACTS.md does not exist, create it using the standard template:
# Agent Artifacts
> **For agents**: Only read artifacts with status `current`. Ignore `superseded` and `archived`.
> **For humans**: This is a working directory for inter-agent communication. Do not include in project documentation.
## How to Read This Manifest
- **chain_id**: Links all artifacts in a feature chain (format: `FEAT-YYYY-MMDD-{slug}`)
- **status**: `current` (active) | `superseded` (replaced) | `archived` (historical) | `completed` (done)
- **approval**: `pending` (awaiting review) | `approved` (proceed) | `revision-requested` (needs changes)
## Artifacts
| Date | Agent | Type | Description | Path | Status | Approval | Chain ID |
|------|-------|------|-------------|------|--------|----------|----------|
| | | | | | | | |
Also create the subfolder structure if missing:
agent-docs/intents/
agent-docs/escalations/
agent-docs/prd/
agent-docs/architecture/
agent-docs/ux/mockups/
agent-docs/ux/reviews/
agent-docs/security/
agent-docs/reviews/
agent-docs/debug/
agent-docs/testing/
agent-docs/.archive/
Step 6: Summary
Report what was done:
- Files created vs. updated
- Sections added to existing
copilot-instructions.md (if any)
- Profile set in
project-config.md
- Next steps (e.g., "Review the added sections and customize them")
Important Notes
- All paths in this skill are relative. The skill works regardless of whether the AI resources folder is at
.github/, .cursor/, or any other location.
- The
copilot-instructions.md file is project-specific and should NOT be committed to the portable pool. It stays in the project repo. The junai extension manages only a sentinel-delimited <!-- junai:start --> … <!-- junai:end --> section — never edit content inside those markers (it will be refreshed on the next Update). Add your project content outside the markers.
project-config.md IS part of the portable pool as a template. When the profile section is filled in, it becomes project-specific.
- The
recipe field in project-config.md is optional. Projects without a recipe work exactly as before — agents use their built-in expertise and plan-embedded skills. Recipes add automatic cross-project baseline loading for repeatable delivery patterns.
Source: saajunaid/ptarmigan — distributed by TomeVault.
1---2name: onboard-project3description: Bootstrap a new project's AI configuration by generating copilot-instructions.md and populating project-config.md. Idempotent — safe to re-run on existing projects. Use when this capability is needed.4---56# Onboard Project Skill78## Purpose910Entry point for the portable AI resources pool. When copied to a new project, this skill bootstraps the project-specific configuration that agents need to function correctly.1112**What it produces:**131. `copilot-instructions.md` — project-specific context for the AI assistant142. `project-config.md` — populated with project values (profile + placeholders)153. `agent-docs/ARTIFACTS.md` — artifact manifest (if missing)1617---1819## When to Use2021- Setting up AI resources on a **new project** for the first time22- After copying the `.github/` (or `.cursor/`) portable pool to a new repo23- When `project-config.md` has a blank profile and empty placeholder values24- To add missing sections to an existing `copilot-instructions.md`2526---2728## Behavior: Idempotent & Non-Destructive2930> **CRITICAL**: This skill NEVER overwrites or degrades existing content.3132| Scenario | Behavior |33|----------|----------|34| `copilot-instructions.md` does not exist | Create from template, populate from user Q&A |35| `copilot-instructions.md` exists | Read it, compare sections vs. template, append ONLY missing sections with `<!-- Added by onboard-project -->` marker |36| `project-config.md` has blank profile | Ask user for values, populate |37| `project-config.md` has profile set | Skip — already configured |38| `agent-docs/ARTIFACTS.md` missing | Create from template |39| `agent-docs/ARTIFACTS.md` exists | Skip — already configured |4041**Conflict resolution**: If existing content contradicts template defaults, **keep the user's version**. It's more battle-tested.4243---4445## Steps4647### Step 1: Check Current State4849Read the following files (if they exist):501. `project-config.md` — check if profile is set, if placeholders are filled512. `copilot-instructions.md` — check which sections already exist523. `agent-docs/ARTIFACTS.md` — check if manifest exists5354Report what exists and what's missing before proceeding.5556### Step 2: Gather Project Information5758Ask the user for information needed to populate the configuration. Skip questions where answers can be inferred from existing files.5960**Required information:**6162| Category | Questions |63|----------|-----------|64| **Identity** | Project name? Organization name? One-line description? |65| **Tech Stack** | Language(s)? Frontend framework? Backend framework? Database type? |66| **Branding** | Primary brand color (hex)? Dark color? Light color? Additional brand colors? |67| **Infrastructure** | Deployment environment (cloud/on-premise/hybrid)? Air-gapped? Authentication method? |68| **Logging** | Logging library? (loguru, logging, structlog, etc.) |69| **Shared Libraries** | Any shared/internal libraries? Paths? |70| **Project Structure** | Entry point file? Source root? Key directories? |71| **Data Sources** | Database name(s)? Connection method? Key tables? |72| **Key Conventions** | Query externalization? Path resolution patterns? CSS scoping method? Component reuse patterns? |73| **Commands** | How to run the app? Run tests? Lint? Build? |74| **Recipe** | Delivery workflow pattern? (`enterprise-dashboard` for data-to-UI dashboards, or blank for generic projects) |7576### Step 3: Populate project-config.md77781. Set the `profile` field (use org name slug, e.g., `acme`, `myorg`, or leave blank if no profile needed)792. If using a profile, create a Profile Definition section with:80 - Core Placeholders table (`<ORG_NAME>`, `<BRAND_PRIMARY>`, `<BRAND_DARK>`, `<BRAND_LIGHT>`, `<DB_TYPE>`, `<DEPLOY_ENV>`, `<LOGGING_LIB>`, `<SHARED_LIBS>`)81 - Brand Color Palette table (if provided)82 - Tech Stack table83 - Data Sources table84 - Project Structure block85 - Key Conventions list863. If not using a profile, fill in the "Step 2: Project Values" table directly874. If user specified a recipe:88 - Verify `.github/recipes/{recipe}.recipe.md` exists in the pool89 - Set the `recipe` field in the Step 1 table: `| **recipe** | {recipe} |`90 - If recipe file is missing, warn but continue — recipe is optional9192### Step 4: Create or Update copilot-instructions.md9394**Template sections** (check each — add only what's missing):9596```markdown97# {Project Name} — AI Assistant Context9899## Project Overview100{One paragraph: what the project does, who it's for, key goals}101102## Architecture103{High-level architecture: components, data flow, key patterns}104105## Tech Stack106{Table: Layer → Technology}107108## Data Sources109{Table: Source → Table/Collection → Description}110111## Key Patterns & Conventions112{Bullet list of project-specific patterns the AI must follow}113114## Database Access115{Connection method, query patterns, ORM/raw SQL, caching}116117## Project Structure118{Directory tree of key folders}119120## Deployment121{How the app is deployed, environment specifics}122123## Key Commands124{Run, test, lint, build commands}125```126127**Merge logic for existing files:**1281. Parse existing `copilot-instructions.md` into sections (by `##` headings)1292. If the file contains `<!-- junai:start -->` … `<!-- junai:end -->` sentinel markers, leave that block untouched — it is managed by the junai extension1303. For each template section, check if an equivalent heading exists outside the managed block (fuzzy match — "Tech Stack" matches "Technology Stack", "Stack", etc.)1314. If section exists → **skip it** (preserve user's content entirely)1325. If section is missing → **append it** before the managed section (or at the end if no managed section) with marker:133 ```markdown134 <!-- Added by onboard-project — review and customize -->135 ## {Section Title}136 {Template content populated with project values}137 ```1385. Never reorder, rewrite, or delete existing sections139140### Step 5: Create agent-docs/ARTIFACTS.md (if missing)141142If `agent-docs/ARTIFACTS.md` does not exist, create it using the standard template:143144```markdown145# Agent Artifacts146147> **For agents**: Only read artifacts with status `current`. Ignore `superseded` and `archived`.148> **For humans**: This is a working directory for inter-agent communication. Do not include in project documentation.149150## How to Read This Manifest151152- **chain_id**: Links all artifacts in a feature chain (format: `FEAT-YYYY-MMDD-{slug}`)153- **status**: `current` (active) | `superseded` (replaced) | `archived` (historical) | `completed` (done)154- **approval**: `pending` (awaiting review) | `approved` (proceed) | `revision-requested` (needs changes)155156## Artifacts157158| Date | Agent | Type | Description | Path | Status | Approval | Chain ID |159|------|-------|------|-------------|------|--------|----------|----------|160| | | | | | | | |161```162163Also create the subfolder structure if missing:164- `agent-docs/intents/`165- `agent-docs/escalations/`166- `agent-docs/prd/`167- `agent-docs/architecture/`168- `agent-docs/ux/mockups/`169- `agent-docs/ux/reviews/`170- `agent-docs/security/`171- `agent-docs/reviews/`172- `agent-docs/debug/`173- `agent-docs/testing/`174- `agent-docs/.archive/`175176### Step 6: Summary177178Report what was done:179- Files created vs. updated180- Sections added to existing `copilot-instructions.md` (if any)181- Profile set in `project-config.md`182- Next steps (e.g., "Review the added sections and customize them")183184---185186## Important Notes187188- All paths in this skill are relative. The skill works regardless of whether the AI resources folder is at `.github/`, `.cursor/`, or any other location.189- The `copilot-instructions.md` file is project-specific and should NOT be committed to the portable pool. It stays in the project repo. The junai extension manages only a sentinel-delimited `<!-- junai:start -->` … `<!-- junai:end -->` section — never edit content inside those markers (it will be refreshed on the next Update). Add your project content outside the markers.190- `project-config.md` IS part of the portable pool as a template. When the profile section is filled in, it becomes project-specific.191- The `recipe` field in `project-config.md` is optional. Projects without a recipe work exactly as before — agents use their built-in expertise and plan-embedded skills. Recipes add automatic cross-project baseline loading for repeatable delivery patterns.192193---194> Source: [saajunaid/ptarmigan](https://github.com/saajunaid/ptarmigan) — distributed by [TomeVault](https://tomevault.io).195<!-- tomevault:4.0:skill_md:2026-06-15 -->