Big Emotion Project Setup
Every Big Emotion project ships the same toolset. This skill installs it, module by module, on any repo — or audits an existing repo against it. The full rationale lives in SPEC.md at the root of the agent-atelier repository.
| Module |
What |
Reference |
| M1 |
CI quality gates (gitleaks, lint, typecheck, format, test, build) |
references/m1-ci.md |
| M2 |
Husky hooks (pre-commit → lint-staged, commit-msg → commitlint) |
references/m2-hooks.md |
| M3 |
Project skills <slug>-{release,audit,spec,ticket,bootstrap-confluence} |
references/m3-skills.md |
| M4 |
Atlassian wiring (Jira board, Confluence spec tree, config) |
references/m4-atlassian.md |
| M5 |
Ferry (router model, claude-code path) |
references/m5-ferry.md |
| M6 |
Branch & release model (develop/main, tag v* → deploy) |
references/m6-branch-release.md |
| M7 |
Infrastructure & secrets (OVH VPS + Traefik, Azure variant, M365 mail, secrets doctrine) |
references/m7-infra.md |
Reference paths above are relative to ${CLAUDE_PLUGIN_ROOT}/skills/setup/. Templates live in ${CLAUDE_PLUGIN_ROOT}/skills/setup/templates/; the placeholder registry is templates/params.json.
Operating rules
- Never write before the plan is confirmed. Steps 1–3 are read-only; a single explicit confirmation covers the whole install plan.
- Idempotent. On a compliant repo, report "compliant" and change nothing. Never overwrite a project's existing customization of a module without flagging it as drift and asking.
- Modules are independent. Install only what the user selected; missing prerequisites between modules (M5 needs M4's board; M3's spec skill needs M4's config) are declared in the plan, not silently added.
- Everything written is in English (code, comments, docs). User-facing trigger phrases inside skills may stay French.
- Adapt, don't force. Templates ship in pnpm/TypeScript form; adapt commands to the interview answers (package manager, toolchain layout, no-TS repos) per each module's reference doc.
- Secret names, never values. The skill documents where every secret lives, what it is called, and how to obtain it — it never writes, echoes, or stores a secret value (not in rendered files, not in conversation output, not in this plugin). Values are entered by a human directly at their destination (GitHub secret, VPS
.env, provider portal). This plugin is public and ships no infrastructure coordinates — no hostnames, IPs, SSH ports, account handles or resource names. Collect them from the user at interview time and never write them back into the plugin.
Step 1 — Interview
Read templates/params.json — it is the authoritative parameter list. Collect only what the selected modules need; propose defaults detected from the repo (package.json name → project_slug, git remote → org/repo, existing branches → branch model). For Atlassian ids, prefer discovery via Atlassian MCP over asking (see references/m4-atlassian.md).
Ask which modules to install when the user hasn't said; default to all seven for a new project. M7's coordinates (VPS host, SSH port and user, app hostname, deploy path, mail sender) ship with no defaults by design — ask for them, or let the user point you at their own private ops notes outside this repo.
Step 2 — Gap analysis (read-only)
For each selected module, classify missing / present / drifted with evidence:
- M1:
.github/workflows/ci.yml exists? Contains the core gates (secret scan, lint, typecheck, format, test, build)? Partial = drifted, list absent gates.
- M2:
.husky/ with pre-commit + commit-msg? commitlint.config.*, lint-staged.config.*, prepare: husky script?
- M3:
.claude/skills/<slug>-{release,audit,spec,ticket,bootstrap-confluence}/? Also check ~/.claude/skills/ for name collisions — personal skills shadow project skills (warn, recommend deleting stale personal copies).
- M4:
docs/confluence-spec/config.json complete? docs/.confluence-bootstrap-complete sentinel? docs/templates/jira-ticket-template.md? Jira board reachable via MCP with the five pipeline columns?
- M5:
ferry.config.json|yaml + .github/workflows/ferry-router.yml (router model — five per-role ferry-*.yml workflows = drifted: legacy model, flag for migration but do not auto-migrate) + ferry-reconcile.yml + ferry-cost-daily.yml? Secrets/vars present (gh secret list, gh variable list)?
- M6: integration branch exists, default branch protected,
deploy-production.yml triggered on tag v*?
- M7: deploy artifacts present (
Dockerfile, deploy/docker-compose.yml, deploy/env.template — or Azure deploy workflows)? GitHub production environment with the DEPLOY_* variables + DEPLOY_SSH_KEY secret (gh api repos/{owner}/{repo}/environments)? Transactional mail wired per the M365 pattern where the app sends email?
Output one table: module · status · evidence · what install would do.
Step 3 — Plan + confirmation
Per-module install plan (files to write, wizards to run, manual steps the user must do in Jira/Confluence UIs, settings to change via gh). State what will NOT be touched. Wait for one explicit go.
Step 4 — Install
Work module by module in order M6 → M1 → M2 → M4 → M3 → M5 → M7 (branch model first — CI triggers reference branches; Ferry needs board, branches, and CI; infra last — its deploy workflow slots into M6's release flow). For each module follow its reference doc; render templates by replacing {{param}} tokens with interview values; # PROJECT-SPECIFIC: / <!-- PROJECT-SPECIFIC: --> markers in templates show where the project adds its own content — surface them to the user, never delete silently.
Manual Atlassian/GitHub-settings steps: guide the user through them interactively and verify each via MCP or gh before moving on.
Step 5 — Verify
- M2: make a scratch commit exercising the hooks (then reset) — both hooks must fire; a bad message must be rejected.
- M1: push a branch or open a draft PR to see the gates run, or
gh workflow run where applicable.
- M3: each installed skill's preconditions pass (dry read-only run).
- M4: MCP reads of config ids succeed; sentinel present after bootstrap.
- M5:
npx -p @big-emotion/ferry ferry-doctor; then a smoke Story through Refinement.
- Output a final checklist: done / remaining-manual / deferred.
Failure modes
- Repo already has a conflicting tool (e.g. lefthook, commitizen): stop, present the conflict, never replace without an explicit decision.
- Legacy Ferry (five per-role workflows) detected: report as drift with a migration pointer (
references/m5-ferry.md); migration is its own task, not part of install.
- Atlassian MCP unavailable: M4/M3-spec install degrades to fully manual guidance; say so up front.
- User lacks org/repo admin rights (secrets, branch protection): emit the exact
gh commands + settings paths for someone who has them, and mark those steps remaining.
Out of scope
Auto-creating Jira projects/boards (guided manual steps only) · migrating legacy-Ferry repos · website-specific gates (design tokens, Figma parity, Prismic checks — see the optional-extensions catalog in references/m1-ci.md) · anything requiring credentials the user hasn't provided.
1---2name: setup3description: Install and configure the Big Emotion project standard on a new or existing repo — CI quality gates, Husky hooks, the four project skills, Atlassian wiring (Jira board + Confluence spec tree), Ferry, and the infrastructure module (OVH VPS deploy, Azure variant, M365 mail, secrets doctrine). Use when starting a new Big Emotion project, bringing an existing repo up to standard, checking a repo's compliance, or setting up deploy/mail/secrets ("setup this project", "install the standard", "gap analysis", "is this repo up to standard", "deploy this on the VPS").4---56# Big Emotion Project Setup78Every Big Emotion project ships the same toolset. This skill installs it, module by module, on any repo — or audits an existing repo against it. The full rationale lives in SPEC.md at the root of the agent-atelier repository.910| Module | What | Reference |11|---|---|---|12| M1 | CI quality gates (gitleaks, lint, typecheck, format, test, build) | `references/m1-ci.md` |13| M2 | Husky hooks (pre-commit → lint-staged, commit-msg → commitlint) | `references/m2-hooks.md` |14| M3 | Project skills `<slug>-{release,audit,spec,ticket,bootstrap-confluence}` | `references/m3-skills.md` |15| M4 | Atlassian wiring (Jira board, Confluence spec tree, config) | `references/m4-atlassian.md` |16| M5 | Ferry (router model, claude-code path) | `references/m5-ferry.md` |17| M6 | Branch & release model (develop/main, tag `v*` → deploy) | `references/m6-branch-release.md` |18| M7 | Infrastructure & secrets (OVH VPS + Traefik, Azure variant, M365 mail, secrets doctrine) | `references/m7-infra.md` |1920Reference paths above are relative to `${CLAUDE_PLUGIN_ROOT}/skills/setup/`. Templates live in `${CLAUDE_PLUGIN_ROOT}/skills/setup/templates/`; the placeholder registry is `templates/params.json`.2122## Operating rules2324- **Never write before the plan is confirmed.** Steps 1–3 are read-only; a single explicit confirmation covers the whole install plan.25- **Idempotent.** On a compliant repo, report "compliant" and change nothing. Never overwrite a project's existing customization of a module without flagging it as drift and asking.26- **Modules are independent.** Install only what the user selected; missing prerequisites between modules (M5 needs M4's board; M3's spec skill needs M4's config) are declared in the plan, not silently added.27- **Everything written is in English** (code, comments, docs). User-facing trigger phrases inside skills may stay French.28- **Adapt, don't force.** Templates ship in pnpm/TypeScript form; adapt commands to the interview answers (package manager, toolchain layout, no-TS repos) per each module's reference doc.29- **Secret names, never values.** The skill documents where every secret lives, what it is called, and how to obtain it — it never writes, echoes, or stores a secret value (not in rendered files, not in conversation output, not in this plugin). Values are entered by a human directly at their destination (GitHub secret, VPS `.env`, provider portal). **This plugin is public and ships no infrastructure coordinates** — no hostnames, IPs, SSH ports, account handles or resource names. Collect them from the user at interview time and never write them back into the plugin.3031## Step 1 — Interview3233Read `templates/params.json` — it is the authoritative parameter list. Collect only what the selected modules need; propose defaults detected from the repo (package.json name → `project_slug`, `git remote` → org/repo, existing branches → branch model). For Atlassian ids, prefer discovery via Atlassian MCP over asking (see `references/m4-atlassian.md`).3435Ask which modules to install when the user hasn't said; default to all seven for a new project. M7's coordinates (VPS host, SSH port and user, app hostname, deploy path, mail sender) ship with no defaults by design — ask for them, or let the user point you at their own private ops notes outside this repo.3637## Step 2 — Gap analysis (read-only)3839For each selected module, classify **missing / present / drifted** with evidence:4041- **M1**: `.github/workflows/ci.yml` exists? Contains the core gates (secret scan, lint, typecheck, format, test, build)? Partial = drifted, list absent gates.42- **M2**: `.husky/` with pre-commit + commit-msg? `commitlint.config.*`, `lint-staged.config.*`, `prepare: husky` script?43- **M3**: `.claude/skills/<slug>-{release,audit,spec,ticket,bootstrap-confluence}/`? Also check `~/.claude/skills/` for name collisions — personal skills shadow project skills (warn, recommend deleting stale personal copies).44- **M4**: `docs/confluence-spec/config.json` complete? `docs/.confluence-bootstrap-complete` sentinel? `docs/templates/jira-ticket-template.md`? Jira board reachable via MCP with the five pipeline columns?45- **M5**: `ferry.config.json|yaml` + `.github/workflows/ferry-router.yml` (router model — five per-role `ferry-*.yml` workflows = drifted: legacy model, flag for migration but do not auto-migrate) + `ferry-reconcile.yml` + `ferry-cost-daily.yml`? Secrets/vars present (`gh secret list`, `gh variable list`)?46- **M6**: integration branch exists, default branch protected, `deploy-production.yml` triggered on tag `v*`?47- **M7**: deploy artifacts present (`Dockerfile`, `deploy/docker-compose.yml`, `deploy/env.template` — or Azure deploy workflows)? GitHub `production` environment with the `DEPLOY_*` variables + `DEPLOY_SSH_KEY` secret (`gh api repos/{owner}/{repo}/environments`)? Transactional mail wired per the M365 pattern where the app sends email?4849Output one table: module · status · evidence · what install would do.5051## Step 3 — Plan + confirmation5253Per-module install plan (files to write, wizards to run, manual steps the user must do in Jira/Confluence UIs, settings to change via `gh`). State what will NOT be touched. Wait for one explicit go.5455## Step 4 — Install5657Work module by module in order M6 → M1 → M2 → M4 → M3 → M5 → M7 (branch model first — CI triggers reference branches; Ferry needs board, branches, and CI; infra last — its deploy workflow slots into M6's release flow). For each module follow its reference doc; render templates by replacing `{{param}}` tokens with interview values; `# PROJECT-SPECIFIC:` / `<!-- PROJECT-SPECIFIC: -->` markers in templates show where the project adds its own content — surface them to the user, never delete silently.5859Manual Atlassian/GitHub-settings steps: guide the user through them interactively and verify each via MCP or `gh` before moving on.6061## Step 5 — Verify6263- M2: make a scratch commit exercising the hooks (then reset) — both hooks must fire; a bad message must be rejected.64- M1: push a branch or open a draft PR to see the gates run, or `gh workflow run` where applicable.65- M3: each installed skill's preconditions pass (dry read-only run).66- M4: MCP reads of config ids succeed; sentinel present after bootstrap.67- M5: `npx -p @big-emotion/ferry ferry-doctor`; then a smoke Story through Refinement.68- Output a final checklist: done / remaining-manual / deferred.6970## Failure modes7172- **Repo already has a conflicting tool** (e.g. lefthook, commitizen): stop, present the conflict, never replace without an explicit decision.73- **Legacy Ferry (five per-role workflows) detected**: report as drift with a migration pointer (`references/m5-ferry.md`); migration is its own task, not part of install.74- **Atlassian MCP unavailable**: M4/M3-spec install degrades to fully manual guidance; say so up front.75- **User lacks org/repo admin rights** (secrets, branch protection): emit the exact `gh` commands + settings paths for someone who has them, and mark those steps remaining.7677## Out of scope7879Auto-creating Jira projects/boards (guided manual steps only) · migrating legacy-Ferry repos · website-specific gates (design tokens, Figma parity, Prismic checks — see the optional-extensions catalog in `references/m1-ci.md`) · anything requiring credentials the user hasn't provided.