@ainova-systems/intelligence 0.18.0 → 0.19.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.
Files changed (35) hide show
  1. package/cli/commands/init.sh +6 -1
  2. package/cli/commands/package.sh +8 -3
  3. package/cli/commands/source.sh +55 -16
  4. package/cli/intelligence +1 -1
  5. package/cli/internal/check.sh +64 -13
  6. package/cli/internal/package-add.sh +25 -4
  7. package/cli/internal/package-alias.sh +51 -0
  8. package/cli/internal/package-list.sh +16 -2
  9. package/cli/internal/package-remove.sh +3 -1
  10. package/cli/internal/package-update.sh +12 -4
  11. package/cli/lib/adapter-lifecycle.sh +5 -2
  12. package/cli/lib/cli-common.sh +4 -1
  13. package/cli/lib/gitignore.sh +128 -34
  14. package/cli/lib/manifest.sh +168 -20
  15. package/cli/lib/registry.sh +18 -13
  16. package/engine/ENGINE_SHA +1 -1
  17. package/engine/VERSION +1 -1
  18. package/engine/adapters/_template.sh +6 -2
  19. package/engine/adapters/agents.sh +3 -0
  20. package/engine/adapters/claude.sh +21 -10
  21. package/engine/adapters/codex.sh +8 -12
  22. package/engine/adapters/copilot.sh +46 -2
  23. package/engine/adapters/cursor.sh +6 -1
  24. package/engine/lib/adapter-contract.sh +17 -6
  25. package/engine/lib/common.sh +559 -59
  26. package/engine/sync.sh +9 -0
  27. package/package.json +1 -1
  28. package/packages/sync/references/adapters.md +39 -9
  29. package/packages/sync/references/conventions.md +46 -9
  30. package/packages/sync/references/onboarding-migration.md +3 -3
  31. package/packages/sync/skills/intelligence-learn-from-repository/SKILL.md +3 -2
  32. package/packages/sync/skills/intelligence-review-context/SKILL.md +2 -1
  33. package/packages/sync/skills/intelligence-update-context/SKILL.md +4 -2
  34. package/packages/sync/skills/intelligence-update-context/references/agents.md +7 -3
  35. package/packages/sync/skills/intelligence-update-context/references/skills.md +3 -1
package/engine/sync.sh CHANGED
@@ -102,6 +102,15 @@ echo ""
102
102
  load_targets_cache "$CONFIG_FILE"
103
103
  load_yaml_lists "$CONFIG_FILE" rules agents skills ignore submodules
104
104
 
105
+ # A package reference that resolves to nothing is left out of every list, so
106
+ # nothing renders from it — but it is a manifest error, not a directory that
107
+ # does not exist yet, and it is named rather than skipped in silence.
108
+ while IFS=$'\037' read -r section src state _dir alias holders; do
109
+ [ -n "$section" ] || continue
110
+ source_reference_problem_var "$state" "$alias" "$holders"
111
+ echo "WARNING: sources.$section '$src' $IS_SOURCE_PROBLEM — skipped; 'intelligence status --check' reports it" >&2
112
+ done <<< "${IS_YL_UNRESOLVED:-}"
113
+
105
114
  # Lint frontmatter across all source files (rules, agents, skills).
106
115
  # Catches issues like unquoted colons that strict YAML consumers reject.
107
116
  LINT_FILES=()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ainova-systems/intelligence",
3
- "version": "0.18.0",
3
+ "version": "0.19.0",
4
4
  "description": "Build, version and distribute AI agent intelligence across your organization — one CLI, versioned Intelligence Packages, and a sync engine for Claude Code, Cursor, Copilot, Codex, Pi and OpenCode.",
