@event4u/agent-config 2.14.0 → 2.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: agents:user-accept
3
+ tier: 2
4
+ cluster: agents
5
+ sub: user
6
+ description: Apply a buffered observation to .agent-user.md after explicit user confirmation; bumps last_updated and drops the applied observations from the buffer.
7
+ disable-model-invocation: true
8
+ suggestion:
9
+ eligible: false
10
+ rationale: "Mutates .agent-user.md — only run from /agents user review or explicit user invocation."
11
+ ---
12
+
13
+ # /agents user accept
14
+
15
+ Apply a buffered observation from
16
+ [`.agent-user.observations.jsonl`](../../../../../docs/contracts/agent-user-schema.md#observation-buffer)
17
+ to `.agent-user.md` after explicit confirmation.
18
+
19
+ Use when:
20
+
21
+ - `/agents user review` surfaced an observation worth applying.
22
+ - The user invoked `/agents user accept <field>` directly.
23
+
24
+ Never runs autonomously — always asks before writing.
25
+
26
+ ## Steps
27
+
28
+ ### 1. Preconditions
29
+
30
+ ```bash
31
+ ls .agent-user.md 2>/dev/null
32
+ ls .agent-user.observations.jsonl 2>/dev/null
33
+ ```
34
+
35
+ Either missing → print "Run `/agents user init` and accumulate
36
+ observations first." and stop.
37
+
38
+ ### 2. Resolve target field
39
+
40
+ | Invocation | Resolved field |
41
+ |---|---|
42
+ | Handed off from `/agents user review` option 1 | The most-frequent field |
43
+ | `/agents user accept <field>` | `<field>` (must match the schema enum) |
44
+ | `/agents user accept` with no arg | Print the field list, ask which |
45
+
46
+ Invalid field → print the schema enum and stop.
47
+
48
+ ### 3. Compute proposed change
49
+
50
+ For the resolved field:
51
+
52
+ 1. Read every matching observation from the buffer.
53
+ 2. Pick the **latest** `suggest` value (most recent `ts` wins).
54
+ 3. Read the current value from `.agent-user.md`.
55
+ 4. If they match, print "No change — current value already matches
56
+ the latest observation." and skip to step 6.
57
+
58
+ ### 4. Confirm
59
+
60
+ ```
61
+ Apply this change to .agent-user.md?
62
+
63
+ field : {field}
64
+ current : "{current_value}"
65
+ proposed: "{proposed_value}"
66
+ source : {n} observations between {oldest_ts} and {newest_ts}
67
+ evidence: {latest_evidence, truncated to 200 chars}
68
+
69
+ > 1. Apply
70
+ > 2. Skip — keep current value, drop these observations from the buffer
71
+ > 3. Cancel — leave .agent-user.md and buffer untouched
72
+ ```
73
+
74
+ One question per turn. Wait for the user's number.
75
+
76
+ ### 5. Write
77
+
78
+ On `1. Apply`:
79
+
80
+ 1. Rewrite the targeted field in `.agent-user.md` frontmatter.
81
+ Preserve every other field byte-for-byte (use a YAML round-trip
82
+ loader that keeps formatting).
83
+ 2. Bump `last_updated` to today (ISO `YYYY-MM-DD`).
84
+ 3. Validate the result: schema present, ≤100 lines, privacy floor
85
+ clean. Any violation → roll back and print the error.
86
+ 4. Drop **all** applied observations for that field from the buffer
87
+ (rewrite the JSONL minus matching lines).
88
+
89
+ On `2. Skip`: leave `.agent-user.md` untouched but still drop the
90
+ observations for that field from the buffer.
91
+
92
+ On `3. Cancel`: stop without any write.
93
+
94
+ ### 6. Confirm
95
+
96
+ ```
97
+ ✅ .agent-user.md updated ({field}: "{old}" → "{new}", last_updated: YYYY-MM-DD).
98
+ Buffer: {n} observations removed, {m} remaining.
99
+ ```
100
+
101
+ Do NOT commit. Do NOT auto-chain to a second field.
102
+
103
+ ## Rules
104
+
105
+ - One field per invocation. The user runs `/agents user accept` again
106
+ for the next field.
107
+ - Never write without explicit confirmation in step 4.
108
+ - Never bypass the privacy-floor scan, even if the buffer writer
109
+ already redacted.
110
+ - Mirror the user's language for prompts per
111
+ [`language-and-tone`](../../../../.agent-src/rules/language-and-tone.md).
112
+
113
+ ## See also
114
+
115
+ - Schema + buffer contract: [`agent-user-schema § Observation buffer`](../../../../../docs/contracts/agent-user-schema.md#observation-buffer).
116
+ - Parent: [`/agents user`](../user.md).
117
+ - Sibling: [`/agents user review`](review.md), [`/agents user update`](update.md).
@@ -0,0 +1,163 @@
1
+ ---
2
+ name: agents:user-init
3
+ tier: 2
4
+ cluster: agents
5
+ sub: user
6
+ description: Interactive interview that creates the project-root .agent-user.md from the locked v1 schema (name, language, role, style, voice_sample).
7
+ disable-model-invocation: true
8
+ suggestion:
9
+ eligible: false
10
+ rationale: "User-persona bootstrap — only deliberately, never auto-suggested."
11
+ ---
12
+
13
+ # /agents user init
14
+
15
+ Short interactive interview that creates **`.agent-user.md`** at the
16
+ project root from the locked v1 schema in
17
+ [`docs/contracts/agent-user-schema.md`](../../../../../docs/contracts/agent-user-schema.md).
18
+
19
+ Use when:
20
+
21
+ - The user wants the agent to address them by name / nickname / role.
22
+ - A fresh consumer project does not yet have `.agent-user.md`.
23
+
24
+ Refuses to overwrite an existing file without `--force`.
25
+
26
+ ## Steps
27
+
28
+ ### 1. Precondition checks
29
+
30
+ ```bash
31
+ ls .agent-user.md 2>/dev/null
32
+ ls docs/contracts/agent-user-schema.md 2>/dev/null
33
+ ```
34
+
35
+ | State | Action |
36
+ |---|---|
37
+ | `.agent-user.md` missing | Proceed |
38
+ | `.agent-user.md` exists, no `--force` | Abort; offer `/agents user update` instead |
39
+ | `.agent-user.md` exists, `--force` set | Proceed (will overwrite); back up to `.agent-user.md.bak` first |
40
+ | Schema contract missing | Abort with "package not installed / out of date" hint |
41
+
42
+ ### 2. Pre-fill from `.agent-settings.yml`
43
+
44
+ If `.agent-settings.yml` exists, read `personal.user_name` and offer
45
+ it as the default for `identity.name`. Do **not** read anything else —
46
+ the persona file is a separate primitive.
47
+
48
+ ### 3. Interview (one question per turn, numbered options)
49
+
50
+ Ask in this order. Each answer drives one frontmatter field.
51
+
52
+ 1. **Name** — required.
53
+ `Wie soll ich dich ansprechen? (Name)` / `What name should I use?`
54
+ Default: pre-fill from step 2 if available.
55
+
56
+ 2. **Nickname** — optional.
57
+ `Bevorzugter Spitzname für den Chat? (leer = wie Name)` /
58
+ `Preferred chat nickname? (blank = same as name)`
59
+
60
+ 3. **Language** — required, BCP-47-ish.
61
+ ```
62
+ > 1. de — Deutsch
63
+ > 2. en — English
64
+ > 3. other — type the code (e.g. "fr", "es")
65
+ ```
66
+ Default: detect from the user's last message.
67
+
68
+ 4. **Role** — required, short free-form.
69
+ `Kurze Rollenbeschreibung (z. B. "founder/engineer", "product manager", "designer")` /
70
+ `Short role label`
71
+
72
+ 5. **Style — formality**.
73
+ ```
74
+ > 1. informal — Du / first-name (default)
75
+ > 2. formal — Sie / full name
76
+ ```
77
+
78
+ 6. **Style — pace**.
79
+ ```
80
+ > 1. pragmatic — balanced (default)
81
+ > 2. thorough — more verification, longer replies
82
+ > 3. rapid — shorter replies, fewer caveats
83
+ ```
84
+
85
+ 7. **Voice sample** — required.
86
+ `Paste eine typische Nachricht von dir (1–3 Sätze, im normalen Schreibstil)` /
87
+ `Paste one typical message of yours (1–3 sentences, your normal style)`
88
+
89
+ ### 4. Privacy-floor sanity check
90
+
91
+ Before writing, scan the collected `voice_sample` and `role` for:
92
+
93
+ - Credentials, API keys, tokens, passwords (regex on common formats).
94
+ - Third-party full names that look like contacts (heuristic: capitalized first+last pair near words like "wife", "boss", "kid", "Frau", "Mann", "Chef").
95
+ - Financial figures (currency symbols + numbers).
96
+ - Health/legal status keywords.
97
+
98
+ Hit → surface the line and ask the user to redact before proceeding.
99
+ Per [`agent-user-schema § Explicit exclusions`](../../../../../docs/contracts/agent-user-schema.md#explicit-exclusions).
100
+
101
+ ### 5. Render and write
102
+
103
+ Render the frontmatter exactly as locked in the schema. Add an empty
104
+ `# Notes` body. Set `last_updated` to today (ISO date).
105
+
106
+ ```yaml
107
+ ---
108
+ version: 1
109
+ identity:
110
+ name: "..."
111
+ nickname: "..." # omit if blank
112
+ language: "..."
113
+ role: "..."
114
+ style:
115
+ formality: "..."
116
+ pace: "...""
117
+ voice_sample: |
118
+ ...
119
+ last_updated: "YYYY-MM-DD"
120
+ ---
121
+
122
+ # Notes
123
+ ```
124
+
125
+ Verify the rendered file is ≤100 lines (it will be — empty Notes body)
126
+ before writing to `.agent-user.md`.
127
+
128
+ ### 6. Gitignore check
129
+
130
+ If the consumer `.gitignore` does not yet contain `.agent-user.md`,
131
+ print a one-line nudge:
132
+
133
+ ```
134
+ ℹ️ .agent-user.md is not yet in your .gitignore. Run /sync-gitignore to add it.
135
+ ```
136
+
137
+ The package-managed block adds it automatically; this nudge only
138
+ fires when the block is missing or out of date.
139
+
140
+ ### 7. Confirm
141
+
142
+ Print the file path and a one-line summary:
143
+
144
+ ```
145
+ ✅ .agent-user.md written ({n} lines).
146
+ identity: {nickname or name} · language: {lang} · role: {role} · style: {formality}/{pace}
147
+ ```
148
+
149
+ Do NOT commit. Do NOT run any other `/agents user` sub-sub-command.
150
+
151
+ ## Rules
152
+
153
+ - One question per turn. Never batch.
154
+ - Numbered options where the answer is enum-like (per
155
+ [`user-interaction`](../../../../.agent-src/rules/user-interaction.md)).
156
+ - Never invent fields not in the locked v1 schema.
157
+ - Never write third-party PII even if the user pastes it — surface
158
+ and ask for redaction.
159
+
160
+ ## See also
161
+
162
+ - Schema: [`agent-user-schema`](../../../../../docs/contracts/agent-user-schema.md).
163
+ - Parent: [`/agents user`](../user.md).
@@ -0,0 +1,107 @@
1
+ ---
2
+ name: agents:user-review
3
+ tier: 2
4
+ cluster: agents
5
+ sub: user
6
+ description: List buffered observations from .agent-user.observations.jsonl with numbered options to inspect or accept individually.
7
+ disable-model-invocation: true
8
+ suggestion:
9
+ eligible: true
10
+ trigger_description: "review user observations, see what the agent learned about me, list buffered persona updates"
11
+ trigger_context: "user wants to see what the agent has buffered about their preferences before applying changes"
12
+ ---
13
+
14
+ # /agents user review
15
+
16
+ List the buffered observations in `.agent-user.observations.jsonl`
17
+ and let the user choose which to inspect or accept.
18
+
19
+ Use when:
20
+
21
+ - You want to see what the agent has learned about your preferences.
22
+ - You suspect `.agent-user.md` is out of date and want a curated
23
+ diff before editing.
24
+ - You want to dismiss observations the agent collected.
25
+
26
+ Read-only by itself — actual changes go through
27
+ [`/agents user accept`](accept.md) or
28
+ [`/agents user update`](update.md).
29
+
30
+ ## Steps
31
+
32
+ ### 1. Locate buffer
33
+
34
+ ```bash
35
+ ls .agent-user.observations.jsonl 2>/dev/null
36
+ ```
37
+
38
+ | State | Action |
39
+ |---|---|
40
+ | Missing or empty | Print "No buffered observations. The agent has not learned anything new." and stop |
41
+ | Present | Proceed |
42
+
43
+ ### 2. Parse + group
44
+
45
+ Read every line as JSON. Drop malformed lines silently (one-line
46
+ warning at the end with the count). Group by `field`:
47
+
48
+ ```
49
+ .agent-user.observations.jsonl — {n} observations across {k} fields
50
+
51
+ 1. style.pace ({n}× since {oldest_ts})
52
+ latest suggest: "rapid" — evidence: user said 'mach kürzer' 3× this session
53
+ 2. identity.nickname ({n}× since {oldest_ts})
54
+ latest suggest: "Matze" — evidence: user signed last 3 messages "— Matze"
55
+ 3. language ({n}× since {oldest_ts})
56
+ latest suggest: "de" — evidence: last 12 messages in German, .agent-user.md says "en"
57
+ ```
58
+
59
+ Sort by frequency (most observations first), then by recency.
60
+
61
+ ### 3. Ask
62
+
63
+ ```
64
+ > 1. Accept the most-frequent suggestion ({field} → {value})
65
+ > 2. Inspect a specific field
66
+ > 3. Clear the buffer (discard all)
67
+ > 4. Cancel
68
+ ```
69
+
70
+ | Choice | Action |
71
+ |---|---|
72
+ | 1 | Hand off to [`/agents user accept`](accept.md) with the chosen field |
73
+ | 2 | Print every observation for that field with evidence + ts, then re-ask |
74
+ | 3 | Truncate `.agent-user.observations.jsonl` to zero bytes; print confirmation |
75
+ | 4 | Stop without changes |
76
+
77
+ One question per turn. Wait for the user's number.
78
+
79
+ ### 4. Privacy-floor verify
80
+
81
+ Before printing any observation's `evidence` text, scan it for the
82
+ [exclusions list](../../../../../docs/contracts/agent-user-schema.md#explicit-exclusions).
83
+ Match → replace the offending substring with `[redacted]` in the
84
+ rendered output.
85
+
86
+ The buffer writer is expected to redact on write, but treat this as
87
+ defense in depth — the user must never see leaked third-party PII or
88
+ credentials from a downstream agent's bad write.
89
+
90
+ ### 5. Stop
91
+
92
+ Do NOT commit. Do NOT auto-chain past one user-selected action per
93
+ turn.
94
+
95
+ ## Rules
96
+
97
+ - Read-only on `.agent-user.md`. Only `accept` writes to the persona
98
+ file.
99
+ - Buffer is the only mutable artefact (truncate via option 3).
100
+ - Mirror the user's language for prompts per
101
+ [`language-and-tone`](../../../../.agent-src/rules/language-and-tone.md).
102
+
103
+ ## See also
104
+
105
+ - Schema + buffer contract: [`agent-user-schema § Observation buffer`](../../../../../docs/contracts/agent-user-schema.md#observation-buffer).
106
+ - Parent: [`/agents user`](../user.md).
107
+ - Sibling: [`/agents user accept`](accept.md), [`/agents user update`](update.md).
@@ -0,0 +1,109 @@
1
+ ---
2
+ name: agents:user-show
3
+ tier: 2
4
+ cluster: agents
5
+ sub: user
6
+ description: Read-only render of .agent-user.md — prints the persona summary the host agent loads at session start.
7
+ disable-model-invocation: true
8
+ suggestion:
9
+ eligible: true
10
+ trigger_description: "show user persona, render .agent-user.md, print who the user is"
11
+ trigger_context: "user wants to see what's currently in .agent-user.md without editing"
12
+ ---
13
+
14
+ # /agents user show
15
+
16
+ Read-only render of the project-root `.agent-user.md` per
17
+ [`docs/contracts/agent-user-schema.md`](../../../../../docs/contracts/agent-user-schema.md).
18
+
19
+ Use when:
20
+
21
+ - You want to see what persona the host agent currently loads.
22
+ - You want to confirm `last_updated` is fresh (≤90 days).
23
+ - You want a paste-ready summary for handoff or onboarding.
24
+
25
+ Does **not** edit, observe, or buffer anything. Pure read.
26
+
27
+ ## Steps
28
+
29
+ ### 1. Locate the file
30
+
31
+ ```bash
32
+ ls .agent-user.md 2>/dev/null
33
+ ```
34
+
35
+ | State | Action |
36
+ |---|---|
37
+ | Present | Proceed |
38
+ | Missing | Print "No `.agent-user.md` found at project root. Run `/agents user init` to create one." and stop |
39
+
40
+ ### 2. Parse frontmatter
41
+
42
+ Parse the YAML frontmatter and the body (everything after the second
43
+ `---`). Validate against the locked v1 schema:
44
+
45
+ - `version` is `1`.
46
+ - `identity.name`, `language`, `role`, `style.formality`, `style.pace`,
47
+ `voice_sample`, `last_updated` are all present.
48
+ - File is ≤100 lines total.
49
+
50
+ Any violation → print a one-line warning identifying the missing /
51
+ malformed field and continue with the render (so the user can fix it
52
+ via `/agents user update`).
53
+
54
+ ### 3. Render
55
+
56
+ Print the persona in this exact shape:
57
+
58
+ ```
59
+ .agent-user.md ({n} lines, last_updated: YYYY-MM-DD{staleness_marker})
60
+
61
+ Identity : {nickname or name} ({name} if nickname is set)
62
+ Language : {language}
63
+ Role : {role}
64
+ Style : {formality} · {pace}
65
+
66
+ Voice sample
67
+ ─────────────
68
+ {voice_sample, indented 2 spaces}
69
+
70
+ Notes
71
+ ─────────────
72
+ {body, indented 2 spaces; "(empty)" if no notes}
73
+ ```
74
+
75
+ Where `{staleness_marker}` is:
76
+
77
+ - empty when `last_updated` is within 90 days.
78
+ - ` ⚠️ >90 days` when older (per the schema staleness rule).
79
+
80
+ ### 4. Loader hint
81
+
82
+ If the host-agent loader has NOT yet picked up the file this session
83
+ (detect via session memory if available), print one line:
84
+
85
+ ```
86
+ ℹ️ Host agent will load this on next session start. Restart your chat to apply.
87
+ ```
88
+
89
+ Otherwise omit — agent already knows.
90
+
91
+ ### 5. Stop
92
+
93
+ Do NOT chain to other `/agents user *` commands. Do NOT commit.
94
+
95
+ ## Rules
96
+
97
+ - Read-only. Never write `.agent-user.md` from this command.
98
+ - Never print fields the schema does not define — even if they exist
99
+ in the file. (Forward-compat: an unexpected field is a warning, not
100
+ a render target.)
101
+ - Mirror the user's language for the rendered labels (`Identity` /
102
+ `Identität`, `Language` / `Sprache`, etc.) per
103
+ [`language-and-tone`](../../../../.agent-src/rules/language-and-tone.md).
104
+
105
+ ## See also
106
+
107
+ - Schema: [`agent-user-schema`](../../../../../docs/contracts/agent-user-schema.md).
108
+ - Parent: [`/agents user`](../user.md).
109
+ - Sibling: [`/agents user init`](init.md), [`/agents user update`](update.md).
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: agents:user-update
3
+ tier: 2
4
+ cluster: agents
5
+ sub: user
6
+ description: Open .agent-user.md in the user's IDE for manual edit; validates schema and 100-line cap on save.
7
+ disable-model-invocation: true
8
+ suggestion:
9
+ eligible: true
10
+ trigger_description: "edit user persona, update .agent-user.md, change nickname, change language, refresh voice sample"
11
+ trigger_context: "user wants to manually edit the persona file rather than answer interview questions"
12
+ ---
13
+
14
+ # /agents user update
15
+
16
+ Open `.agent-user.md` in the user's IDE for a manual edit, then
17
+ validate against the locked v1 schema on save.
18
+
19
+ Use when:
20
+
21
+ - The user knows exactly what they want to change (nickname, language,
22
+ voice sample) and doesn't need the interview flow.
23
+ - The user wants to edit the freeform `# Notes` body.
24
+ - `/agents user show` flagged a malformed field.
25
+
26
+ For agent-driven changes from buffered observations, use
27
+ [`/agents user review`](review.md) → [`/agents user accept`](accept.md).
28
+
29
+ ## Steps
30
+
31
+ ### 1. Precondition
32
+
33
+ ```bash
34
+ ls .agent-user.md 2>/dev/null
35
+ ```
36
+
37
+ Missing → print "No `.agent-user.md` found. Run `/agents user init`
38
+ first." and stop.
39
+
40
+ ### 2. Open in IDE
41
+
42
+ Use the [`file-editor`](../../../../.agent-src/skills/file-editor/SKILL.md)
43
+ skill — reads `personal.ide` from `.agent-settings.yml` (vscode,
44
+ phpstorm, cursor, etc.) and opens the file.
45
+
46
+ If `personal.ide` is unset or `auto_open_files: false`, print:
47
+
48
+ ```
49
+ ℹ️ Open .agent-user.md in your editor and re-run /agents user update --validate when done.
50
+ ```
51
+
52
+ ### 3. Wait for save → validate
53
+
54
+ When called with `--validate` (or after the user confirms "done"):
55
+
56
+ 1. Read `.agent-user.md`.
57
+ 2. Parse frontmatter; check every required field per
58
+ [`agent-user-schema § Field reference`](../../../../../docs/contracts/agent-user-schema.md#field-reference).
59
+ 3. Check file size ≤100 lines.
60
+ 4. Run the privacy-floor scan (same as `init` step 4): credentials,
61
+ third-party PII, financial figures, health/legal status.
62
+
63
+ | Result | Action |
64
+ |---|---|
65
+ | All checks pass | Bump `last_updated` to today; print one-line confirmation |
66
+ | Schema violation | Print the offending field + line, ask user to fix |
67
+ | >100 lines | Print line count, ask user to trim |
68
+ | Privacy-floor hit | Print the suspect line, ask user to redact |
69
+
70
+ ### 4. Bump `last_updated`
71
+
72
+ On successful validation, rewrite the `last_updated` field with
73
+ today's date (ISO `YYYY-MM-DD`). Preserve all other content
74
+ verbatim.
75
+
76
+ ### 5. Confirm
77
+
78
+ ```
79
+ ✅ .agent-user.md validated ({n} lines, last_updated: YYYY-MM-DD).
80
+ ```
81
+
82
+ Do NOT commit. Do NOT chain to another `/agents user *` command.
83
+
84
+ ## Rules
85
+
86
+ - Never edit `.agent-user.md` directly from this command except for
87
+ the `last_updated` bump in step 4. All other edits go through the
88
+ user's IDE.
89
+ - Never write third-party PII even if it appears in the user's edit —
90
+ re-surface and ask for redaction.
91
+ - Mirror the user's language for all prompts per
92
+ [`language-and-tone`](../../../../.agent-src/rules/language-and-tone.md).
93
+
94
+ ## See also
95
+
96
+ - Schema: [`agent-user-schema`](../../../../../docs/contracts/agent-user-schema.md).
97
+ - Parent: [`/agents user`](../user.md).
98
+ - Sibling: [`/agents user init`](init.md), [`/agents user show`](show.md), [`/agents user review`](review.md).
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: agents:user
3
+ tier: 2
4
+ cluster: agents
5
+ sub: user
6
+ description: User-persona file (.agent-user.md) — interview, render, and maintain who the user is and how they want to be addressed.
7
+ disable-model-invocation: true
8
+ type: orchestrator
9
+ suggestion:
10
+ eligible: true
11
+ trigger_description: "create user persona, render .agent-user.md, review observations, accept observations, edit user file"
12
+ trigger_context: "user wants to bootstrap or maintain the .agent-user.md persona file (name, language, role, style, voice sample)"
13
+ ---
14
+
15
+ # /agents user
16
+
17
+ Sub-dispatcher for the user-persona file
18
+ [`/.agent-user.md`](../../../docs/contracts/agent-user-schema.md) — a
19
+ single, project-root, gitignored Markdown file that captures who the
20
+ user is and how they want the agent to address them.
21
+
22
+ **Why this is its own cluster:** `AGENTS.md` describes the *project*
23
+ to the agent. `.agent-user.md` describes the *user* to the agent.
24
+ Two distinct primitives — same `/agents` family for discoverability,
25
+ separate sub-commands for separation of concerns.
26
+
27
+ ## Sub-sub-commands
28
+
29
+ | Sub-sub-command | Routes to | Purpose |
30
+ |---|---|---|
31
+ | `/agents user init` | `commands/agents/user/init.md` | Short interview → creates `.agent-user.md` |
32
+ | `/agents user show` | `commands/agents/user/show.md` | Read-only render of the persona |
33
+ | `/agents user review` | `commands/agents/user/review.md` | List buffered observations from `.agent-user.observations.jsonl` |
34
+ | `/agents user accept` | `commands/agents/user/accept.md` | Apply a buffered observation with confirmation |
35
+ | `/agents user update` | `commands/agents/user/update.md` | Open in IDE for manual edit; validate on save |
36
+
37
+ Schema contract:
38
+ [`docs/contracts/agent-user-schema.md`](../../../docs/contracts/agent-user-schema.md).
39
+
40
+ ## Dispatch
41
+
42
+ 1. Parse the user's argument: `/agents user <sub-sub-command> [args]`.
43
+ 2. Look up the sub-sub-command in the table above.
44
+ 3. Load the routed file and follow its `## Steps` section verbatim
45
+ with the remaining args.
46
+ 4. Unknown or missing sub-sub-command → print the table above and
47
+ ask which one. **One sub-sub-command per turn**; do not chain.
48
+
49
+ ## Rules
50
+
51
+ - **Do NOT commit, push, or open a PR** unless the sub-sub-command
52
+ explicitly authorizes it.
53
+ - **Do NOT write third-party PII** — names, dates, financial figures,
54
+ health/legal status. See the
55
+ [exclusions list](../../../docs/contracts/agent-user-schema.md#explicit-exclusions).
56
+ - **Do NOT introduce network code** in this package. External
57
+ enrichment is rejected for v1 — see the
58
+ [determinism floor](../../../docs/contracts/agent-user-schema.md#determinism-floor).
59
+ - **Edit `.agent-src.uncompressed/` only.** `.agent-src/` and
60
+ `.augment/` regenerate from source.
61
+
62
+ ## See also
63
+
64
+ - [`agent-user-schema`](../../../docs/contracts/agent-user-schema.md) — locked v1 frontmatter and field reference.
65
+ - [`/agents`](../AGENTS.md) — parent cluster.
66
+ - [`/agents init`](init.md) — project-side bootstrap (separate primitive).
@@ -28,6 +28,7 @@ agent infrastructure (rules, skills, pointers).
28
28
  | `/agents init` | `commands/agents/init.md` | Bootstrap the agent layer — create `AGENTS.md` + tool stubs from the canonical template |
29
29
  | `/agents optimize` | `commands/agents/optimize.md` | Refactor `AGENTS.md` to the Thin-Root contract; propagate to multi-tool stubs |
30
30
  | `/agents audit` | `commands/agents/audit.md` | Read-only health check — token overhead, rule triggers, AGENTS.md health, stale references |
31
+ | `/agents user` | `commands/agents/user.md` | User-persona file (`.agent-user.md`) — interview, render, maintenance |
31
32
 
32
33
  Sub-command names match the locked contract in
33
34
  [`docs/contracts/command-clusters.md`](../docs/contracts/command-clusters.md).
@@ -43,6 +44,7 @@ Sub-command names match the locked contract in
43
44
  > 1. init — bootstrap AGENTS.md + tool stubs
44
45
  > 2. optimize — refactor AGENTS.md to the Thin-Root contract
45
46
  > 3. audit — read-only health check on the agent layer
47
+ > 4. user — manage `.agent-user.md` (user-persona file)
46
48
 
47
49
  ## Rules
48
50
 
@@ -39,7 +39,7 @@ schema_version: 1
39
39
  # CI guard: a release bump of `package.json` must update this value
40
40
  # in lockstep — see scripts/check_template_pin_drift.py (road-to-
41
41
  # portable-runtime-and-update-check P3.3).
42
- agent_config_version: "2.13.0"
42
+ agent_config_version: "2.14.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project:
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Shared agent configuration \u2014 skills for AI coding tools (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI).",
9
- "version": "2.14.0",
9
+ "version": "2.15.0",
10
10
  "keywords": [
11
11
  "agent-config",
12
12
  "skills",
@@ -53,6 +53,12 @@
53
53
  "./.claude/skills/agents-init",
54
54
  "./.claude/skills/agents-md-thin-root",
55
55
  "./.claude/skills/agents-optimize",
56
+ "./.claude/skills/agents-user",
57
+ "./.claude/skills/agents-user-accept",
58
+ "./.claude/skills/agents-user-init",
59
+ "./.claude/skills/agents-user-review",
60
+ "./.claude/skills/agents-user-show",
61
+ "./.claude/skills/agents-user-update",
56
62
  "./.claude/skills/ai-council",
57
63
  "./.claude/skills/analysis-autonomous-mode",
58
64
  "./.claude/skills/analysis-skill-router",
package/CHANGELOG.md CHANGED
@@ -607,6 +607,35 @@ our recommendation order, not its support status.
607
607
  > that forces a new era split (`# Era: 2.12.x`, etc.) — see
608
608
  > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
609
609
 
610
+ ## [2.15.0](https://github.com/event4u-app/agent-config/compare/2.14.0...2.15.0) (2026-05-15)
611
+
612
+ ### Features
613
+
614
+ * **agent-user:** add /agents user command cluster (init, show, review, accept, update) ([15d53d8](https://github.com/event4u-app/agent-config/commit/15d53d8d9a2365b044831cd42127e247a70d7e20))
615
+ * **agent-user:** add v1 schema contract for .agent-user.md persona file ([64f4eab](https://github.com/event4u-app/agent-config/commit/64f4eab62ccf6a2606fbca0c56d398372c05a7a0))
616
+
617
+ ### Bug Fixes
618
+
619
+ * **agent-user:** inline council-reference summary per no-roadmap-references ([ee4d3ce](https://github.com/event4u-app/agent-config/commit/ee4d3cedf9f4429450d21ca5badc2ae5c2ecaaed))
620
+ * **agent-user:** drop roadmap references per no-roadmap-references rule ([c8ade8d](https://github.com/event4u-app/agent-config/commit/c8ade8d7c5b495e0e4295aa0cb801e59076ee0b0))
621
+ * **agent-user:** adjust keep-beta-until to fit 90-day window ([801b365](https://github.com/event4u-app/agent-config/commit/801b365117a2d1efb4505e504bdd730e4cbbc217))
622
+
623
+ ### Documentation
624
+
625
+ * **persona:** README section + agent-settings legacy-fallback note ([4da7629](https://github.com/event4u-app/agent-config/commit/4da7629f1f0b5a35a64d0a861040ad8639a66ebe))
626
+ * **roadmap:** mark step-3-agent-user-persona phases as in-progress ([f29d3bc](https://github.com/event4u-app/agent-config/commit/f29d3bce2380c0ea9c67e6094540b88d920ed9ff))
627
+
628
+ ### Chores
629
+
630
+ * **roadmap:** close out + archive step-3-agent-user-persona ([09c0229](https://github.com/event4u-app/agent-config/commit/09c0229efd67af9cad7b2ca8202f4caa351d028d))
631
+ * **ownership:** regenerate file-ownership-matrix for /agents user ([128890d](https://github.com/event4u-app/agent-config/commit/128890d880584704b4842a398555dd979ae54462))
632
+ * **docs:** bump command count from 109 to 115 ([f8c61b1](https://github.com/event4u-app/agent-config/commit/f8c61b1d0ec48034e0d66e8d32534056ca4aa1f0))
633
+ * **template:** bump agent_config_version pin to 2.14.0 ([fcb885f](https://github.com/event4u-app/agent-config/commit/fcb885fd19bdbca46ef91ec4d5e723cc6c186c6d))
634
+ * **index:** regenerate agents/index.md + docs/catalog.md for /agents user ([56b281d](https://github.com/event4u-app/agent-config/commit/56b281d69960d3e57adbd24b9ec6fd24fc1a5aff))
635
+ * **agent-user:** regenerate compressed sources + claude tool stubs ([f79b6d1](https://github.com/event4u-app/agent-config/commit/f79b6d1cfcf1caccde4a723ad779c65d9ed87198))
636
+
637
+ Tests: 4352 (+12 since 2.14.0)
638
+
610
639
  ## [2.14.0](https://github.com/event4u-app/agent-config/compare/2.13.0...2.14.0) (2026-05-15)
611
640
 
612
641
  ### Features
package/README.md CHANGED
@@ -7,7 +7,7 @@ Give your AI agents an audit-disciplined orchestration contract — testing, Git
7
7
  > Your agent picks up the project's stack, runs tests, prepares PRs, fixes CI — and follows your team's coding standards while doing it. Stack-aware skill sets ship for PHP (Laravel · Symfony · Zend/Laminas), JavaScript (Next.js · React · Node), and cross-stack concerns (API · testing · security · observability).
8
8
 
9
9
  <p align="center">
10
- <strong>210 Skills</strong> · <strong>67 Rules</strong> · <strong>109 Commands</strong> · <strong>72 Guidelines</strong> · <strong>22 Personas</strong> · <strong>5 Advisors</strong> · <strong>8 AI Tools</strong>
10
+ <strong>210 Skills</strong> · <strong>67 Rules</strong> · <strong>115 Commands</strong> · <strong>72 Guidelines</strong> · <strong>22 Personas</strong> · <strong>5 Advisors</strong> · <strong>8 AI Tools</strong>
11
11
  </p>
12
12
 
13
13
  ---
@@ -524,7 +524,7 @@ kernel set: [`docs/contracts/kernel-membership.md`](docs/contracts/kernel-member
524
524
  | [`/jira-ticket`](.agent-src/commands/jira-ticket.md) | Read ticket from branch, implement feature |
525
525
  | [`/compress`](.agent-src/commands/compress.md) | Compress skills for token efficiency |
526
526
 
527
- → [Browse all 109 active commands](.agent-src/commands/)
527
+ → [Browse all 115 active commands](.agent-src/commands/)
528
528
 
529
529
  ---
530
530
 
@@ -556,7 +556,7 @@ slash-commands) &nbsp; 📌 = informational marker only (no auto-discovery
556
556
  or manual wiring required)
557
557
 
558
558
  > **What this means in practice:** Claude Code gets the full project-scoped
559
- > package (rules + 210 skills + 109 native commands); Augment Code gets the
559
+ > package (rules + 210 skills + 115 native commands); Augment Code gets the
560
560
  > same content but only from a single global install at `~/.augment/`.
561
561
  > Cursor, Cline, Windsurf, Gemini CLI, GitHub Copilot, Roo Code, Codex CLI,
562
562
  > and Continue.dev only get the **rules** natively; skills and commands are
@@ -605,6 +605,21 @@ for the per-rule routing.
605
605
 
606
606
  ---
607
607
 
608
+ ## User persona (`.agent-user.md`)
609
+
610
+ A project-root `.agent-user.md` file captures who the user is — name,
611
+ primary language, role, work style, and a single voice sample — so the
612
+ agent can address them correctly from the first turn. The file is
613
+ gitignored by default, paste-only, and contains zero PII beyond what the
614
+ user explicitly volunteers. Schema is locked v1 in
615
+ [`docs/contracts/agent-user-schema.md`](docs/contracts/agent-user-schema.md).
616
+
617
+ Create it interactively with `/agents user init`. Inspect with
618
+ `/agents user show`. Updates happen only through the explicit
619
+ `review` / `accept` / `update` flow — never silent auto-writes. The
620
+ legacy `personal.user_name` key in `.agent-settings.yml` stays as a
621
+ fallback when `.agent-user.md` is absent.
622
+
608
623
  ## Core Principles
609
624
 
610
625
  - **Analyze before implementing** — no guessing, no blind edits
@@ -40,6 +40,10 @@ personal:
40
40
  open_edited_files: false
41
41
 
42
42
  # User's first name — used to address the user personally
43
+ # NOTE (legacy fallback): Source of truth for user identity is now the
44
+ # project-root `.agent-user.md` file, created via `/agents user init`.
45
+ # This key is retained for backward compatibility; the agent only falls
46
+ # back to it when `.agent-user.md` is absent.
43
47
  user_name: ""
44
48
 
45
49
  # rtk (Rust Token Killer) installed for output filtering (true, false)
@@ -18,6 +18,17 @@
18
18
  .agent-settings
19
19
  .agent-settings.backup.key-value
20
20
 
21
+ # Agent config — user-persona file (.agent-user.md, written by /agents user init)
22
+ # Contains who the user is and how they want to be addressed. Local-only by
23
+ # default; commit explicitly only via the deferred --shared opt-in.
24
+ # See docs/contracts/agent-user-schema.md.
25
+ .agent-user.md
26
+ .agent-user.md.bak
27
+
28
+ # Agent config — user-persona observation buffer (append-only JSONL,
29
+ # never shared). Feeds /agents user review / accept only.
30
+ .agent-user.observations.jsonl
31
+
21
32
  # Agent config — persistent chat history (crash recovery, never commit)
22
33
  /agents/.agent-chat-history
23
34
  /agents/.agent-chat-history.bak
@@ -143,7 +143,7 @@ note, package-internal path-swap, description budget, and the
143
143
  |---|---|---|
144
144
  | **Skills** | 210 | On-demand expertise — stack analysis (Laravel · Symfony · Zend / Laminas · Next.js · React · Node), testing, Docker, API design, security, observability, … |
145
145
  | **Rules** | 67 | Always-active constraints — coding standards, scope control, verification, language-and-tone, agent-authority |
146
- | **Commands** | 109 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/compress`, … |
146
+ | **Commands** | 115 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/compress`, … |
147
147
  | **Guidelines** | 72 | Reference material cited by skills — PHP patterns, Eloquent, Playwright, agent-infra, … |
148
148
  | **Templates** | 7 | Scaffolds for features, roadmaps, contexts, skills, overrides |
149
149
  | **Contexts** | 5 | Shared knowledge about the system itself |
package/docs/catalog.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # agent-config — Public Catalog
2
2
 
3
- Consumer-facing catalog of all **455 public artefacts** shipped by
3
+ Consumer-facing catalog of all **461 public artefacts** shipped by
4
4
  this package. Internal package-maintenance rules and deprecation shims
5
5
  are excluded.
6
6
 
@@ -291,7 +291,7 @@ are excluded.
291
291
  | rule | [`user-interaction`](../.agent-src/rules/user-interaction.md) | auto | Asking the user a question, presenting options, or summarizing progress — numbered-options Iron Law, single-recommendation rule, progress indicators |
292
292
  | rule | [`verify-before-complete`](../.agent-src/rules/verify-before-complete.md) | always | Verify before completion — run tests and quality tools before claiming done |
293
293
 
294
- ## Commands (109)
294
+ ## Commands (115)
295
295
 
296
296
  | kind | name | cluster | description |
297
297
  |---|---|---|---|
@@ -300,6 +300,12 @@ are excluded.
300
300
  | command | [`agents:audit`](../.agent-src/commands/agents/audit.md) | cluster: agents | Audit agent infrastructure — token overhead, rule triggers, AGENTS.md health, Capability-over-Structure adherence, stale references. Read-only, suggest-only, never auto-apply. |
301
301
  | command | [`agents:init`](../.agent-src/commands/agents/init.md) | cluster: agents | Initialize the agent layer for a consumer project — creates AGENTS.md and .github/copilot-instructions.md from package templates, auto-detects stack, never leaks other projects' identifiers. |
302
302
  | command | [`agents:optimize`](../.agent-src/commands/agents/optimize.md) | cluster: agents | Refactor AGENTS.md to the Thin-Root contract (caps, pointer ratio, capability bullets, emergency-triage) and propagate to tool stubs. Suggest only, never auto-apply. |
303
+ | command | [`agents:user-accept`](../.agent-src/commands/agents/user/accept.md) | cluster: agents | Apply a buffered observation to .agent-user.md after explicit user confirmation; bumps last_updated and drops the applied observations from the buffer. |
304
+ | command | [`agents:user-init`](../.agent-src/commands/agents/user/init.md) | cluster: agents | Interactive interview that creates the project-root .agent-user.md from the locked v1 schema (name, language, role, style, voice_sample). |
305
+ | command | [`agents:user-review`](../.agent-src/commands/agents/user/review.md) | cluster: agents | List buffered observations from .agent-user.observations.jsonl with numbered options to inspect or accept individually. |
306
+ | command | [`agents:user-show`](../.agent-src/commands/agents/user/show.md) | cluster: agents | Read-only render of .agent-user.md — prints the persona summary the host agent loads at session start. |
307
+ | command | [`agents:user-update`](../.agent-src/commands/agents/user/update.md) | cluster: agents | Open .agent-user.md in the user's IDE for manual edit; validates schema and 100-line cap on save. |
308
+ | command | [`agents:user`](../.agent-src/commands/agents/user.md) | cluster: agents | User-persona file (.agent-user.md) — interview, render, and maintain who the user is and how they want to be addressed. |
303
309
  | command | [`agents`](../.agent-src/commands/agents.md) | cluster: agents | Agent-layer orchestrator — routes to init, optimize, audit. Covers AGENTS.md and its multi-tool stubs (CLAUDE.md, GEMINI.md, copilot-instructions.md, .cursorrules). |
304
310
  | command | [`analyze-reference-repo`](../.agent-src/commands/analyze-reference-repo.md) | | Analyze an external reference repository (competitor, inspiration, peer) and produce a structured comparison + adoption plan for this project. |
305
311
  | command | [`bug-fix`](../.agent-src/commands/bug-fix.md) | | Plan and implement a bug fix — based on investigation, with quality checks and test verification |
@@ -0,0 +1,165 @@
1
+ ---
2
+ stability: beta
3
+ keep-beta-until: 2026-08-13
4
+ ---
5
+
6
+ # `.agent-user.md` schema (v1)
7
+
8
+ > **Status:** beta — locked for `1.18.0`. Re-evaluate fields after
9
+ > Phase 3 has been in active use for ≥1 week.
10
+
11
+ `.agent-user.md` is a single, project-root, gitignored Markdown file
12
+ that captures who the user is and how they want the agent to address
13
+ them. It is **deliberately minimal in v1** — name, language, role,
14
+ style, and a single voice sample. Everything else is deferred until
15
+ usage signal exists.
16
+
17
+ The file is owned by the user. The agent never edits it without an
18
+ explicit `accept` step.
19
+
20
+ ## Locked frontmatter (v1)
21
+
22
+ ```yaml
23
+ ---
24
+ version: 1
25
+ identity:
26
+ name: "Mathias" # required — full name or how the user wants to be addressed
27
+ nickname: "Matze" # optional — preferred shorthand (used by default in chat)
28
+ language: "de" # required — BCP-47-ish primary language ("de", "en", "fr", ...)
29
+ role: "founder/engineer" # required — short free-form role label
30
+ style:
31
+ formality: "informal" # informal | formal
32
+ pace: "pragmatic" # pragmatic | thorough | rapid
33
+ voice_sample: | # required — one paste of the user's typical writing
34
+ Mach das einfach. Wenn unklar, frag im Council.
35
+ last_updated: "2026-05-15" # YYYY-MM-DD — bumped on every accepted change
36
+ ---
37
+ ```
38
+
39
+ After the frontmatter, the body is a single freeform **`# Notes`**
40
+ section. Hard cap: **100 lines** total file size (including
41
+ frontmatter, body, and the Notes section). The 100-line cap is
42
+ enforced by `/agents user accept` and `/agents user update`.
43
+
44
+ ## Field reference
45
+
46
+ | Field | Required | Purpose |
47
+ |---|---|---|
48
+ | `version` | yes | Schema version. v1 is the only valid value today. |
49
+ | `identity.name` | yes | Default address form. |
50
+ | `identity.nickname` | no | Preferred shorthand — agent uses this by default in chat replies when set. |
51
+ | `language` | yes | Primary language; the agent mirrors per [`language-and-tone`](../../.agent-src/rules/language-and-tone.md). |
52
+ | `role` | yes | Short free-form label — drives reviewer voice selection and persona pairing. |
53
+ | `style.formality` | yes | `informal` (Du / first-name) or `formal` (Sie / full name). |
54
+ | `style.pace` | yes | `pragmatic` (default), `thorough` (more verification), or `rapid` (shorter replies). |
55
+ | `voice_sample` | yes | One representative paste — anchors mirror-back and tone calibration. |
56
+ | `last_updated` | yes | ISO date, bumped on every accept. |
57
+
58
+ ## Explicit exclusions
59
+
60
+ The agent NEVER writes any of the following to `.agent-user.md`, even
61
+ with the user's explicit consent — they violate the privacy floor:
62
+
63
+ - Credentials, API keys, passwords, tokens.
64
+ - Third-party names (children, partners, colleagues, clients).
65
+ - Third-party birthdays or dates.
66
+ - Financial figures (salary, revenue, net worth, runway numbers).
67
+ - Health, legal, or therapy status.
68
+ - Demographics (relationship status, family context, age, location) —
69
+ **deferred to v2** pending usage data per the re-validation gate.
70
+ - LinkedIn URL or any other external-source identifier — **deferred**
71
+ until a written host-agent-fetch contract and a "what counts as a
72
+ public profile field" privacy floor exist.
73
+
74
+ ## Loader contract
75
+
76
+ Host agents read `.agent-user.md` at session start, in this priority
77
+ order:
78
+
79
+ 1. `.agent-user.md` at project root (this contract).
80
+ 2. `personal.user_name` in `.agent-settings.yml` (legacy fallback).
81
+ 3. Nothing — agent uses generic address forms.
82
+
83
+ The host agent surfaces the user's `identity.nickname` (or `name` if
84
+ unset) on first reply when the file is present.
85
+
86
+ ## Determinism floor
87
+
88
+ The `agent-config` package itself contains **zero network code**.
89
+ External enrichment (e.g. LinkedIn profile fetch) was rejected on
90
+ determinism / ToS / test-impossibility grounds, and the host-agent
91
+ delegation workaround was additionally rejected on contract-floor
92
+ grounds (AI Council convergence — Anthropic, OpenAI, Google · 2026-05-14).
93
+ v1 is paste-only via `/agents user init`.
94
+
95
+ ## Staleness
96
+
97
+ When `last_updated` is older than 90 days, any `/agents user *`
98
+ command surfaces a one-line warning (not a blocker):
99
+
100
+ ```
101
+ ⚠️ .agent-user.md was last updated YYYY-MM-DD (>90 days ago). Run /agents user review or /agents user update.
102
+ ```
103
+
104
+ ## Commands
105
+
106
+ | Command | Role |
107
+ |---|---|
108
+ | `/agents user init` | Creates the file from a short interview. Refuses overwrite without `--force`. |
109
+ | `/agents user show` | Read-only render. (Phase 2.) |
110
+ | `/agents user review` | List buffered observations. (Phase 3.) |
111
+ | `/agents user accept` | Apply selected observations; bumps `last_updated`. (Phase 3.) |
112
+ | `/agents user update` | Open in IDE for manual edit; validates on save. (Phase 3.) |
113
+
114
+ See [`command-clusters.md`](command-clusters.md) for the locked
115
+ cluster registration.
116
+
117
+ ## Observation buffer
118
+
119
+ Agents MAY append observations about the user (preferred reply style,
120
+ detected language drift, repeated correction patterns) to a separate
121
+ JSONL buffer at the project root:
122
+
123
+ ```
124
+ .agent-user.observations.jsonl
125
+ ```
126
+
127
+ The buffer is **append-only**, gitignored, and never read by the
128
+ host-agent loader directly. It only feeds `/agents user review` →
129
+ `/agents user accept`.
130
+
131
+ Each line is a single JSON object:
132
+
133
+ ```json
134
+ {"ts":"2026-05-15T10:23:00Z","field":"style.pace","suggest":"rapid","source":"chat","evidence":"user said 'mach kürzer' 3× this session"}
135
+ ```
136
+
137
+ Allowed `field` values mirror the schema (`identity.nickname`,
138
+ `language`, `role`, `style.formality`, `style.pace`, `voice_sample`,
139
+ `notes`). Anything outside that set is dropped on read.
140
+
141
+ Privacy floor applies on write — never buffer credentials, third-party
142
+ PII, financial figures, or health/legal status. The same
143
+ [exclusions list](#explicit-exclusions) governs both `.agent-user.md`
144
+ and the buffer.
145
+
146
+ ## Gitignore
147
+
148
+ `.agent-user.md` and `.agent-user.observations.jsonl` are added to the
149
+ package-managed `.gitignore` block
150
+ ([`config/gitignore-block.txt`](../../config/gitignore-block.txt)) and
151
+ ignored by default. A `--shared` opt-in to commit `.agent-user.md` is
152
+ deferred — only the doc note lands in v1. The observation buffer is
153
+ **never** shared.
154
+
155
+ ## Example
156
+
157
+ A complete, paste-ready fixture lives at
158
+ [`docs/examples/agent-user.example.md`](../examples/agent-user.example.md).
159
+ Copy it to the project root as `.agent-user.md` and edit, or run
160
+ `/agents user init` for the interactive flow.
161
+
162
+ ## See also
163
+
164
+ - [`language-and-tone`](../../.agent-src/rules/language-and-tone.md) — language-mirroring rule the loader feeds.
165
+ - [`agents-md-thin-root`](../../.agent-src/skills/agents-md-thin-root/SKILL.md) — Thin-Root contract that this file complements (user-state vs project-state).
@@ -32,7 +32,7 @@ column 1 of this table.
32
32
  | `optimize` | 1 | `agents-dir` · `augmentignore` · `rtk` · `skills` | `optimize-augmentignore` · `optimize-rtk-filters` · `optimize-skills` · former `/optimize agents` and `/optimize agents-md` moved to the `/agents` file-family cluster 2026-05-09; `/agents prepare/audit/cleanup` collapsed into the single `/optimize agents-dir` (flags or wizard) per the agent-doc consolidation |
33
33
  | `feature` | 1 | `explore` · `plan` · `refactor` · `roadmap` · `dev` | `feature-explore` · `feature-plan` · `feature-refactor` · `feature-roadmap` · `feature-dev` |
34
34
  | `chat-history` | 2 | `show` · `import` · `learn` | `chat-history` (legacy status) — `resume` / `clear` / `checkpoint` removed in `road-to-chat-history-hook-only` (auto-adopt + structural hooks); `import` (verbatim cross-session render) and `learn` (project-improving learning extraction) added in the v4 stateless schema |
35
- | `agents` | 2 | `init` · `optimize` · `audit` | AGENTS.md file family (high-frequency) — repurposed 2026-05-09: `init` (was `/copilot-agents init`) · `optimize` (merger of `/optimize agents-md` + `/copilot-agents optimize`) · `audit` (was `/optimize agents`, collapses old `audit` + `check` verbs); legacy folder ops (`prepare` / `cleanup` / folder-`audit`) moved to `/optimize agents-dir` |
35
+ | `agents` | 2 | `init` · `optimize` · `audit` · `user` | AGENTS.md file family (high-frequency) — repurposed 2026-05-09: `init` (was `/copilot-agents init`) · `optimize` (merger of `/optimize agents-md` + `/copilot-agents optimize`) · `audit` (was `/optimize agents`, collapses old `audit` + `check` verbs); legacy folder ops (`prepare` / `cleanup` / folder-`audit`) moved to `/optimize agents-dir`; `user` sub-cluster added 2026-05-15 — manages the project-root `.agent-user.md` persona file (sub-sub-commands: `init` · `show` · `review` · `accept` · `update`) per [`agent-user-schema`](agent-user-schema.md) |
36
36
  | `memory` | 2 | `add` · `load` · `promote` · `propose` · `mine-session` · `learn-low-impact` | `memory-add` · `memory-full` · `memory-promote` · `propose-memory`; `mine-session` added 2026-05-10 — manual transcript-mining sub-command from `road-to-dream-skill-adoption.md`, opt-in via `--confirm-transcript-access` per invocation; `learn-low-impact` added 2026-05-15 — upstreams `## Validated` entries from `agents/low-impact-decisions.md` to the package seed via a DRAFT PR (re-runs the privacy-floor redactor as a second gate per `low-impact-corpus-privacy-floor`) |
37
37
  | `roadmap` | 2 | `create` · `ai-council` · `process-step` · `process-phase` · `process-full` | `roadmap-create` · `roadmap-execute` (replaced — autonomous, no per-step gate; `process-phase` is the default execution scope); `ai-council` added 2026-05-07 — wraps `/council default` with `--input-mode roadmap --depth deep` |
38
38
  | `module` | 2 | `create` · `explore` | `module-create` · `module-explore` |
@@ -39,6 +39,42 @@
39
39
  "load_context": [],
40
40
  "load_context_eager": []
41
41
  },
42
+ ".agent-src.uncompressed/commands/agents/user.md": {
43
+ "kind": "command",
44
+ "rule_type": "orchestrator",
45
+ "load_context": [],
46
+ "load_context_eager": []
47
+ },
48
+ ".agent-src.uncompressed/commands/agents/user/accept.md": {
49
+ "kind": "command",
50
+ "rule_type": null,
51
+ "load_context": [],
52
+ "load_context_eager": []
53
+ },
54
+ ".agent-src.uncompressed/commands/agents/user/init.md": {
55
+ "kind": "command",
56
+ "rule_type": null,
57
+ "load_context": [],
58
+ "load_context_eager": []
59
+ },
60
+ ".agent-src.uncompressed/commands/agents/user/review.md": {
61
+ "kind": "command",
62
+ "rule_type": null,
63
+ "load_context": [],
64
+ "load_context_eager": []
65
+ },
66
+ ".agent-src.uncompressed/commands/agents/user/show.md": {
67
+ "kind": "command",
68
+ "rule_type": null,
69
+ "load_context": [],
70
+ "load_context_eager": []
71
+ },
72
+ ".agent-src.uncompressed/commands/agents/user/update.md": {
73
+ "kind": "command",
74
+ "rule_type": null,
75
+ "load_context": [],
76
+ "load_context_eager": []
77
+ },
42
78
  ".agent-src.uncompressed/commands/analyze-reference-repo.md": {
43
79
  "kind": "command",
44
80
  "rule_type": null,
@@ -2902,6 +2938,160 @@
2902
2938
  "via": "body_link",
2903
2939
  "depth": 1
2904
2940
  },
2941
+ {
2942
+ "source": ".agent-src.uncompressed/commands/agents/user.md",
2943
+ "target": ".agent-src.uncompressed/commands/agents/init.md",
2944
+ "type": "READ_ONLY",
2945
+ "via": "body_link",
2946
+ "depth": 1
2947
+ },
2948
+ {
2949
+ "source": ".agent-src.uncompressed/commands/agents/user.md",
2950
+ "target": ".agent-src.uncompressed/commands/agents/user.md",
2951
+ "type": "WRITE",
2952
+ "via": "self",
2953
+ "depth": 0
2954
+ },
2955
+ {
2956
+ "source": ".agent-src.uncompressed/commands/agents/user/accept.md",
2957
+ "target": ".agent-src.uncompressed/commands/agents/user.md",
2958
+ "type": "READ_ONLY",
2959
+ "via": "body_link",
2960
+ "depth": 1
2961
+ },
2962
+ {
2963
+ "source": ".agent-src.uncompressed/commands/agents/user/accept.md",
2964
+ "target": ".agent-src.uncompressed/commands/agents/user/accept.md",
2965
+ "type": "WRITE",
2966
+ "via": "self",
2967
+ "depth": 0
2968
+ },
2969
+ {
2970
+ "source": ".agent-src.uncompressed/commands/agents/user/accept.md",
2971
+ "target": ".agent-src.uncompressed/commands/agents/user/review.md",
2972
+ "type": "READ_ONLY",
2973
+ "via": "body_link",
2974
+ "depth": 1
2975
+ },
2976
+ {
2977
+ "source": ".agent-src.uncompressed/commands/agents/user/accept.md",
2978
+ "target": ".agent-src.uncompressed/commands/agents/user/update.md",
2979
+ "type": "READ_ONLY",
2980
+ "via": "body_link",
2981
+ "depth": 1
2982
+ },
2983
+ {
2984
+ "source": ".agent-src.uncompressed/commands/agents/user/init.md",
2985
+ "target": ".agent-src.uncompressed/commands/agents/user.md",
2986
+ "type": "READ_ONLY",
2987
+ "via": "body_link",
2988
+ "depth": 1
2989
+ },
2990
+ {
2991
+ "source": ".agent-src.uncompressed/commands/agents/user/init.md",
2992
+ "target": ".agent-src.uncompressed/commands/agents/user/init.md",
2993
+ "type": "WRITE",
2994
+ "via": "self",
2995
+ "depth": 0
2996
+ },
2997
+ {
2998
+ "source": ".agent-src.uncompressed/commands/agents/user/review.md",
2999
+ "target": ".agent-src.uncompressed/commands/agents/user.md",
3000
+ "type": "READ_ONLY",
3001
+ "via": "body_link",
3002
+ "depth": 1
3003
+ },
3004
+ {
3005
+ "source": ".agent-src.uncompressed/commands/agents/user/review.md",
3006
+ "target": ".agent-src.uncompressed/commands/agents/user/accept.md",
3007
+ "type": "READ_ONLY",
3008
+ "via": "body_link",
3009
+ "depth": 1
3010
+ },
3011
+ {
3012
+ "source": ".agent-src.uncompressed/commands/agents/user/review.md",
3013
+ "target": ".agent-src.uncompressed/commands/agents/user/review.md",
3014
+ "type": "WRITE",
3015
+ "via": "self",
3016
+ "depth": 0
3017
+ },
3018
+ {
3019
+ "source": ".agent-src.uncompressed/commands/agents/user/review.md",
3020
+ "target": ".agent-src.uncompressed/commands/agents/user/update.md",
3021
+ "type": "READ_ONLY",
3022
+ "via": "body_link",
3023
+ "depth": 1
3024
+ },
3025
+ {
3026
+ "source": ".agent-src.uncompressed/commands/agents/user/show.md",
3027
+ "target": ".agent-src.uncompressed/commands/agents/user.md",
3028
+ "type": "READ_ONLY",
3029
+ "via": "body_link",
3030
+ "depth": 1
3031
+ },
3032
+ {
3033
+ "source": ".agent-src.uncompressed/commands/agents/user/show.md",
3034
+ "target": ".agent-src.uncompressed/commands/agents/user/init.md",
3035
+ "type": "READ_ONLY",
3036
+ "via": "body_link",
3037
+ "depth": 1
3038
+ },
3039
+ {
3040
+ "source": ".agent-src.uncompressed/commands/agents/user/show.md",
3041
+ "target": ".agent-src.uncompressed/commands/agents/user/show.md",
3042
+ "type": "WRITE",
3043
+ "via": "self",
3044
+ "depth": 0
3045
+ },
3046
+ {
3047
+ "source": ".agent-src.uncompressed/commands/agents/user/show.md",
3048
+ "target": ".agent-src.uncompressed/commands/agents/user/update.md",
3049
+ "type": "READ_ONLY",
3050
+ "via": "body_link",
3051
+ "depth": 1
3052
+ },
3053
+ {
3054
+ "source": ".agent-src.uncompressed/commands/agents/user/update.md",
3055
+ "target": ".agent-src.uncompressed/commands/agents/user.md",
3056
+ "type": "READ_ONLY",
3057
+ "via": "body_link",
3058
+ "depth": 1
3059
+ },
3060
+ {
3061
+ "source": ".agent-src.uncompressed/commands/agents/user/update.md",
3062
+ "target": ".agent-src.uncompressed/commands/agents/user/accept.md",
3063
+ "type": "READ_ONLY",
3064
+ "via": "body_link",
3065
+ "depth": 1
3066
+ },
3067
+ {
3068
+ "source": ".agent-src.uncompressed/commands/agents/user/update.md",
3069
+ "target": ".agent-src.uncompressed/commands/agents/user/init.md",
3070
+ "type": "READ_ONLY",
3071
+ "via": "body_link",
3072
+ "depth": 1
3073
+ },
3074
+ {
3075
+ "source": ".agent-src.uncompressed/commands/agents/user/update.md",
3076
+ "target": ".agent-src.uncompressed/commands/agents/user/review.md",
3077
+ "type": "READ_ONLY",
3078
+ "via": "body_link",
3079
+ "depth": 1
3080
+ },
3081
+ {
3082
+ "source": ".agent-src.uncompressed/commands/agents/user/update.md",
3083
+ "target": ".agent-src.uncompressed/commands/agents/user/show.md",
3084
+ "type": "READ_ONLY",
3085
+ "via": "body_link",
3086
+ "depth": 1
3087
+ },
3088
+ {
3089
+ "source": ".agent-src.uncompressed/commands/agents/user/update.md",
3090
+ "target": ".agent-src.uncompressed/commands/agents/user/update.md",
3091
+ "type": "WRITE",
3092
+ "via": "self",
3093
+ "depth": 0
3094
+ },
2905
3095
  {
2906
3096
  "source": ".agent-src.uncompressed/commands/analyze-reference-repo.md",
2907
3097
  "target": ".agent-src.uncompressed/commands/analyze-reference-repo.md",
@@ -0,0 +1,21 @@
1
+ ---
2
+ version: 1
3
+ identity:
4
+ name: "Mathias"
5
+ nickname: "Matze"
6
+ language: "de"
7
+ role: "founder/engineer"
8
+ style:
9
+ formality: "informal"
10
+ pace: "pragmatic"
11
+ voice_sample: |
12
+ Mach das einfach. Wenn unklar, frag im Council. Tokenverbrauch ist ok,
13
+ aber stell mir keine Fragen — entscheide oder frag die AIs.
14
+ last_updated: "2026-05-15"
15
+ ---
16
+
17
+ # Notes
18
+
19
+ Pragmatic shipper. Prefers terse replies, real diffs, and named
20
+ trade-offs over hedged options. Council-first for anything that looks
21
+ like a contract decision.
@@ -146,7 +146,7 @@ Your agent now understands slash commands:
146
146
  | `/quality-fix` | Run and fix all quality checks |
147
147
  | `/chat-history` | Inspect the persistent chat-history log (read-only `show`) |
148
148
 
149
- → [Browse all 109 active commands](../.agent-src/commands/)
149
+ → [Browse all 115 active commands](../.agent-src/commands/)
150
150
 
151
151
  ---
152
152
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event4u/agent-config",
3
- "version": "2.14.0",
3
+ "version": "2.15.0",
4
4
  "description": "Shared agent configuration \u2014 skills, rules, commands, guidelines, and templates for AI coding tools",
5
5
  "license": "MIT",
6
6
  "private": false,