@ainova-systems/intelligence 0.11.0-rc.4 → 0.11.0-rc.5

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/add.sh +17 -0
  2. package/cli/commands/doctor.sh +28 -7
  3. package/cli/commands/init.sh +51 -20
  4. package/cli/commands/install.sh +9 -3
  5. package/cli/commands/migrate.sh +11 -2
  6. package/cli/commands/registry.sh +53 -26
  7. package/cli/commands/remove.sh +13 -1
  8. package/cli/commands/search.sh +8 -7
  9. package/cli/commands/status.sh +5 -4
  10. package/cli/commands/sync.sh +19 -1
  11. package/cli/commands/update.sh +4 -0
  12. package/cli/commands/upgrade.sh +50 -9
  13. package/cli/lib/cli-common.sh +28 -47
  14. package/cli/lib/manifest.sh +79 -0
  15. package/cli/lib/registry.sh +77 -14
  16. package/cli/lib/semver.sh +5 -2
  17. package/engine/agents/intelligence-operator.md +4 -4
  18. package/engine/docs/ADAPTERS.md +2 -1
  19. package/engine/docs/CLI.md +14 -11
  20. package/engine/docs/CONVENTIONS.md +5 -3
  21. package/engine/rules/intelligence-authoring.md +4 -4
  22. package/engine/scripts/ENGINE_SHA +1 -0
  23. package/engine/scripts/lib/common.sh +6 -2
  24. package/engine/skills/intelligence-add-agent/SKILL.md +7 -7
  25. package/engine/skills/intelligence-add-rule/SKILL.md +5 -5
  26. package/engine/skills/intelligence-add-skill/SKILL.md +5 -5
  27. package/engine/skills/intelligence-extract-skill/SKILL.md +2 -2
  28. package/engine/skills/intelligence-install-adapter/SKILL.md +6 -6
  29. package/engine/skills/intelligence-learn-from-context/SKILL.md +1 -1
  30. package/engine/skills/intelligence-review-skills/SKILL.md +5 -5
  31. package/engine/skills/intelligence-sync/SKILL.md +5 -7
  32. package/engine/skills/intelligence-uninstall-adapter/SKILL.md +2 -2
  33. package/engine/skills/intelligence-update/SKILL.md +6 -0
  34. package/package.json +1 -1
  35. package/registry/index.yaml +4 -0
@@ -9,15 +9,15 @@ argument-hint: <domain> <verb-noun> [description]
9
9
  ## Steps
10
10
 
11
11
  1. **Determine domain prefix** (the scope is required):
12
- - **Reuse the existing domain when one fits**: list `intelligence/skills/` and `intelligence/agents/`. If a domain prefix is already established for the target area (`backend-`, `frontend-`, `devops-`), use it. Introduce a new domain only when the scope is materially different from all existing ones.
12
+ - **Reuse the existing domain when one fits**: list `<umbrella>/skills/` and `<umbrella>/agents/`. If a domain prefix is already established for the target area (`backend-`, `frontend-`, `devops-`), use it. Introduce a new domain only when the scope is materially different from all existing ones.
13
13
  - **When no existing domain fits**, derive from repo structure:
14
- - Single / root project → use the project codename from `intelligence/config.yaml` → `project.name`
14
+ - Single / root project → use the project codename from `<manifest>` → `project.name`
15
15
  - Backend service / API component → `backend-`
16
16
  - Frontend / web / UI component → `frontend-`
17
17
  - Infrastructure, IaC, CI/CD, deployment → `devops-`
18
18
  - Shared library / common / cross-cutting code → `core-`
19
19
  - Test suites (e2e, integration) → `tests-`
20
- - Tool-internal (intelligence-sync itself) → `intelligence-`
20
+ - Tool-internal (intelligence-sync itself) → `intelligence-` (only inside the intelligence-sync repo — downstream projects must not use this prefix)
21
21
  - If the repo is a monorepo with named components (e.g., `apps/billing`, `services/auth`), prefer the component name as the domain (`billing-`, `auth-`).
22
22
  - **Every skill needs a domain prefix.** If the scope is unclear, ask the user before proceeding.
23
23
 
@@ -28,13 +28,13 @@ argument-hint: <domain> <verb-noun> [description]
28
28
  - `run-` — executes an operation (tests, build, sync)
29
29
  - `review-` — read-only analysis
30
30
 