5
5
  "bin": {
6
6
  "intelligence": "bin/intelligence.js"
@@ -70,8 +70,9 @@ sync_to_mytool() {
70
70
  }
71
71
  ```
72
72
 
73
- The contract accepts the configured repo-relative output path and emits only
74
- records through these helpers:
73
+ The contract accepts the configured repo-relative output path and, as an optional
74
+ second argument, the absolute path of `intelligence.yaml`. It emits only records
75
+ through these helpers:
75
76
 
76
77
  | Record | Meaning |
77
78
  |---|---|
@@ -83,6 +84,17 @@ records through these helpers:
83
84
  | `adapter_contract_preserve <path>` | Settings or state preserved in place and included in the initial backup |
84
85
  | `adapter_contract_ignore <pattern>` | Exact `.gitignore` pattern managed on enable/init |
85
86
  | `adapter_contract_include <pattern>` | Exact negated `.gitignore` pattern managed on enable/init |
87
+ | `adapter_contract_unignore <pattern>` | Exact `.gitignore` pattern removed from the CLI-managed block on enable/init |
88
+
89
+ The manifest argument is for Git policy only: a target field may decide whether
90
+ generated output is ignored, as `targets.copilot.commit_output` does. Ownership
91
+ records never depend on it. The engine and the sync cache read ownership alone
92
+ and pass no manifest, so a contract given none declares its default policy;
93
+ init, enable and `status --check` pass it. `unignore` is how a configuration
94
+ withdraws a default `ignore` an earlier init or enable already wrote: the CLI
95
+ removes that exact line below its `# Intelligence generated state and tool
96
+ output` header, never a line the project wrote above it, and `status --check`
97
+ reports one still present.
86
98
 
87
99
  All paths are repository-relative. The CLI refuses missing, malformed, unsafe,
88
100
  or unsupported contracts before enabling or syncing an adapter. `owned` and
@@ -108,7 +120,14 @@ reads are not part of any contract.
108
120
  For an existing `.vscodeignore`, `.npmignore`, or `.dockerignore`, enable/init
109
121
  also excludes the configured adapter output plus its `owned`, `managed`, and
110
122
  `legacy` paths from published or build artifacts. This packaging policy is
111
- separate from the narrower Git policy expressed by `ignore` and `include`.
123
+ separate from the narrower Git policy expressed by `ignore`, `include` and
124
+ `unignore`.
125
+
126
+ The Copilot adapter ignores its four generated directories — `instructions/`,
127
+ `prompts/`, `agents/` and `skills/` under its output — like Cursor and Claude
128
+ Code ignore theirs, and never `.github/` itself. `targets.copilot.commit_output:
129
+ true` keeps them tracked for Copilot on github.com; the setting is defined in
130
+ [Generated output and version control](conventions.md#generated-output-and-version-control).
112
131
 
113
132
  The engine calls:
114
133
 
@@ -120,7 +139,7 @@ The engine has already loaded `engine/lib/common.sh` before it sources the adapt
120
139
 
121
140
  ## Source model
122
141
 
123
- `sources.rules`, `sources.agents` and `sources.skills` contain repo-relative directory paths. Packages have already been resolved, fetched and pinned by the CLI, so package content appears as an ordinary path under `.intelligence/packages/`. Adapters never perform network access or parse `packages:`.
142
+ `sources.rules`, `sources.agents` and `sources.skills` contain repo-relative directory paths. Packages have already been resolved, fetched and pinned by the CLI, so package content appears as an ordinary path under `.intelligence/packages/`. The manifest may name a package's directory by the package's full name or alias instead; `read_yaml_list` and `load_yaml_list` hand an adapter the store path either way, and leave out a reference that names nothing, so an adapter reads every source the same way. Adapters never perform network access or parse `packages:`.
124
143
 
125
144
  Iterate a source section in manifest order:
126
145
 
@@ -146,7 +165,7 @@ Use the engine library instead of copying parsers or file-handling logic.
146
165
  | Function | Purpose |
147
166
  |---|---|
148
167
  | `resolve_source_dir(repo_root, source)` | Resolve a manifest source to its local directory. |
149
- | `read_yaml_list(config, section)` | Stream entries from `sources.<section>`. |
168
+ | `read_yaml_list(config, section)` | Stream entries from `sources.<section>`, package references as their store paths. |
150
169
  | `load_yaml_list(config, section)` | Same list into `IS_YAML_LIST`, cached — no subprocess on repeat reads. |
151
170
  | `get_frontmatter_value(key, file)` | Read a scalar from the first frontmatter block. |
152
171
  | `frontmatter_index(keys, file...)` | Read several frontmatter scalars for many files in one pass (`\x1f`-separated rows; special key `paths#` counts `paths:` lines). |
@@ -155,8 +174,10 @@ Use the engine library instead of copying parsers or file-handling logic.
155
174
  | `get_model(config, tool, tier)` | Resolve a `frontier`, `heavy`, `standard` or `light` model, including manifest overrides. |
156
175
  | `get_model_default(tool, tier)` | Read the built-in model default. |
157
176
  | `load_model_tiers(config, tool)` / `resolve_model_var(tier)` | Resolve the four standard tiers once, then map per file without subprocesses. |
158
- | `copy_skill_bundle(src, dest)` | Copy `SKILL.md` and all resources safely, normalize Markdown and quote free-text frontmatter. |
177
+ | `map_effort(tool, effort)` / `map_effort_var(tool, effort)` | The level a tool's native effort field receives for a neutral `effort:` (`IS_EFFORT`); empty when the value is absent or off the scale, or the tool has no field. |
178
+ | `copy_skill_bundle(src, dest)` | Copy `SKILL.md` and all resources safely, normalize Markdown, quote free-text frontmatter, and keep a valid `effort:` as written, as the shared skills tree does. |
159
179
  | `copy_skill_bundle_dirs(dest_root, src...)` | Batch form: copy every skill directory into `dest_root/<name>` with one copy and one finalize pass. |
180
+ | `copy_skill_bundle_dirs_for(tool, dest_root, src...)` | The batch form for a tree one tool reads: `SKILL.md`'s `effort:` becomes that tool's level, or is removed when it has none. |
160
181
  | `sync_open_skill_dirs(root, config, dest)` | Own and populate a shared Agent Skills directory such as `.agents/skills/`, deriving Codex's `agents/openai.yaml` for a skill with `disable-model-invocation: true`. |
161
182
  | `finalize_output_file(file)` | Expand layout tokens and normalize line endings; required for every emitted text file. |
162
183
  | `finalize_output_files(file...)` / `finalize_copy_files(dest, src...)` | Batch forms: finalize in place, or copy-and-finalize into a directory, in one process. |
@@ -164,7 +185,7 @@ Use the engine library instead of copying parsers or file-handling logic.
164
185
  | `get_target_field(config, target, field)` | Read another field from the target configuration. |
165
186
  | `repo_rel_link(root, path)` | Produce a stable repo-relative link for a committed output. |
166
187
 
167
- `lint_frontmatter` is run across all inputs by the engine before adapters execute (batched as `lint_frontmatter_files`). It warns about common YAML hazards; adapters should not duplicate that pass.
188
+ `lint_frontmatter` is run across all inputs by the engine before adapters execute (batched as `lint_frontmatter_files`). It warns about common YAML hazards and about an `effort:` off the neutral scale, naming the source once; adapters should not duplicate that pass, and render such a value as absent without a second warning.
168
189
 
169
190
  Prefer the batched forms inside per-file loops: a process spawn costs tens of milliseconds on Git Bash for Windows, so one-awk-per-file adapters turn large projects into minutes of process creation. The built-in adapters are the reference for the pattern.
170
191
 
@@ -216,7 +237,7 @@ Skills follow the [Agent Skills standard](https://agentskills.io). Copy each ski
216
237
  copy_skill_bundle "$source_skill_dir" "$output_dir/skills/$skill_name"
217
238
  ```
218
239
 
219
- Do not use plain `cp` for skill bundles. `copy_skill_bundle` preserves non-Markdown assets, avoids materializing symlink targets, normalizes Markdown, expands layout tokens and quotes `description` and `argument-hint` where strict YAML readers require strings.
240
+ Do not use plain `cp` for skill bundles. `copy_skill_bundle` preserves non-Markdown assets, avoids materializing symlink targets, normalizes Markdown, expands layout tokens and quotes `description` and `argument-hint` where strict YAML readers require strings. It renders `effort:` as the shared tree does; a tree only one tool reads uses `copy_skill_bundle_dirs_for <tool>`, so the copy carries that tool's level or no effort at all.
220
241
 
221
242
  Antigravity, Codex, Pi and OpenCode share `.agents/skills/`. Any adapter writing that open-standard directory must call `sync_open_skill_dirs`; it is the single lifecycle owner for immediate skill subdirectories.
222
243
 
@@ -229,11 +250,20 @@ Source agents use tool-neutral fields:
229
250
  name: backend-developer
230
251
  description: "Implements backend features"
231
252
  tier: heavy
253
+ effort: high
232
254
  access: full
233
255
  ---
234
256
  ```
235
257
 
236
- Map `tier` through `get_model`, not a hardcoded model name. Transform `access: full|readonly` into the target tool's native permission model. Preserve the body as the agent's instructions.
258
+ Map `tier` through `get_model`, not a hardcoded model name. Map `effort` through `map_effort_var` and emit the tool's own effort key only when it returns a level; never derive an effort from the tier, and never copy the source `effort:` line into a tool without a field. Transform `access: full|readonly` into the target tool's native permission model. Preserve the body as the agent's instructions.
259
+
260
+ | Built-in | `effort:` rendering | Evidence, checked 2026-10-07 |
261
+ |---|---|---|
262
+ | `claude` | `effort:` in agents and skills; `ultra` becomes `max` | [Subagents](https://code.claude.com/docs/en/sub-agents) and [skills](https://code.claude.com/docs/en/skills) accept `low`, `medium`, `high`, `xhigh`, `max`; [model configuration](https://code.claude.com/docs/en/model-config) falls back to the highest level the active model supports at or below the one set |
263
+ | `codex` | `model_reasoning_effort` in `.codex/agents/*.toml`, every level; no per-skill effort | The [configuration reference](https://learn.chatgpt.com/docs/config-file/config-reference) lists `low`, `medium`, `high`, `xhigh`, `max`, `ultra`, with availability depending on the model |
264
+ | `copilot`, `cursor` | none, in agents or in their own skill copies | No per-agent effort field is rendered, so the tool's own setting applies |
265
+ | `opencode`, `antigravity`, `pi` | none in agents | Same; their skills come from the shared tree |
266
+ | shared `.agents/skills/` | a valid level as written | The open-standard tree several tools read keeps the neutral value |
237
267
 
238
268
  Built-ins currently emit Claude and Cursor Markdown, Copilot `.agent.md`, Codex TOML, Pi prompt templates and OpenCode Markdown subagents. Read the closest built-in adapter before implementing a new transformation.
239
269
 
@@ -71,6 +71,8 @@ sources:
71
71
  - "intelligence/skills"
72
72
  ```
73
73
 
74
+ A package's directory may also be named by the package instead of its store path: `@ainova-systems/sync/rules` names folder `rules` of the package `packages:` declares as `@ainova-systems/sync`, and `sync:rules` names it through the alias that package declares (`intelligence package alias @ainova-systems/sync sync`). Both render exactly as the store path, and both are installed package content like it: edit that content in its source repository. The CLI writes store paths and never rewrites a reference a person wrote; an `@scope/name/...` entry for a package `packages:` does not declare is an ordinary project path.
75
+
74
76
  Missing project-owned source directories are skipped, so a package-only project need not create empty `rules/`, `agents/` or `skills/` directories. Source order matters: later files with the same artifact name overwrite earlier ones. Package sources are wired before project sources so the project can override a package artifact deliberately.
75
77
 
76
78
  Project-owned entries are managed with `intelligence source add|remove|list` rather than by hand — it validates the path against the way the engine resolves it and prints the resulting order. `add` appends by default; `--before <entry>` / `--after <entry>` place content that should behave like a package ahead of the project's own directories.
@@ -192,9 +194,25 @@ Do not instruct an agent to read rules or restate their content. Claude loads it
192
194
  | `standard` | `sonnet` | `inherit` | `gpt-6.1-sol` | `anthropic/claude-sonnet-5-5` | `flash` | review, validation, analysis |
193
195
  | `light` | `sonnet` | `inherit` | `gpt-6-luna` | `anthropic/claude-sonnet-5-5` | `flash` | lookups and simple formatting |
194
196
 
195
- Codex also receives a reasoning effort per tier — `xhigh`, `high`, `medium`, `low` — which is what separates `frontier` from `heavy` in Codex. Copilot has no effort field, so its `frontier` and `heavy` agents are identical. Claude's Haiku 4.5 is retiring with no successor announced, so `light` shares `standard`'s Sonnet in Claude and OpenCode; Cursor and Antigravity have fewer native levels than there are tiers, so several tiers share one value there too.
197
+ A tier selects the model only and never sets a reasoning effort — that is `effort:`, below. Where two tiers share a model they therefore render identical agents: `frontier` and `heavy` in Codex and Copilot. Claude's Haiku 4.5 is retiring with no successor announced, so `light` shares `standard`'s Sonnet in Claude and OpenCode; Cursor and Antigravity have fewer native levels than there are tiers, so several tiers share one value there too.
198
+
199
+ The vocabulary is tool-neutral. Adapters resolve it through `get_model()`. Override a default under `models.<tool>.<tier>` in `intelligence.yaml` only when the project needs a pin; sync reports drift when that override differs from the current default. Another tier name works only where `models.<tool>.<tier>` defines it; elsewhere — a typo, as a rule — the agent renders with an empty `model` and sync warns once per tool and tier.
200
+
201
+ ### Effort mappings
202
+
203
+ `effort:` asks for a reasoning effort, independently of the model `tier` selects. The scale, lowest first, is `low`, `medium`, `high`, `xhigh`, `max`, `ultra`, matched exactly. Write it only where an agent or skill needs a level other than the tool's own setting: without it, no tool receives an effort.
204
+
205
+ | `effort:` | Claude agents and skills (`effort:`) | Codex agents (`model_reasoning_effort`) | Copilot, Cursor, OpenCode, Antigravity and Pi agents |
206
+ |---|---|---|---|
207
+ | `low`, `medium`, `high`, `xhigh`, `max` | the same level | the same level | not emitted |
208
+ | `ultra` | `max` | `ultra` | not emitted |
209
+ | absent, empty or off the scale | not emitted | not emitted | not emitted |
210
+
211
+ A level a tool lacks becomes the nearest lower level it has. Which levels a particular model supports is left to the tool: a manifest can override the model, and Claude Code itself falls back to the highest level the active model supports at or below the one requested. Tools without a per-agent effort field keep their own setting.
196
212
 
197
- The vocabulary is tool-neutral. Adapters resolve it through `get_model()`. Override a default under `models.<tool>.<tier>` in `intelligence.yaml` only when the project needs a pin; sync reports drift when that override differs from the current default.
213
+ A value off the scale — `hiigh`, `High` — never fails a sync. Sync prints a `WARNING:` line naming the file, the value and the allowed levels — `sync --compact` and `init` show it too — and renders the artifact as if `effort:` were absent, because packages arrive from many sources and one author's typo must not block another team. An empty `effort:` is simply absent.
214
+
215
+ Skills take the same field. `.claude/skills/` receives Claude's level, the shared `.agents/skills/` tree keeps a valid level as written, and Copilot's and Cursor's skill copies carry none; an empty or off-scale value is removed from every copy. Codex has no per-skill effort.
198
216
 
199
217
  ### Access mappings
200
218
 
@@ -252,9 +270,9 @@ argument-hint: "<route-name>"
252
270
  4. Report the changed route and verification.
253
271
  ```
254
272
 
255
- Standard optional fields (`license`, `compatibility`, `metadata`, `allowed-tools`) and tool extensions pass through unchanged. A tool ignores fields it does not understand.
273
+ Standard optional fields (`license`, `compatibility`, `metadata`, `allowed-tools`) and tool extensions pass through unchanged. A tool ignores fields it does not understand. `effort:` is the exception: sync renders it per tool, as [Effort mappings](#effort-mappings) describes.
256
274
 
257
- `disable-model-invocation: true` makes a skill one only the owner starts, as a slash command: use it for a procedure that changes versions, the lock or generated outputs, where an agent selecting it unasked is the failure. Claude Code, Cursor and Copilot read the field itself; Codex does not, so sync writes `agents/openai.yaml` with `allow_implicit_invocation: false` beside the skill in `.agents/skills/`. Keep the source to the field — a skill that ships its own `agents/openai.yaml` keeps it unchanged.
275
+ `disable-model-invocation: true` makes a skill one only the owner starts, as a slash command: use it for a procedure that changes versions, the lock or generated outputs, where an agent selecting it unasked is the failure. Claude Code, Cursor and Copilot read the field itself; Codex does not, so sync writes `agents/openai.yaml` with `allow_implicit_invocation: false` beside the skill in `.agents/skills/`. Keep the source to the field. A skill that ships its own `agents/openai.yaml` keeps everything else in it: sync adds the policy when the file sets none, and refuses one that sets it otherwise or not as a plain `allow_implicit_invocation: false` directly under `policy:`.
258
276
 
259
277
  These limits reject a skill instead of degrading it:
260
278
 
@@ -328,7 +346,7 @@ Every line enters a finite context budget. Prefer subtraction, consolidation and
328
346
 
329
347
  `AGENTS.md` is regenerated by the `agents` adapter. Its optional static header is `targets.agents.header` in `intelligence.yaml`; generated rule, agent and skill sections follow it. Commit `AGENTS.md` when it is the project's shared canonical context.
330
348
 
331
- By default, commit the manifest, lock, project-owned content, `AGENTS.md`, and shared `.github/` output. Ignore the restorable package store and tool output owned by enabled adapters. `intelligence init` and `intelligence adapter enable` add these patterns without ignoring shared tool roots or settings:
349
+ By default, commit the manifest, lock, project-owned content and `AGENTS.md`. Ignore the restorable package store and tool output owned by enabled adapters. `intelligence init` and `intelligence adapter enable` add these patterns without ignoring shared tool roots or settings, and re-running `intelligence init` in an existing project applies a policy that changed since it last ran:
332
350
 
333
351
  ```gitignore
334
352
  # CLI-managed package store
@@ -363,9 +381,26 @@ GEMINI.md
363
381
  # Generated OpenCode agents. Commands share a directory with hand-authored
364
382
  # files, so they remain tracked unless the project chooses exact file ignores.
365
383
  .opencode/agents/
384
+
385
+ # Generated Copilot content and its legacy root file. `.github/` also holds
386
+ # workflows, templates and hand-written files, so only these are ignored.
387
+ .github/instructions/
388
+ .github/prompts/
389
+ .github/agents/
390
+ .github/skills/
391
+ .github/copilot-instructions.md
366
392
  ```
367
393
 
368
- Copilot output lives under `.github/` and is committed with other repository-level GitHub configuration. Do not ignore `.github/` wholesale. `AGENTS.md` is also committed so every clone has the shared tool-neutral entry point before sync.
394
+ Copilot output follows the same policy as Cursor and Claude Code: Copilot in the editor reads the generated files from disk after sync, so they are not committed. `.github/copilot-instructions.md` is treated like `CLAUDE.md` and `.cursorrules`: onboarding migrates it into project rules, and a copy left behind makes Copilot ignore `AGENTS.md`. Never ignore `.github/` wholesale. Copilot on github.com — code review and the coding agent — reads the repository instead of a sync; a project that wants it to see the rules, agents and skills sets `commit_output: true` on its Copilot target and runs `intelligence init`, which takes these five patterns back out of the CLI-managed block (lines above its header stay the project's own):
395
+
396
+ ```yaml
397
+ targets:
398
+ copilot: { enabled: true, output: ".github", commit_output: true }
399
+ ```
400
+
401
+ `commit_output` accepts `true` or `false`; omitting it means `false`, and any other value makes sync refuse. Turning it off again restores the patterns on the next `intelligence init`.
402
+
403
+ `AGENTS.md` stays committed by default: it is the tool-neutral fallback every tool reads, and a fresh clone has it only when it is committed, before anyone has synced.
369
404
 
370
405
  Git tracking and release packaging are separate policies. When a project
371
406
  already has `.vscodeignore`, `.npmignore`, or `.dockerignore`, the CLI appends a
@@ -377,9 +412,11 @@ files are not created.
377
412
  An ignore rule does not untrack a file already in Git. After init or adapter
378
413
  enable, the CLI reports each affected tracked path that remains in the
379
414
  worktree with an exact `git rm --cached -- '<path>'` command; this preserves
380
- the local file while removing it from the index. Legacy root entry points
381
- quarantined into the initial backup are ordinary worktree deletions to review
382
- and stage, not candidates for `git rm --cached`.
415
+ the local file while removing it from the index. A project that committed its
416
+ Copilot output while the policy kept it tracked gets these commands for each
417
+ generated file the first time `intelligence init` adds the Copilot patterns.
418
+ Legacy root entry points quarantined into the initial backup are ordinary
419
+ worktree deletions to review and stage, not candidates for `git rm --cached`.
383
420
 
384
421
  Before release, inspect the packager's actual file list. An npm `files`
385
422
  allowlist can force inclusion despite `.npmignore`, and a Dockerfile-specific
@@ -50,7 +50,7 @@ Migrate meaning, not tool syntax:
50
50
  | Root `AGENTS.md`, `CLAUDE.md`, `.cursorrules`, Copilot root instructions | Split verified guidance by topic into rules; keep local machine preferences in a gitignored root file only when no adapter representation exists |
51
51
  | `.claude/rules/*.md` | Rule; preserve valid `paths:` |
52
52
  | `.cursor/rules/*.mdc` | Rule; rename `globs:` to `paths:` and remove `alwaysApply:` |
53
- | Claude/Cursor/Copilot agents | Agent; map native model/readonly/tool fields back to `tier:` and `access:` |
53
+ | Claude/Cursor/Copilot agents, Codex `.codex/agents/*.toml` | Agent; map native model/readonly/tool fields back to `tier:` and `access:`, and a native effort level (`effort:`, `model_reasoning_effort`) back to `effort:` |
54
54
  | Claude/Cursor/Copilot skills or commands | Skill when the procedure is repeated, multi-step, stable, and verifiable; otherwise a rule or no artifact |
55
55
  | Pi/OpenCode/Codex prompt artifacts | Rule, agent, or skill according to responsibility, after removing tool-specific wrappers |
56
56
 
@@ -78,8 +78,8 @@ the enabled adapters. Treat CLI-reported tracked ignored paths that still exist
78
78
  locally as unresolved until the user approves the exact `git rm --cached`
79
79
  commands. A quarantined tracked legacy path is already a worktree deletion;
80
80
  review and stage that deletion normally instead of using `git rm --cached`. Preserve
81
- `AGENTS.md`, `.github/`, shared settings, and unrelated files under shared tool
82
- roots in Git, while excluding development-only Intelligence content from
81
+ `AGENTS.md`, hand-written `.github/` files, shared settings, and unrelated files
82
+ under shared tool roots in Git, while excluding development-only Intelligence content from
83
83
  published artifacts. Inspect the packager's actual file list before release;
84
84
  do not infer package or Docker context contents from Git status.
85
85
 
@@ -100,8 +100,9 @@ explains itself well.
100
100
  `IS_STATUS=ok`, a clean final check, and no `onboarding is pending` header
101
101
  after accepted migration.
102
102
  11. Report what was created, updated, removed, or deliberately kept. Remind the
103
- user to commit source, manifest, lock, `AGENTS.md`, and shared `.github/`
104
- changes. Keep or remove the initial backup only by separate user approval.
103
+ user to commit source, manifest, lock and `AGENTS.md` changes, plus Copilot's
104
+ `.github/` output only when `targets.copilot.commit_output` is `true`. Keep or
105
+ remove the initial backup only by separate user approval.
105
106
 
106
107
  ## Later learning
107
108
 
@@ -16,7 +16,8 @@ go through `intelligence-update-context`; this skill owns their review criteria.
16
16
  1. Read `<manifest>` and enumerate its configured rule, agent, and skill sources.
17
17
  Read the `intelligence-authoring` rule and
18
18
  `<module>/references/conventions.md`. Review project-owned sources; an installed
19
- package finding belongs upstream. In a package's own repository, review its
19
+ package finding — an entry naming a package's directory, however spelled —
20
+ belongs upstream. In a package's own repository, review its
20
21
  authoritative source tree. Do not audit generated output prose. Its byte count
21
22
  is the metadata-only exception.
22
23
  2. Record source line and byte counts, and git history when available: first
@@ -15,8 +15,10 @@ the same procedure. Updating the layer can create a new artifact.
15
15
 
16
16
  1. Read `<manifest>` and resolve its `sources.rules`, `sources.agents`, and
17
17
  `sources.skills` directories. `<content-dir>` names the project's content
18
- directory; `<module>` is installed package content. Read the
19
- `intelligence-authoring` rule and `<module>/references/conventions.md`.
18
+ directory; `<module>` is installed package content, and so is every entry
19
+ naming a package's directory by store path, full name or alias. Read the
20
+ `intelligence-authoring` rule and `<module>/references/conventions.md`, which
21
+ defines those spellings.
20
22
  Edit project-owned sources, never installed packages or generated output.
21
23
  When working in a package's own repository, use its authoritative source tree.
22
24
 
@@ -8,7 +8,10 @@
8
8
  difficulty justifies the most capable and most expensive model. Check the
9
9
  target's actual permission mapping when external read tools are required.
10
10
  If native read-only restrictions exclude those tools, use `full` only with a
11
- clear read-only boundary in the body.
11
+ clear read-only boundary in the body. The tier selects the model only: add
12
+ `effort:` (`low`, `medium`, `high`, `xhigh`, `max`, `ultra`) only when the
13
+ role needs a reasoning effort other than the tool's own setting, as the
14
+ authoring conventions' effort mappings describe.
12
15
  3. Keep the body thin: Expertise, Boundaries, and Build & Verify. Carry its own
13
16
  completion criteria and limitations. Reference constraints by name instead
14
17
  of copying rules, and put reusable procedures in skills.
@@ -27,7 +30,8 @@ skills:
27
30
  ```
28
31
 
29
32
  Quote free-text YAML strings and escape embedded quotes; malformed scalars can
30
- prevent discovery. Verify every skill binding resolves, the tier and access use
31
- the supported vocabulary, and the body defines a role rather than a checklist.
33
+ prevent discovery. Verify every skill binding resolves, the tier, effort and
34
+ access use the supported vocabulary, and the body defines a role rather than a
35
+ checklist; sync warns about an effort it does not recognize and ignores it.
32
36
  Apply the agent size and description limits from the authoring conventions,
33
37
  then return to the shared sync and verification steps.
@@ -26,7 +26,9 @@ agent: <existing-agent>
26
26
  ---
27
27
  ```
28
28
 
29
- Omit optional fields that do not apply. Add the skill to its matching agent's
29
+ Omit optional fields that do not apply. Add `effort:` only when the procedure
30
+ needs a reasoning effort other than the session's, using the scale in the
31
+ authoring conventions' effort mappings. Add the skill to its matching agent's
30
32
  `skills:` list when that agent is project-owned; propose an upstream change for
31
33
  a package-owned agent instead of editing the installed copy. Verify bindings,
32
34
  relative resource links, executable steps, and final success criteria. Apply the