tunestra 0.5.0 → 0.6.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.
package/README.md CHANGED
@@ -94,7 +94,7 @@ The file name is the name of the subagent: lowercase letters, digits and single
94
94
 
95
95
  ```yaml
96
96
  name: team # required, unique in the chain
97
- level: team # required: base | domain | team
97
+ level: team # required: base | domain | team | local
98
98
  description: Frontend team conventions
99
99
  extends: # optional, from general to specific
100
100
  - ../base
@@ -127,11 +127,49 @@ exclude: {}
127
127
  overrides: {}
128
128
  ```
129
129
 
130
+ ### Personal level: `tunestra.local.yaml`
131
+
132
+ A developer can tune the setup for themselves with `tunestra.local.yaml` and `.tunestra.local/`
133
+ in the project; `tunestra init --local` creates both. tunestra always puts both in
134
+ `.gitignore`. The personal level comes after the project, so it can add artifacts, override
135
+ them by key and exclude them, like any other level.
136
+
137
+ ```yaml
138
+ name: local # optional, defaults to local
139
+ extends: # optional: personal presets with level: local
140
+ - ~/presets/me
141
+ exclude:
142
+ skills: [storybook]
143
+ env:
144
+ HTTPS_PROXY: http://localhost:3128
145
+ permissions:
146
+ allow: [Bash(make *)]
147
+ ```
148
+
149
+ A personal preset has `level: local` in its manifest and can be shared between your projects.
150
+ The personal level can extend only such presets, and no shared level can extend them.
151
+
152
+ The committed files stay the same for the whole team: AGENTS.md, CLAUDE.md and
153
+ `.claude/settings.json` are built without the personal level. Every other generated file
154
+ follows the chain with it. A personal level cannot exclude `env` or permissions, because
155
+ Claude Code joins the personal settings with the committed ones and cannot remove a
156
+ committed entry.
157
+
158
+ | Agent | What it gets |
159
+ |---|---|
160
+ | Claude Code | `CLAUDE.local.md`, which it reads after CLAUDE.md: what the personal level adds, overrides and turns off. Personal `env` and permissions are added to `.claude/settings.local.json` |
161
+ | Codex | `AGENTS.override.md`, which it reads instead of AGENTS.md: the whole index with the personal level |
162
+
163
+ Claude Code writes `.claude/settings.local.json` too, for example when you allow a command for
164
+ good. tunestra remembers which entries it added and changes only those: your settings and
165
+ the rules of Claude Code stay. A variable that you changed by hand is yours and stays too.
166
+
130
167
  ### Sources
131
168
 
132
169
  | Reference | Example |
133
170
  |---|---|
134
171
  | Relative path | `../presets/team` (relative to the file that references it) |
172
+ | Home directory | `~/presets/me`, for personal presets |
135
173
  | GitHub | `github:<owner>/<repo>/<path>#<ref>` |
136
174
  | GitLab | `gitlab:<owner>/<repo>/<path>#<ref>` |
137
175
 
@@ -200,6 +238,7 @@ For every agent:
200
238
  | `.agents/rules/<NN>-<level>-<key>.md` | Rule texts, ordered from specific to general | no |
201
239
  | `.agents/skills/<key>/` | Skills | no |
202
240
  | `.tunestra/state/` | What tunestra generated last time | no |
241
+ | `AGENTS.override.md`, `CLAUDE.local.md` | The personal level, when there is one | no |
203
242
  | `.gitignore` | A block between `# >>> tunestra` and `# <<< tunestra` | yes |
204
243
 
205
244
  ### Claude Code
@@ -262,7 +301,7 @@ file can change only the model and the instructions. So Codex cannot make a suba
262
301
  read-only: tunestra turns off its shell (`features.shell_tool = false`) and asks it not to
263
302
  edit files in the instructions, and setup says so in a note.
264
303
 
265
- `<NN>` orders rules from specific to general: `10` project, `20` team, `30` domain, `40` base.
304
+ `<NN>` orders rules from specific to general: `00` personal, `10` project, `20` team, `30` domain, `40` base.
266
305
  Level instructions get the key `instructions`, and the preset name when it differs from the
267
306
  level: `20-team-instructions.md`, but `20-team-instructions-frontend.md` for a `team` preset
268
307
  named `frontend`.
@@ -298,10 +337,11 @@ Generated files are never kept because of manual edits: change the sources inste
298
337
  | Command | What it does |
299
338
  |---|---|
300
339
  | `tunestra init` | Creates `tunestra.yaml`; `--extends <presets...>` fills `extends`. Moves a hand-written `AGENTS.md` to `.tunestra/AGENTS.md` and a `CLAUDE.md` with its own text to `.tunestra/rules/claude-md.md`; a `CLAUDE.md` that only imports `AGENTS.md` is removed |
340
+ | `tunestra init --local` | Creates your personal level, `tunestra.local.yaml` and `.tunestra.local/rules/`, in a project with `tunestra.yaml`. `--extends` adds personal presets |
301
341
  | `tunestra setup` | Resolves the chain and regenerates every output |
302
342
  | `tunestra setup --dry-run` | Prints what would be written or removed, and the warnings |
303
343
  | `tunestra setup --verbose` | Also prints where every artifact comes from and what it overrides |
304
- | `tunestra uninstall` | Removes everything tunestra generated and its block in `.gitignore`; `tunestra.yaml` and `.tunestra/` stay. `--dry-run` shows the list first |
344
+ | `tunestra uninstall` | Removes everything tunestra generated and its block in `.gitignore`, and takes its entries out of `.claude/settings.local.json`; the sources stay. `--dry-run` shows the list first |
305
345
 
306
346
  `tunestra setup` refuses to overwrite an `AGENTS.md` or `CLAUDE.md` that it did not generate
307
347
  and tells you where to move their text.
@@ -312,7 +352,7 @@ and tells you where to move their text.
312
352
  |---|---|
313
353
  | v0.1 | Inheritance for Claude Code |
314
354
  | v0.2 | Codex (this document) |
315
- | v0.3 | `env` and permissions, then subagents and a personal `local` level |
355
+ | v0.3 | `env`, permissions, subagents and a personal `local` level |
316
356
  | v0.4 | Spaces, npm sources, lockfile |
317
357
  | v0.5 | `required` / `locked` policies, CI check |
318
358
  | v0.6 | Hooks |