DIA Setup
This skill is the activation and configuration entry point for the
Digital Innovation Agents plugin in a user project. It manages a
single configuration file (.dia/config.toml) and a set of anchor
blocks in agent-facing files. It does not run any phase skill, does
not read or modify the backlog, and does not invoke flow.py. The
only external command it may run is a read-only gh project view
reachability check when the user configures a GitHub Project number.
The skill is split into two paths driven by a single check at the
start: does .dia/config.toml already exist? If no, run the
activation flow. If yes, run the reconfigure flow.
Modes
The plugin supports three modes, written into .dia/config.toml as
the field mode:
off: plugin is neutral. Anchor blocks are removed from
agent-facing files, the SessionStart hook does not inject the
bootstrap skill, and phase-skills that probe the mode skip their
GitHub-side calls.
git-only: anchor blocks are present, the SessionStart hook
injects the bootstrap, the local git hooks (pre-commit,
pre-merge-commit) and scripts/merge-to-dev.sh are recommended.
No GitHub issue or PR synchronization.
github-sync: as git-only, plus flow.py is invoked from
phase-skills to mirror backlog state to GitHub issues and project
cards, run promote-to-epic after requirements engineering, and
keep status in sync.
Activation flow (no .dia/config.toml yet)
- Mode question. Use
AskUserQuestion with three options:
git-only (recommended for most projects with a single
developer), github-sync (recommended for teams that already
work with GitHub Issues / Projects), off (recommended when the
user wants to install the plugin without active behavior). Each
option must list a + Pro: line and a - Con: line in its
description per the project User Interaction Protocol.
1b. Profile question (only if mode != off). Use
AskUserQuestion with two options:
full (Recommended for a complete V-Model cycle): every phase
skill is binding as written.
lean ("only durable decisions and stable navigation"): rules
consolidated in AGENTS.md with CLAUDE.md as pointer,
_devprocess/SYSTEM-MAP.md, post-hoc ADRs behind
decisions/README.md, status in GitHub Issues (github-sync) or
a thin BACKLOG (git-only). All other phase skills stay
available but advisory. Modeled on a downstream project;
pick it when the team will not run BA/RE ceremony anyway.
In the lean profile, step 6 (structure seed) uses the SYSTEM-MAP
and DECISIONS-README templates from skills/architecture/templates/
instead of the three RULES files, and the anchor block carries the
anti-duplication rule.
Anchor file detection. Scan the repo root for the known agent
files. Show the user which files were detected and ask
(single AskUserQuestion, multiSelect) which ones should carry
the anchor block. Pre-select all detected files. Known list:
CLAUDE.md
AGENTS.md
GEMINI.md
.cursorrules
.github/copilot-instructions.md
.windsurfrules
Source branch question (only if mode != off). Default
develop. Ask the user via AskUserQuestion whether to keep
develop or use a different branch (main, dev, custom).
This value goes into .dia/config.toml as source_branch.
GitHub Project question (only if mode = github-sync). Ask
the user via AskUserQuestion whether they want backlog Status
mirrored to a GitHub Project Status field. If yes, ask for the
ProjectV2 number (the integer at the end of the project URL,
for example 7 for github.com/users/X/projects/7). Optionally
ask for the project owner login (when empty, flow.py resolves
it from the repository) and the status field name (default
Status). These values go into .dia/config.toml under
[github]. If the user skips, leave project_number = 0; the
issue itself still syncs, only the project Status field stays
untouched.
Pre-flight (only when a project number was given). Before
writing the config, verify the project is reachable:
gh project view <N> --owner <owner-or-resolved-repo-owner> --format json
- Success: continue, mention the project title back to the user.
- Failure mentioning a missing scope (
gh says the token lacks
the project scope): tell the user to run
gh auth refresh -s project, then offer to retry or to write
the config anyway (the number is stored regardless; the sync
just stays a no-op until the scope is granted).
- Other failure (wrong number, no access, project under a
different owner): surface the
gh error verbatim, ask whether
to correct the number / owner now or store it as-is.
Do not block on this check; its only job is to catch the
gh auth refresh -s project stumbling block at setup time
instead of at the first sync.
Write configuration. Create .dia/ directory if missing and
write .dia/config.toml from the template
skills/dia-setup/templates/dia-config.toml.tmpl, substituting
{{mode}}, the chosen anchor_files, source_branch, and the
[github] block.
Write anchor blocks (only if mode != off). Run
python3 tools/dia-setup/anchor.py write --mode <mode> --files <selected list>. The script is idempotent; it creates or
replaces blocks in the selected files.
Confirmation. Print a short confirmation to the user:
- mode now active
- which files received an anchor block
- that
/dia-setup can be re-run any time to change the mode
- a hint that
/dia-guide is the natural next step for actual
work
- when
mode = github-sync AND _devprocess/context/BACKLOG.md
already has rows (a brownfield project just migrated or
reverse-engineered): point at
python3 tools/github-integration/flow.py preflight (read-only
checks) and ... flow.py initial-sync (bulk onboarding) rather
than syncing items one by one.
Reconfigure flow (.dia/config.toml exists)
Read current state. Parse .dia/config.toml, extract mode,
profile (print full (implicit) when the field is absent), and
anchor_files. Print the current state to the user.
Action question. Use AskUserQuestion with these options:
- Change mode (Recommended if user invoked the skill to
toggle behavior).
- Change profile (full <-> lean; updates the config field and
refreshes the anchor blocks with the new profile).
- Refresh anchor blocks (rewrites blocks against the current
mode and profile, useful after a template update).
- Add or remove anchor files (multi-step, see below).
- Deactivate (set mode to off and remove all anchor blocks).
- Cancel.
Each option requires a + Pro: and - Con: line.
Apply the chosen action.
- Change mode: ask new mode (Pro/Con per option), update
.dia/config.toml, run
python3 tools/dia-setup/anchor.py write --mode <new>. When the
new mode is github-sync and a project number is configured (or
the user supplies one now), run the same gh project view
pre-flight as activation step 4 and surface the result.
- Refresh anchor blocks: run anchor.py write with the
existing mode and existing anchor_files list.
- Add or remove anchor files: ask multiSelect with all known
targets, mark currently anchored files as pre-selected, write
the diff (anchor.py write for new entries, anchor.py remove
for unselected entries), update
.dia/config.toml.
- Deactivate: write
mode = "off" to .dia/config.toml,
run python3 tools/dia-setup/anchor.py remove --all. Anchor
files list in the config remains, so a later reactivation
restores the same surface.
- Cancel: do nothing.
Confirmation. Print which files changed and what the new
state is.
Verification (built-in self-check)
After every write or reconfigure flow, the skill calls
python3 tools/dia-setup/anchor.py verify and reports the result.
A non-zero exit code signals drift between .dia/config.toml and
the actual anchor blocks; if it occurs, surface the missing files
to the user and offer a refresh.
Idempotency
The skill must be safe to invoke multiple times. The anchor script
detects existing blocks via a stable marker pair and replaces them
in place. Running /dia-setup twice with the same answers must
produce no diff in the working tree.
Hand-off
/dia-setup does not invoke any phase skill, does not write to
BACKLOG.md, and does not start any handoff ritual. After a
successful run, the user typically continues with /dia-guide
for orientation or with a phase skill of their choice.
Files written or removed
.dia/config.toml (created or updated)
- one or more of:
CLAUDE.md, AGENTS.md, GEMINI.md,
.cursorrules, .github/copilot-instructions.md,
.windsurfrules (anchor block written, replaced, or removed)
The skill never touches files outside this list.
Settings file format
mode = "git-only"
profile = "full"
anchor_files = [
"CLAUDE.md",
"AGENTS.md",
"GEMINI.md",
".cursorrules",
]
source_branch = "develop"
[github]
project_number = 7
status_field = "Status"
project_owner = ""
mode is the only mandatory field. profile defaults to full
when absent (zero behavior change for existing configs); lean
makes only architecture artifacts and backlog state binding.
anchor_files defaults to the list of files that carry a managed
anchor block. source_branch controls the base for new feature
branches /dia-guide creates. Pass the profile to
anchor.py write --mode <m> --profile <p> so the anchor block
renders it.
The [github] section is honored only when mode = "github-sync":
project_number is the GitHub ProjectV2 number (the integer at
the end of the project URL, e.g. 7 for
github.com/users/X/projects/7). Leave 0 to skip
project-status mirroring; the issue itself still syncs, only
the project Status field stays untouched.
status_field is the single-select field name on the project
that represents item status. Default Status.
project_owner is optional. When empty, flow.py resolves the
owner from the repository. Set explicitly when the project lives
under a different owner than the repo (org-level projects, etc.).
Reference
Full anchor format and idempotency rules:
skills/dia-setup/references/anchor-format.md.
1---2name: dia-setup3description: Activates, reconfigures, or deactivates the DIA workflow in a project. Writes .dia/config.toml (mode + profile) and manages anchor blocks in agent files (CLAUDE.md, AGENTS.md, ...). Use for "DIA aktivieren", "DIA setup", "DIA settings", "Modus wechseln", "Profil wechseln", "DIA off". Covers first-time activation and later reconfiguration.4---56# DIA Setup78This skill is the activation and configuration entry point for the9Digital Innovation Agents plugin in a user project. It manages a10single configuration file (`.dia/config.toml`) and a set of anchor11blocks in agent-facing files. It does not run any phase skill, does12not read or modify the backlog, and does not invoke flow.py. The13only external command it may run is a read-only `gh project view`14reachability check when the user configures a GitHub Project number.1516The skill is split into two paths driven by a single check at the17start: does `.dia/config.toml` already exist? If no, run the18**activation flow**. If yes, run the **reconfigure flow**.1920## Modes2122The plugin supports three modes, written into `.dia/config.toml` as23the field `mode`:2425- **`off`**: plugin is neutral. Anchor blocks are removed from26 agent-facing files, the SessionStart hook does not inject the27 bootstrap skill, and phase-skills that probe the mode skip their28 GitHub-side calls.29- **`git-only`**: anchor blocks are present, the SessionStart hook30 injects the bootstrap, the local git hooks (pre-commit,31 pre-merge-commit) and `scripts/merge-to-dev.sh` are recommended.32 No GitHub issue or PR synchronization.33- **`github-sync`**: as `git-only`, plus `flow.py` is invoked from34 phase-skills to mirror backlog state to GitHub issues and project35 cards, run `promote-to-epic` after requirements engineering, and36 keep status in sync.3738## Activation flow (no `.dia/config.toml` yet)39401. **Mode question.** Use `AskUserQuestion` with three options:41 `git-only` (recommended for most projects with a single42 developer), `github-sync` (recommended for teams that already43 work with GitHub Issues / Projects), `off` (recommended when the44 user wants to install the plugin without active behavior). Each45 option must list a `+ Pro:` line and a `- Con:` line in its46 description per the project User Interaction Protocol.47481b. **Profile question (only if mode != off).** Use49 `AskUserQuestion` with two options:50 - `full` (Recommended for a complete V-Model cycle): every phase51 skill is binding as written.52 - `lean` ("only durable decisions and stable navigation"): rules53 consolidated in AGENTS.md with CLAUDE.md as pointer,54 `_devprocess/SYSTEM-MAP.md`, post-hoc ADRs behind55 `decisions/README.md`, status in GitHub Issues (github-sync) or56 a thin BACKLOG (git-only). All other phase skills stay57 available but advisory. Modeled on a downstream project;58 pick it when the team will not run BA/RE ceremony anyway.5960 In the lean profile, step 6 (structure seed) uses the SYSTEM-MAP61 and DECISIONS-README templates from `skills/architecture/templates/`62 instead of the three RULES files, and the anchor block carries the63 anti-duplication rule.64652. **Anchor file detection.** Scan the repo root for the known agent66 files. Show the user which files were detected and ask67 (single `AskUserQuestion`, multiSelect) which ones should carry68 the anchor block. Pre-select all detected files. Known list:69 - `CLAUDE.md`70 - `AGENTS.md`71 - `GEMINI.md`72 - `.cursorrules`73 - `.github/copilot-instructions.md`74 - `.windsurfrules`75763. **Source branch question (only if mode != off).** Default77 `develop`. Ask the user via `AskUserQuestion` whether to keep78 `develop` or use a different branch (`main`, `dev`, custom).79 This value goes into `.dia/config.toml` as `source_branch`.80814. **GitHub Project question (only if mode = github-sync).** Ask82 the user via `AskUserQuestion` whether they want backlog Status83 mirrored to a GitHub Project Status field. If yes, ask for the84 ProjectV2 number (the integer at the end of the project URL,85 for example 7 for `github.com/users/X/projects/7`). Optionally86 ask for the project owner login (when empty, flow.py resolves87 it from the repository) and the status field name (default88 `Status`). These values go into `.dia/config.toml` under89 `[github]`. If the user skips, leave `project_number = 0`; the90 issue itself still syncs, only the project Status field stays91 untouched.9293 **Pre-flight (only when a project number was given).** Before94 writing the config, verify the project is reachable:9596 ```97 gh project view <N> --owner <owner-or-resolved-repo-owner> --format json98 ```99100 - Success: continue, mention the project title back to the user.101 - Failure mentioning a missing scope (`gh` says the token lacks102 the `project` scope): tell the user to run103 `gh auth refresh -s project`, then offer to retry or to write104 the config anyway (the number is stored regardless; the sync105 just stays a no-op until the scope is granted).106 - Other failure (wrong number, no access, project under a107 different owner): surface the `gh` error verbatim, ask whether108 to correct the number / owner now or store it as-is.109110 Do not block on this check; its only job is to catch the111 `gh auth refresh -s project` stumbling block at setup time112 instead of at the first sync.1131145. **Write configuration.** Create `.dia/` directory if missing and115 write `.dia/config.toml` from the template116 `skills/dia-setup/templates/dia-config.toml.tmpl`, substituting117 `{{mode}}`, the chosen `anchor_files`, `source_branch`, and the118 `[github]` block.1191206. **Write anchor blocks (only if mode != off).** Run121 `python3 tools/dia-setup/anchor.py write --mode <mode> --files122 <selected list>`. The script is idempotent; it creates or123 replaces blocks in the selected files.1241257. **Confirmation.** Print a short confirmation to the user:126 - mode now active127 - which files received an anchor block128 - that `/dia-setup` can be re-run any time to change the mode129 - a hint that `/dia-guide` is the natural next step for actual130 work131 - when `mode = github-sync` AND `_devprocess/context/BACKLOG.md`132 already has rows (a brownfield project just migrated or133 reverse-engineered): point at134 `python3 tools/github-integration/flow.py preflight` (read-only135 checks) and `... flow.py initial-sync` (bulk onboarding) rather136 than syncing items one by one.137138## Reconfigure flow (`.dia/config.toml` exists)1391401. **Read current state.** Parse `.dia/config.toml`, extract `mode`,141 `profile` (print `full (implicit)` when the field is absent), and142 `anchor_files`. Print the current state to the user.1431442. **Action question.** Use `AskUserQuestion` with these options:145 - **Change mode** (Recommended if user invoked the skill to146 toggle behavior).147 - **Change profile** (full <-> lean; updates the config field and148 refreshes the anchor blocks with the new profile).149 - **Refresh anchor blocks** (rewrites blocks against the current150 mode and profile, useful after a template update).151 - **Add or remove anchor files** (multi-step, see below).152 - **Deactivate (set mode to off and remove all anchor blocks)**.153 - **Cancel**.154155 Each option requires a `+ Pro:` and `- Con:` line.1561573. **Apply the chosen action.**158159 - **Change mode**: ask new mode (Pro/Con per option), update160 `.dia/config.toml`, run161 `python3 tools/dia-setup/anchor.py write --mode <new>`. When the162 new mode is `github-sync` and a project number is configured (or163 the user supplies one now), run the same `gh project view`164 pre-flight as activation step 4 and surface the result.165 - **Refresh anchor blocks**: run anchor.py write with the166 existing mode and existing anchor_files list.167 - **Add or remove anchor files**: ask multiSelect with all known168 targets, mark currently anchored files as pre-selected, write169 the diff (anchor.py write for new entries, anchor.py remove170 for unselected entries), update `.dia/config.toml`.171 - **Deactivate**: write `mode = "off"` to `.dia/config.toml`,172 run `python3 tools/dia-setup/anchor.py remove --all`. Anchor173 files list in the config remains, so a later reactivation174 restores the same surface.175 - **Cancel**: do nothing.1761774. **Confirmation.** Print which files changed and what the new178 state is.179180## Verification (built-in self-check)181182After every write or reconfigure flow, the skill calls183`python3 tools/dia-setup/anchor.py verify` and reports the result.184A non-zero exit code signals drift between `.dia/config.toml` and185the actual anchor blocks; if it occurs, surface the missing files186to the user and offer a refresh.187188## Idempotency189190The skill must be safe to invoke multiple times. The anchor script191detects existing blocks via a stable marker pair and replaces them192in place. Running `/dia-setup` twice with the same answers must193produce no diff in the working tree.194195## Hand-off196197`/dia-setup` does not invoke any phase skill, does not write to198`BACKLOG.md`, and does not start any handoff ritual. After a199successful run, the user typically continues with `/dia-guide`200for orientation or with a phase skill of their choice.201202## Files written or removed203204- `.dia/config.toml` (created or updated)205- one or more of: `CLAUDE.md`, `AGENTS.md`, `GEMINI.md`,206 `.cursorrules`, `.github/copilot-instructions.md`,207 `.windsurfrules` (anchor block written, replaced, or removed)208209The skill never touches files outside this list.210211## Settings file format212213```toml214mode = "git-only"215profile = "full"216217anchor_files = [218 "CLAUDE.md",219 "AGENTS.md",220 "GEMINI.md",221 ".cursorrules",222]223224source_branch = "develop"225226[github]227project_number = 7228status_field = "Status"229project_owner = ""230```231232`mode` is the only mandatory field. `profile` defaults to `full`233when absent (zero behavior change for existing configs); `lean`234makes only architecture artifacts and backlog state binding.235`anchor_files` defaults to the list of files that carry a managed236anchor block. `source_branch` controls the base for new feature237branches `/dia-guide` creates. Pass the profile to238`anchor.py write --mode <m> --profile <p>` so the anchor block239renders it.240241The `[github]` section is honored only when `mode = "github-sync"`:242243- `project_number` is the GitHub ProjectV2 number (the integer at244 the end of the project URL, e.g. 7 for245 `github.com/users/X/projects/7`). Leave 0 to skip246 project-status mirroring; the issue itself still syncs, only247 the project Status field stays untouched.248- `status_field` is the single-select field name on the project249 that represents item status. Default `Status`.250- `project_owner` is optional. When empty, flow.py resolves the251 owner from the repository. Set explicitly when the project lives252 under a different owner than the repo (org-level projects, etc.).253254## Reference255256Full anchor format and idempotency rules:257`skills/dia-setup/references/anchor-format.md`.