31
- 3. **Check for existing agent**: Find an agent in `intelligence/agents/` matching the domain
31
+ 3. **Check for existing agent**: Find an agent in `<umbrella>/agents/` matching the domain
32
32
  - If found — this skill will be linked to that agent
33
33
  - If not — ask user whether to create a new agent via `/intelligence-add-agent` first
34
34
 
35
35
  4. **Analyze codebase patterns**: Read existing implementations to extract the repeatable steps this skill should automate. Each step must come from actual code patterns, not generic knowledge.
36
36
 
37
- 5. **Create skill**: Write `intelligence/skills/<full-name>/SKILL.md` with frontmatter:
37
+ 5. **Create skill**: Write `<umbrella>/skills/<full-name>/SKILL.md` (create the directory if missing — no config edit needed) with frontmatter:
38
38
  ```yaml
39
39
  ---
40
40
  name: <full-name>
@@ -26,7 +26,7 @@ Both end at the same artifact format. Extract starts from observed behavior, so
26
26
  - Behavioral preference / constraint / pattern to default to → **rule** (use `intelligence-learn-from-context` for single preferences from session)
27
27
  - Knowledge area / persona / expertise scope → **agent**
28
28
 
29
- 4. **Determine domain prefix** (for skill / agent): reuse the existing domain when one fits — list `intelligence/skills/` and `intelligence/agents/`. Derive from repo structure only when no existing domain matches.
29
+ 4. **Determine domain prefix** (for skill / agent): reuse the existing domain when one fits — list `<umbrella>/skills/` and `<umbrella>/agents/`. Derive from repo structure only when no existing domain matches.
30
30
 
31
31
  5. **Determine naming** (for skill): `<domain>-<verb>-<noun>` with convention verbs — `add-` (one new member of a set that already exists), `create-` (the container itself, where nothing hosted it), `update-` (revise what is there), `run-` (execute), `review-` (read-only analysis).
32
32
 
@@ -38,7 +38,7 @@ Both end at the same artifact format. Extract starts from observed behavior, so
38
38
 
39
39
  ## Authoring guidance
40
40
 
41
- Follow the **Authoring Discipline** section in `docs/CONVENTIONS.md` when writing the artifact body — size budgets (<500 lines for SKILL.md body), imperative form, explain WHY, reserve absolute language for true invariants, lead with positive defaults.
41
+ Follow the **Authoring Discipline** section in `<module>/docs/CONVENTIONS.md` when writing the artifact body — size budgets (<500 lines for SKILL.md body), imperative form, explain WHY, reserve absolute language for true invariants, lead with positive defaults.
42
42
 
43
43
  ## Related skills
44
44
 
@@ -7,19 +7,19 @@ agent: intelligence-operator
7
7
 
8
8
  # Install Adapter
9
9
 
10
- The umbrella is whatever directory holds `config.yaml` (`intelligence/`, `Intelligence/`, a codename — never assume the name or casing); the engine module is the directory under it holding `scripts/sync.sh` (conventionally `sync/`).
10
+ The project's config is `<manifest>`; the content dir is `<umbrella>/` (never assume the name or casing); the engine's own files live under `<module>/` — these paths are localized to this project at sync time.
11
11
 
12
12
  ## Steps
13
13
 
14
- 1. Check whether target `$ARGUMENTS` is already enabled in `config.yaml` — if yes, report and stop.
14
+ 1. Check whether target `$ARGUMENTS` is already enabled in `<manifest>` — if yes, report and stop.
15
15
 
16
- 2. **Locate the adapter.** `sync.sh` discovers adapters in two places:
17
- - **Built-in**: `<module>/scripts/adapters/$ARGUMENTS.sh` — upstream-owned. `update.sh` replaces that whole directory on every engine update.
18
- - **Project-owned**: `<umbrella>/adapters/$ARGUMENTS.sh` — `update.sh` never touches it. A project adapter of the same name overrides the built-in.
16
+ 2. **Locate the adapter.** The sync discovers adapters in two places:
17
+ - **Built-in**: `<module>/scripts/adapters/$ARGUMENTS.sh` — upstream-owned. Every engine update replaces that whole directory.
18
+ - **Project-owned**: `<umbrella>/adapters/$ARGUMENTS.sh` — updates never touch it. A project adapter of the same name overrides the built-in.
19
19
 
20
20
  If neither exists, research the tool's prompt format (web search for its rules / agents / skills file layout), then copy `<module>/scripts/adapters/_template.sh` to **`<umbrella>/adapters/$ARGUMENTS.sh`** and implement `sync_to_$ARGUMENTS()`. Author it there, never inside the engine's `scripts/adapters/` — a file written there is deleted by the next engine update. Adapter contract: `<module>/docs/ADAPTERS.md`. An adapter that would serve every project is worth contributing upstream.
21
21
 
22
- 3. Update `config.yaml`:
22
+ 3. Update `<manifest>`:
23
23
  - Target exists with `enabled: false` → flip to `enabled: true`.
24
24
  - Target missing → add it under `targets:` with its `output:` path.
25
25
  - If the target reads always-on rules from `AGENTS.md` (`cursor`, `copilot`, `codex`, `pi`, `opencode`), `targets.agents` must be enabled too — sync fails closed otherwise.
@@ -21,7 +21,7 @@ The original negative pattern stays in the rule body as an illustrative example
21
21
 
22
22
  ## Phase A — Analyze (read-only)
23
23
 
24
- 1. **Read authoring conventions first.** Discover the paths, never assume them: the umbrella is the directory holding `config.yaml` (`intelligence/`, `Intelligence/`, a codename), and the engine module is the directory under it holding both `scripts/sync.sh` and `scripts/VERSION` (conventionally `sync/`). The meta-skills live in `<module>/skills/`, not directly under the umbrella. Load `<module>/skills/intelligence-add-rule/SKILL.md`, `<module>/skills/intelligence-add-skill/SKILL.md`, `<module>/skills/intelligence-add-agent/SKILL.md`, and `<module>/docs/CONVENTIONS.md` (Authoring Discipline section). This skill writes nothing on its own — it delegates to the add-* skills, which carry the authoring conventions.
24
+ 1. **Read authoring conventions first.** The paths below are localized to this project at sync time: `<umbrella>/` is the content dir, `<module>/` the engine's own files, `<manifest>` the config. The meta-skills live in `<module>/skills/`, not directly under the umbrella. Load `<module>/skills/intelligence-add-rule/SKILL.md`, `<module>/skills/intelligence-add-skill/SKILL.md`, `<module>/skills/intelligence-add-agent/SKILL.md`, and `<module>/docs/CONVENTIONS.md` (Authoring Discipline section). This skill writes nothing on its own — it delegates to the add-* skills, which carry the authoring conventions.
25
25
 
26
26
  2. **Capture the lesson** from session context or user input. Strip session-specific detail, keep the underlying pattern.
27
27
 
@@ -13,11 +13,11 @@ Name reflects the umbrella usage of "skills" for all AI artifacts (rules + agent
13
13
 
14
14
  ## Scope: what to read, and what to leave alone
15
15
 
16
- 1. **Resolve the layout — never assume folder names.** The umbrella is the directory holding `config.yaml`; the engine module is the directory under it holding `scripts/sync.sh` and `scripts/VERSION` (conventionally `sync/`). Read authoring conventions from `<module>/docs/CONVENTIONS.md` and the `intelligence-authoring` rule.
16
+ 1. **Resolve the layout — never assume folder names.** `<umbrella>/` is the content dir, `<module>/` the engine's own files, `<manifest>` the config — all localized to this project at sync time. Read authoring conventions from `<module>/docs/CONVENTIONS.md` and the `intelligence-authoring` rule.
17
17
 
18
- 2. **Enumerate from `config.yaml`, not from a guessed path.** The artifacts are exactly the directories listed under `sources.rules`, `sources.agents` and `sources.skills` — there may be several groups (e.g. a shared one and a project one), they may be nested, and an `@<pack>` (or inline `git+`) entry is a remote pack declared under `packs:`. Take the list from the config; a literal `intelligence/rules/` is wrong in any project that named things differently.
18
+ 2. **Enumerate from `<manifest>`, not from a guessed path.** The artifacts are exactly the directories listed under `sources.rules`, `sources.agents` and `sources.skills` — there may be several groups (e.g. a shared one and a project one), they may be nested, and a remote entry is a declared pack (vendored setups, `packs:`) or an installed package (CLI setups, `packages:`, content under `.intelligence/packages/`). Take the list from the config; a literal `intelligence/rules/` is wrong in any project that named things differently.
19
19
 
20
- 3. **Skip everything the engine owns.** Sources under `<module>/` (`<module>/rules`, `<module>/agents`, `<module>/skills/intelligence-*`) are upstream-owned: `update.sh` replaces them wholesale, so a local "fix" there is deleted at the next update. Never propose an edit to them. If one of them is genuinely wrong, or a generic check is missing from this skill, that is a **proposal to upstream** — say so in the report rather than patching locally.
20
+ 3. **Skip everything the engine owns.** Sources under `<module>/` (`<module>/rules`, `<module>/agents`, `<module>/skills/intelligence-*`) are upstream-owned: every engine update replaces them wholesale, so a local "fix" there is deleted at the next update. Never propose an edit to them. If one of them is genuinely wrong, or a generic check is missing from this skill, that is a **proposal to upstream** — say so in the report rather than patching locally.
21
21
 
22
22
  4. **Never read or edit generated output** (`.claude/`, `.cursor/`, `.github/`, `.codex/`, `.agents/`, `.pi/`, `.opencode/`, `AGENTS.md`). Sync owns those entirely; the finding always belongs to the source.
23
23
 
@@ -34,9 +34,9 @@ Name reflects the umbrella usage of "skills" for all AI artifacts (rules + agent
34
34
  | **Over the cap** | `SKILL.md` over 1000 lines, rule over 500, agent over 200 | `SPLIT` — two artifacts, or move detail into `references/<topic>.md` |
35
35
  | **Rule links to a rule** | A markdown link from one rule to another (`R1`) | `UNLINK` — name the rule instead: always-on rules are inlined into `AGENTS.md` and the scoped channels carry only scoped rules, so the link is dead in at least one output |
36
36
  | **Machine facts in a rule** | OS, shell, editor or a local absolute path (`R2`) | `MOVE` — these belong in a personal, gitignored `CLAUDE.md`; a rule is committed and read by everyone, including whoever is on another platform |
37
- | **Literal path or command in a skill** | A path *outside the skill's own folder* baked into a procedure (`R3`) | `PARAMETERIZE` — a skill is *executed*, so a literal path breaks the moment the layout moves; resolve it from a rule or from `config.yaml`. **Exempt:** the skill's own bundle (`references/`, `scripts/`, `assets/` — content is co-located with its skill by default); rules and agents (describing the repository is their job); an example inside an output-format block; the resolution step itself |
37
+ | **Literal path or command in a skill** | A path *outside the skill's own folder* baked into a procedure (`R3`) | `PARAMETERIZE` — a skill is *executed*, so a literal path breaks the moment the layout moves; resolve it from a rule or from `<manifest>`. **Exempt:** the skill's own bundle (`references/`, `scripts/`, `assets/` — content is co-located with its skill by default); rules and agents (describing the repository is their job); an example inside an output-format block; the resolution step itself |
38
38
  | **Skill with no verification** | Nothing at the end proves the procedure worked (`R4`) | `FLAG` — a procedure that proves nothing is a note, or just the work: give it a verification, or delete it |
39
- | **Reserved prefix** | A project artifact named `intelligence-*` | `RENAME` — the prefix belongs to the engine, and the updater prunes what matches it |
39
+ | **Reserved prefix** | A project artifact named `intelligence-*` | `RENAME` — the prefix belongs to the engine, which replaces or removes everything under it on update |
40
40
  | **Naming** | A skill that is not `<domain>-<verb>-<noun>`, or a domain invented rather than reused | `RENAME` — or introduce the new domain deliberately |
41
41
  | **Stale** | No edits in 6+ months and nothing cross-references it | `ARCHIVE` — move to `<umbrella>/_archive/` |
42
42
  | **Negative-framed judgement call** | "Never do X" where a positive default fits, outside safety / security / output-format | `REWRITE` — state the default; reserve NEVER for true must-nots |
@@ -5,14 +5,12 @@ agent: intelligence-operator
5
5
  context: fork
6
6
  ---
7
7
 
8
- Run the sync engine to transform rules, agents, and skills from the intelligence source directory to each enabled IDE's native format.
8
+ Run the sync engine to transform rules, agents, and skills from the intelligence sources to each enabled IDE's native format.
9
9
 
10
- > **Folder name:** `<intel>` is whatever holds your `config.yaml` — typically `intelligence/`, but may have been renamed (e.g. `Intelligence/`). The engine lives in the module subfolder `<intel>/sync/` and is self-locating, so any spelling works as long as you point bash at the right `sync/scripts/sync.sh` path.
11
- >
12
- > **sync.sh never migrates.** It is a pure synchronizer: on a pre-0.3.1 / non-modular layout or an un-applied schema it **fails closed** with `IS_STATUS=needs-update` (exit 6) and changes nothing. Migration is owned entirely by the `intelligence-update` flow — tell your agent *"Update intelligence-sync"* (or run `<intel>/sync/scripts/update.sh`) first, then re-run sync.
10
+ > **The sync never migrates.** It is a pure synchronizer: across an un-applied schema it **fails closed** with `IS_STATUS=needs-update` (exit 6) and changes nothing. Bringing the project up to the engine is the update flow's job — in a vendored setup tell your agent *"Update intelligence-sync"* (the `intelligence-update` skill); in a CLI setup (root `intelligence.yaml`) run `npm i -g @ainova-systems/intelligence@latest` and `intelligence upgrade` — then re-run sync.
13
11
 
14
12
  ## Steps
15
13
 
16
- 1. Run `bash <intel>/sync/scripts/sync.sh` (where `<intel>` is your intelligence source folder; default `intelligence`).
17
- 2. Review the output — verify rule, agent, and skill counts per target.
18
- 3. If warnings about unsynced directories appear, add the missing paths to `<intel>/config.yaml` under `sources:`.
14
+ 1. Run `<sync-cmd>`.
15
+ 2. Review the output — verify rule, agent, and skill counts per target, and that it ends with `IS_STATUS=ok`.
16
+ 3. If warnings about unsynced directories appear, add the missing paths under `sources:` in `<manifest>`.
@@ -7,11 +7,11 @@ agent: intelligence-operator
7
7
 
8
8
  # Uninstall Adapter
9
9
 
10
- The umbrella is whatever directory holds `config.yaml` (`intelligence/`, `Intelligence/`, a codename — never assume the name or casing); the engine module is the directory under it holding `scripts/sync.sh` (conventionally `sync/`).
10
+ The project's config is `<manifest>`; the content dir is `<umbrella>/` (never assume the name or casing); the engine's own files live under `<module>/` — these paths are localized to this project at sync time.
11
11
 
12
12
  ## Steps
13
13
 
14
- 1. Set `enabled: false` for the target in `config.yaml`.
14
+ 1. Set `enabled: false` for the target in `<manifest>`.
15
15
 
16
16
  2. **Remove only the paths the adapter owns — never the output root.** Several adapters write into a shared root that also holds files nobody generated: `.github/` holds `workflows/`, `.claude/` holds `settings.json`, `.opencode/` holds `opencode.json`. Deleting the root destroys hand-authored work, and no adapter ever does that on re-sync.
17
17
 
@@ -35,6 +35,12 @@ They never run shell commands by hand — you do.
35
35
 
36
36
  ## Steps
37
37
 
38
+ ### 0. Vendored setups only
39
+ If the project has a root `intelligence.yaml` (a CLI setup), **stop** — this
40
+ flow is vendored-only. There the engine ships inside the CLI package: run
41
+ `npm i -g @ainova-systems/intelligence@latest`, then `intelligence upgrade`,
42
+ and verify with `intelligence doctor`.
43
+
38
44
  ### 1. Locate the umbrella & discover the engine
39
45
  Find the dir containing `config.yaml` → `<umbrella>`. Then find the engine by
40
46
  role: search `<umbrella>` (one level deep) for a directory `<M>` with both
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ainova-systems/intelligence",
3
- "version": "0.11.0-rc.4",
3
+ "version": "0.11.0-rc.5",
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"
@@ -12,6 +12,10 @@
12
12
  # explicitly (`intelligence registry add @ainova-systems <url>`) to read the
13
13
  # newest entries without waiting for a CLI release.
14
14
  packages:
15
+ "@ainova-systems/sync":
16
+ url: "https://github.com/ainova-systems/intelligence-sync.git"
17
+ path: "intelligence/sync"
18
+ description: "The engine's own content: authoring rule, engine agents and the intelligence-* meta-skills. Auto-installed by init; pinned to the engine version."
15
19
  "@ainova-systems/core":
16
20
  url: "https://github.com/ainova-systems/intelligence-dev-packs.git"
17
21
  path: "packs/core"