Skip to content

Onboarding — partner organisations

Once you've followed Quick start and /help-tutorial runs, the plugin is working with EMPN-defaults output. This page is about making it produce your outputs — your logo, your voice, your workspaces, your source tiers.

>

Organisation declared

org: dezernat-zukunft written to the workspace CLAUDE.md — one line, no script

charts, decks and briefs now carry their brand and voice

everything not overridden is inherited from the network

What customisation looks like

The plugin separates how from who.

  • skills/ is the how — methodology, hand-offs, fan-out logic. Universal across the network. You inherit it as-is.
  • shared/_common/ holds universal rules — writing patterns, EU process knowledge, search and monitor patterns, pillar knowledge packsbraries. You inherit it; PR anything you'd improve.
  • shared/empn/ is EMPN's identity — house style, workspaces, folder conventions, visuals. Acts as the canonical reference and the default fallback when you haven't overridden a file.
  • shared/<your-slug>/ is your overlay. Sparse — only the files you want to differ from EMPN.

When a skill loads house-style.md, the resolver walks <your-slug>/_common/empn/ and returns the first match. The model never picks the org; the symlink does.

For the architectural detail and a diagram, see How it works.

What to override, in what order

Day 1, if you want anything other than EMPN-branded outputs

  • org-identity.md — your web URL, headquarters, contact email, one-line blurb, network position. Every closing slide, brief footer, and contact line reads this file. Without overriding, your decks say "EMPN" at the bottom.
  • visuals/ — logos, design tokens, fonts. The directory is symlinked wholesale, so you ship a full visuals/ tree. Start by copying EMPN's as a template:
    cp -r plugins/empn-core/shared/empn/visuals/ plugins/empn-core/shared/<your-slug>/visuals/
    
    Then replace the brand-specific files: logos in logos/, palette in design-tokens.yaml, font URLs in webfonts.css.

Within the first weeks

  • workspaces.md — the Drive folders your organisation's research lives in, one per pillar. EMPN's five (fiscal, energy, monetary, industrial, cross-topic) are unlikely to match yours exactly.
  • folder-conventions.md — your workspace tree if it differs from EMPN's 05_Projects/<workspace>/... layout.
  • house-style.md — voice, citation rules, forbidden phrases, uncertainty markers. Worth overriding only if your editorial standards diverge meaningfully from EMPN's.
  • presentation-structure.md — deck section conventions, slide budget, slide-level rules.

Probably never

  • narrative-arc.md is empirically derived from EMPN's own brief corpus. Inherit it unless you have a different signature structure backed by your own published work.
  • filename-convention.md — almost always fine as-is.

Constraints to flag

A few parts of the plugin are tied to specific infrastructure and won't customise cleanly without a separate conversation:

  • Tracker hosting. tracker-publish assumes Cloudflare Pages plus a DNS zone on your domain.
  • Font hosting. webfonts.css carries hardcoded URLs at empn.eu. Your version needs to point at your own font host, or bundle fonts locally.

For other infrastructure-coupled skill families (contacts pipeline, create-cover, the export pipeline behind branded charts and decks), see the Later / advanced section in Prerequisites. These aren't set up on partner Day 1.

Running the resolver

setup_org.py is idempotent. Run it whenever you've changed your overlay or pulled a plugin update.

python3 .../setup_org.py            # generate symlinks for the resolved org
python3 .../setup_org.py --clean    # remove generated symlinks
python3 .../setup_org.py --dry-run  # show plan, change nothing

Output ends with a line like linked 27 canonical path(s), skipped 0; active slug = <your-slug>.

You should not have to run it by hand

The workspace CLAUDE.md runs setup_org.py --resolve at the start of every session, and the brand and identity skills run it too. --resolve writes nothing — it prints your org and the folders to look in, in order.

It gets your org from one line in that same CLAUDE.md:

org: dezernat-zukunft

That is the whole configuration. A CLAUDE.md is read at the start of every session in every runtime, so the slug arrives without a marker file, an environment variable, or anything for you to run. If the workspace has no org: line, the session runs on EMPN's identity and tells you so every time, offering to record yours. Answering once ends the reminder.

It is per-workspace, not per-machine, so one laptop can hold two organisations' workspaces without them fighting over a single setting — and a project folder can declare a different org from the vault root above it.

The symlinks that --ensure generates are a local convenience, not the mechanism. Nothing needs to be written inside the plugin folder, which is why a read-only plugin directory does not break anything.

If your vault's CLAUDE.md predates this, copy the header block from shared/empn/templates/workspace-CLAUDE.md, or just add the org: line yourself.

Full contract, including the exit codes: shared/org-resolution.md.

When something breaks

Symptom Likely cause Fix
Outputs branded EMPN despite override Resolution didn't run, or resolved to empn Run setup_org.py --resolve; check the org: line in your workspace CLAUDE.md holds your slug
Told your org is assumed, every session There is no org: line above the session's working directory Add one to the workspace CLAUDE.md, or run setup_org.py --write-org <slug> --workspace <root>
slug not in registry Typo in the org: line, or org not on the allow-list yet Check spelling, or ask maintainer to add your org
overlay folder missing Slug is on the list but shared/<slug>/ doesn't exist Create the folder with a README.md placeholder
Markdown link in a skill goes 404 A canonical symlink is missing Re-run setup_org.py
Chart still in EMPN colours Partner override of design-tokens.yaml not loaded Verify shared/visuals symlink target; clear chart cache
Cowork ignores skill triggers Sync incomplete, or SKILL.md frontmatter broken Restart Cowork; check YAML validity

For anything else, send the maintainer the error and the output of setup_org.py --dry-run.

Adding a new partner organisation

If your organisation isn't on the pre-prepared list (arena-ide, dezernat-zukunft, institut-avant-garde), see Contributing — register a new organisation. One-line PR.