omniagent 0.1.3 → 0.1.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.
package/CLAUDE.md CHANGED
@@ -1,10 +1,32 @@
1
1
  # omniagent Development Guidelines
2
2
 
3
- Auto-generated from all feature plans. Last updated: 2026-02-08
3
+ Auto-generated from all feature plans. Last updated: 2026-01-10
4
4
 
5
5
  ## Active Technologies
6
+ - TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js fs/promises + path (004-sync-agent-config)
7
+ - Filesystem (repo-local directories) (004-sync-agent-config)
8
+ - TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js fs/promises + path, Vitest, Vite, Biome (005-sync-slash-commands)
9
+ - Filesystem (repo `agents/commands/`, project target dirs, user home dirs) (005-sync-slash-commands)
10
+ - Filesystem (repo-local config + target directories) (006-add-custom-subagents)
11
+ - TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises`, `path`, Vitest, Vite, Biome (007-agent-templating)
12
+ - Filesystem (repo-local config + target directories + user home config) (007-agent-templating)
13
+ - Filesystem (repo-local agents/ directories and user home state under `~/.omniagent/state/`) (009-local-config-sync)
14
+ - Filesystem (repo-local sources/outputs + user home state under `~/.omniagent/state/`) (010-instruction-file-sync)
15
+ - Filesystem (repo-local `agents/` directory or user-supplied agents directory) (012-agents-dir-override)
16
+ - TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, @typescript/native-preview (tsgo), Vitest, Vite, Biome (013-fix-typecheck-ci)
17
+ - Filesystem (repo-local config and user home state) (013-fix-typecheck-ci)
18
+ - TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path`, Vite, Vitest, Biome (014-add-custom-targets)
19
+ - Filesystem (repo-local directories and user home state under `~/.omniagent/state/`) (014-add-custom-targets)
20
+ - TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path`, `jiti`, Vite, Vitest, Biome, @typescript/native-preview (tsgo) (015-cli-shim-flags)
21
+ - Filesystem (repo-local agents directory and user home state under `~/.omniagent/state/`) (015-cli-shim-flags)
22
+ - TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path`, Vitest, Vite, Biome (016-sync-default-agents)
23
+ - Filesystem (repo-local outputs and user home state under `~/.omniagent/state/`) (016-sync-default-agents)
6
24
 
7
- - TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path` + `child_process`, Vitest, Vite, Biome (017-dynamic-template-scripts)
25
+ - TypeScript 5.x, ES2022 target + yargs (CLI parsing), Vitest (testing), Vite (build), Biome (formatting/linting) (003-biome-integration)
26
+
27
+ - TypeScript 5.x, ES2022 target + yargs (CLI parsing), Vitest (testing) (002-vitest-cli-testing)
28
+
29
+ - TypeScript 5.x, Node.js 18+ + yargs (CLI parsing only) (001-cli-foundation)
8
30
 
9
31
  ## Project Structure
10
32
 
@@ -15,15 +37,31 @@ tests/
15
37
 
16
38
  ## Commands
17
39
 
18
- npm test && npm run lint
40
+ npm run check && npm test
19
41
 
20
42
  ## Code Style
21
43
 
22
- TypeScript 5.9 (ES2022) on Node.js 18+: Follow standard conventions
44
+ TypeScript 5.x, Node.js 18+: Enforced by Biome (formatting and linting)
45
+ - Line width: 100 characters
46
+ - Indentation: Tabs (2-space width)
47
+ - Quotes: Double quotes
48
+ - Semicolons: Always
49
+ - Run `npm run format` before committing
23
50
 
24
51
  ## Recent Changes
52
+ - 016-sync-default-agents: Added TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path`, Vitest, Vite, Biome
53
+ - 015-cli-shim-flags: Added TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path`, `jiti`, Vite, Vitest, Biome, @typescript/native-preview (tsgo)
54
+ - 014-add-custom-targets: Added TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path`, Vite, Vitest, Biome
55
+
56
+
25
57
 
26
- - 017-dynamic-template-scripts: Added TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path` + `child_process`, Vitest, Vite, Biome
27
58
 
28
59
  <!-- MANUAL ADDITIONS START -->
60
+ - Dynamic template scripts (`<nodejs>` and `<shell>`) are a shared sync runtime feature and apply across all
61
+ syncable template surfaces (skills, subagents, slash commands, and instruction templates).
62
+ - Any future syncable surface must integrate with the shared template-script runtime instead of
63
+ introducing surface-specific script execution behavior.
64
+ - Keep ignore and publish rules aligned with tool-specific directories so package publishes stay
65
+ clean.
66
+ - CLI shim E2E docs: `docs/cli-shim-e2e.md`.
29
67
  <!-- MANUAL ADDITIONS END -->
@@ -0,0 +1,56 @@
1
+ # Contributing
2
+
3
+ This document is for contributors and maintainers working on the `omniagent` codebase.
4
+
5
+ If you are using `omniagent` as an npm package consumer, start with [`README.md`](README.md).
6
+
7
+ ## Local Setup
8
+
9
+ - Node.js 18+
10
+ - npm
11
+
12
+ Install dependencies:
13
+
14
+ ```bash
15
+ npm ci
16
+ ```
17
+
18
+ ## Local Validation
19
+
20
+ Run the same checks used by CI before opening a PR:
21
+
22
+ ```bash
23
+ npm run check
24
+ npm run typecheck
25
+ npm test
26
+ npm run build
27
+ ```
28
+
29
+ ## Docs Changes
30
+
31
+ When updating docs, keep root `README.md` consumer-focused.
32
+
33
+ - End-user usage and product behavior belong in `README.md` and `docs/*.md`.
34
+ - Development and contribution workflows belong in `CONTRIBUTING.md`.
35
+ - Update docs assertions in `tests/docs/readme.test.ts` when docs architecture changes.
36
+
37
+ ## CLI Shim E2E (Contributor Workflow)
38
+
39
+ CLI shim E2E is a contributor-only verification flow and is not required for normal package usage.
40
+
41
+ Detailed guide:
42
+
43
+ - [`docs/cli-shim-e2e.md`](docs/cli-shim-e2e.md)
44
+
45
+ Quick commands:
46
+
47
+ ```bash
48
+ # Build first
49
+ npm run build
50
+
51
+ # Record baseline outputs from real CLIs
52
+ OA_E2E_RECORD_BASELINE=1 npm test -- tests/e2e/cli-shim/cli-shim.e2e.test.ts
53
+
54
+ # Compare shim output to recorded baselines
55
+ OA_E2E=1 npm test -- tests/e2e/cli-shim/cli-shim.e2e.test.ts
56
+ ```
package/README.md CHANGED
@@ -1,339 +1,209 @@
1
1
  # omniagent
2
2
 
3
- One config, many agents.
3
+ One source of truth for agent config across Claude, Codex, Gemini, and Copilot (and [any other agent](docs/custom-targets.md))
4
4
 
5
- omniagent lets teams stay in sync while everyone uses their tool of choice. Define agent
6
- content once and sync it to Claude Code, OpenAI Codex, GitHub Copilot CLI, and Gemini CLI.
5
+ Define canonical agent files once in `agents/`, then run `sync` to compile target-specific outputs.
7
6
 
8
- ```text
9
- # Before (manual drift)
10
- .claude/agents/release-helper.md
11
- .codex/skills/release-helper/SKILL.md
12
- .gemini/skills/release-helper/SKILL.md
13
- .copilot/skills/release-helper/SKILL.md
14
-
15
- # After (single source of truth)
16
- agents/agents/release-helper.md
17
- npx omniagent@latest sync
18
- ```
7
+ - Teams can keep one shared agent configuration while each teammate uses their preferred CLI.
8
+ - Agent enthusiasts can try out the newest agents, and switch back, without manually porting all their config.
19
9
 
20
- ## Quick start
10
+ ![Sync hero image](./design/sync-hero-image/output/sv-cast-with-agents.png)
21
11
 
22
- Create a Claude subagent once, then sync everywhere:
12
+ ## Quickstart
13
+
14
+ Author once in `agents/`, sync everywhere.
15
+
16
+ Subagents example:
17
+
18
+ ```md
19
+ # ./agents/agents/release-helper.md
23
20
 
24
- ```bash
25
- mkdir -p agents/agents
26
- cat > agents/agents/release-helper.md <<'AGENT'
27
21
  ---
22
+
28
23
  name: release-helper
29
24
  description: "Help draft release plans and checklists."
25
+
30
26
  ---
31
- Draft a release plan with milestones and owners.
32
- AGENT
33
27
 
34
- npx omniagent@latest sync --only claude,codex,gemini,copilot
28
+ Draft a release plan with milestones and owners.
35
29
  ```
36
30
 
37
- Outputs:
31
+ Codex does not support subagents. Omniagent
32
+ converts the canonical file into Codex's skill format (and the equivalent format for other
33
+ supported CLIs).
34
+
35
+ After `sync`, outputs include:
38
36
 
39
37
  ```text
40
- .claude/agents/release-helper.md
41
- .codex/skills/release-helper/SKILL.md
42
- .gemini/skills/release-helper/SKILL.md
43
- .copilot/skills/release-helper/SKILL.md
38
+ .claude/
39
+ agents/
40
+ release-helper.md
41
+ .codex/
42
+ skills/
43
+ release-helper/
44
+ SKILL.md
44
45
  ```
45
46
 
46
- Only Claude supports native subagents. Other targets receive converted skills so they still work.
47
+ ## How It Works
47
48
 
48
- ## CLI shim (interactive + one-shot)
49
+ 1. Author canonical sources in `agents/` (and optional repo `AGENTS.md`).
50
+ 2. Run `omniagent sync`.
51
+ 3. Omniagent writes target-specific files, converting unsupported surfaces when needed.
49
52
 
50
- `omniagent` without a subcommand acts as a shim to agent CLIs. Select an agent explicitly with
51
- `--agent` or set a `defaultAgent` in `agents/omniagent.config.*`.
53
+ ## Common Commands
52
54
 
53
55
  ```bash
54
- # Interactive (default)
55
- omniagent --agent codex
56
-
57
- # One-shot prompt
58
- omniagent -p "Summarize the repo" --agent codex --output json
59
-
60
- # Piped stdin
61
- echo "Summarize the repo" | omniagent --agent codex
62
-
63
- # Passthrough to agent CLI
64
- omniagent --agent codex -- --some-agent-flag --model gpt-5
65
- ```
66
-
67
- Shared flags:
68
-
69
- - `--approval <prompt|auto-edit|yolo>` (aliases: `--auto-edit`, `--yolo`)
70
- - `--sandbox <workspace-write|off>` (defaults to `off` when `--yolo` is set and `--sandbox` is
71
- not explicit)
72
- - `--output <text|json|stream-json>` (aliases: `--json`, `--stream-json`)
73
- - `--model <name>`
74
- - `--web <on|off|true|false|1|0>` (bare `--web` enables)
75
-
76
- Notes:
77
-
78
- - `--` passthrough is only valid after `--agent`.
79
- - Unsupported shared flags emit a warning and are ignored.
80
- - Agent output is passed through unmodified for all output formats.
81
- - Some approval values are agent-specific (for example, Claude ignores `--approval auto-edit`
82
- and warns).
83
- - Output formats are only supported in one-shot mode for agents that expose them; interactive runs
84
- warn when explicitly set.
85
-
86
- ### Shared-flag capability matrix
56
+ # Sync all supported agent CLIs installed on your system
57
+ npx omniagent@latest sync
87
58
 
88
- | Agent | Approval | Sandbox | Output | Model | Web |
89
- |---------|----------|---------|--------|-------|-----|
90
- | codex | ✓ | ✓ | ✓ | ✓ | ✓ |
91
- | claude | ✓ | ✗ | ✓ | ✓ | ✗ |
92
- | gemini | ✓ | ✓ | ✓ | ✓ | ✓ |
93
- | copilot | ✓ | ✗ | ✗ | ✓ | ✗ |
59
+ # Sync specific targets
60
+ npx omniagent@latest sync --only claude,codex
94
61
 
95
- ## What you can sync
62
+ # Skip a target for this run
63
+ npx omniagent@latest sync --skip codex
96
64
 
97
- ### Subagents (Claude format converted skills elsewhere)
65
+ # Use a non-default agents directory
66
+ npx omniagent@latest sync --agentsDir ./my-custom-agents
98
67
 
99
- ```text
100
- agents/agents/release-helper.md
101
- ---
102
- name: release-helper
103
- description: "Help draft release plans and checklists."
104
- ---
105
- Draft a release plan with milestones and owners.
106
- ```
68
+ # Show local-only overrides and exit
69
+ npx omniagent@latest sync --list-local
107
70
 
108
- ### Skills
71
+ # Apply a sync profile (see docs/profiles.md)
72
+ npx omniagent@latest sync --profile code-reviewer
109
73
 
110
- ```text
111
- agents/skills/review-helper/SKILL.md
112
- You are a reviewer. Focus on risks, edge cases, and missing tests.
74
+ # Shim mode (no subcommand)
75
+ omniagent --agent codex
76
+ omniagent -p "Summarize this repo" --agent codex --output json
113
77
  ```
114
78
 
115
- ### Slash commands
79
+ ## Local Overrides (`.local`)
116
80
 
117
- ```text
118
- agents/commands/review.md
119
- ---
120
- description: "Review a diff with a strict checklist."
121
- ---
122
- Summarize issues by severity with file/line references.
123
- ```
124
-
125
- ### Instruction files
81
+ Use `.local` files for personal variants that should not become team defaults.
126
82
 
127
83
  ```text
128
- AGENTS.md
129
- Global team instructions for all agents.
84
+ agents/
85
+ AGENTS.local.md # opinionated personal override
86
+ commands/
87
+ deploy.md # committed to git
88
+ deploy.local.md # opinionated personal override
89
+ skills/
90
+ ppt/
91
+ SKILL.md # committed to git
92
+ SKILL.local.md # opinionated personal override
130
93
  ```
131
94
 
132
- ## How it works
133
-
134
- 1. Author canonical files in `agents/` (and/or repo `AGENTS.md`).
135
- 2. Run `omniagent sync`.
136
- 3. Omniagent writes the right files for each target tool.
137
-
138
- ## Supported targets
139
-
140
- - Claude Code (native subagents + skills + slash commands)
141
- - OpenAI Codex (skills + global slash-command prompts; subagents converted to skills)
142
- - GitHub Copilot CLI (skills; slash commands + subagents converted to skills)
143
- - Gemini CLI (skills require `experimental.skills`; slash commands project/global;
144
- subagents converted to skills)
145
-
146
- ## Repo layout (canonical sources)
95
+ `./agents/.local/` is also supported. This can be used for libraries for your personal tooling, that should not be shared with the team:
147
96
 
148
97
  ```text
149
98
  agents/
150
- agents/ # subagents (Claude format)
151
- skills/ # skills (one folder per skill)
152
- commands/ # slash commands
153
- .local/ # personal overrides (ignored in outputs)
154
- AGENTS.md # repo-wide instructions (optional)
99
+ .local/
100
+ commands/my-personal-command.md
101
+ skills/my-personal-skill/SKILL.md
155
102
  ```
156
103
 
157
- Default agents directory is `agents/`. Override it with `--agentsDir` (relative to the project
158
- root, or an absolute path).
159
-
160
- ## Use cases
161
-
162
- - **Keep a team-wide review assistant consistent** while each person uses their preferred tool.
163
- - **Ship one release-helper subagent** that works everywhere.
164
- - **Avoid tool wars** by supporting Claude, Codex, Gemini, and Copilot from one source of truth.
165
- - **Layer personal tweaks** without polluting the repo using `.local` overrides.
166
-
167
- ## Requirements
168
-
169
- - Node.js 18+
170
-
171
- ## Local validation
104
+ If a `.local` item matches a shared item name, the local item wins for your sync run. Generated
105
+ outputs do not keep the `.local` suffix.
172
106
 
173
- Run the same steps as CI:
107
+ Use `--list-local` to see active local items, or `--exclude-local` to ignore them for a run.
174
108
 
175
- 1. `npm ci`
176
- 2. `npm run check`
177
- 3. `npm run typecheck`
178
- 4. `npm test`
179
- 5. `npm run build`
109
+ Example `.gitignore` entries:
180
110
 
181
- ## Advanced
182
-
183
- ### Targeting via frontmatter
184
-
185
- ```yaml
186
- ---
187
- name: release-helper
188
- targets: [claude, gemini]
189
- ---
111
+ ```gitignore
112
+ agents/.local/
113
+ agents/**/*.local*
190
114
  ```
191
115
 
192
- - `targets` / `targetAgents`: `claude`, `gemini`, `codex`, `copilot`.
193
- - `name`: overrides filename when supported.
194
- - `description`: optional metadata.
195
-
196
- ### Custom targets (omniagent.config.*)
197
-
198
- Define custom targets in the agents directory. The CLI auto-discovers the first match in:
199
- `omniagent.config.ts`, `.mts`, `.cts`, `.js`, `.mjs`, `.cjs`.
200
-
201
- ```ts
202
- const config = {
203
- targets: [
204
- {
205
- id: "acme",
206
- displayName: "Acme Agent",
207
- outputs: {
208
- skills: "{repoRoot}/.acme/skills/{itemName}",
209
- subagents: "{repoRoot}/.acme/agents/{itemName}.md",
210
- commands: {
211
- projectPath: "{repoRoot}/.acme/commands/{itemName}.md",
212
- userPath: "{homeDir}/.acme/commands/{itemName}.md",
213
- },
214
- instructions: "AGENTS.md",
215
- },
216
- },
217
- ],
218
- disableTargets: ["copilot"],
219
- };
220
-
221
- export default config;
222
- ```
116
+ ## Sync Profiles
223
117
 
224
- - Built-in IDs require `override: true` or `inherits: "claude"` to avoid collisions.
225
- - `disableTargets` removes built-ins from the active target set.
226
- - Placeholders: `{repoRoot}`, `{homeDir}`, `{agentsDir}`, `{targetId}`, `{itemName}`,
227
- `{commandLocation}`.
228
- - When multiple targets resolve to the same output file, default writers handle
229
- skills/subagents/instructions. Command collisions are errors.
118
+ Profiles let each dev pick a named, checked-in filter that `sync` applies to
119
+ the shared `agents/` directory — so a ten-person team can share one source of
120
+ truth while each member opts in to exactly the skills, subagents, commands,
121
+ and targets they want.
230
122
 
231
- ### Instruction templates (per-target outputs)
232
-
233
- ```text
234
- /agents/guide.AGENTS.md
235
- ---
236
- outPutPath: docs/
237
- ---
238
- <agents include="claude,gemini">
239
- # Team Instructions
240
- </agents>
123
+ ```jsonc
124
+ // agents/profiles/code-reviewer.json
125
+ {
126
+ "description": "Focused setup for PR reviews",
127
+ "extends": "base",
128
+ "targets": { "claude": { "enabled": true }, "codex": { "enabled": true } },
129
+ "enable": {
130
+ "skills": ["code-review", "security-review"],
131
+ "subagents": ["reviewer"],
132
+ "commands": ["review", "diff-summary"]
133
+ },
134
+ "variables": { "REVIEW_STYLE": "terse" }
135
+ }
241
136
  ```
242
137
 
243
- - Templates live under `/agents/**` and can target specific outputs.
244
- - `outPutPath` is treated as a directory; filename is ignored if supplied.
138
+ ```bash
139
+ omniagent sync # uses agents/profiles/default.json when present
140
+ omniagent sync --profile code-reviewer
141
+ omniagent sync --profile base,code-reviewer # merge multiple (later wins)
142
+ omniagent sync --var REVIEW_STYLE=thorough # override a variable from the CLI
143
+ ```
245
144
 
246
- ### Local overrides (personal, never synced)
145
+ Profiles support `extends` chains, `.local` overrides (personal, gitignored),
146
+ glob-based `enable`/`disable` lists, per-target toggles, and template
147
+ variables. Discover and validate profiles with `omniagent profiles`,
148
+ `omniagent profiles show <name>`, and `omniagent profiles validate`.
247
149
 
248
- ```text
249
- agents/commands/deploy.local.md
250
- agents/skills/review-helper.local/SKILL.md
251
- ```
150
+ See [`docs/profiles.md`](docs/profiles.md) for the full schema, resolution
151
+ order, and examples.
252
152
 
253
- Local items override shared items with the same name. Outputs never include `.local`.
153
+ ## Basic Templating
254
154
 
255
- ### Agent-scoped templating
155
+ Use `<agents ...>` blocks when some text should render only for specific targets.
256
156
 
257
- ```text
258
- Shared content.
157
+ ```md
158
+ Shared guidance for all targets.
259
159
 
260
160
  <agents claude,codex>
261
- Only Claude and Codex see this.
262
- </agents>
263
-
264
- <agents not:claude,gemini>
265
- Everyone except Claude and Gemini see this.
161
+ Extra instructions only for Claude and Codex.
266
162
  </agents>
267
163
  ```
268
164
 
269
- ### Dynamic template scripts (`<nodejs>` and `<shell>`)
165
+ For advanced templating and dynamic scripts (`<nodejs>`, `<shell>`), see
166
+ [`docs/templating.md`](docs/templating.md).
270
167
 
271
- `sync` can execute inline script blocks in canonical templates before agent templating/rendering.
168
+ ## Agent CLI Shim
272
169
 
273
- Node.js blocks evaluate JavaScript and inject the returned value:
170
+ Omniagent provides a CLI shim (`omniagent` without a subcommand) for working with agent CLIs via a unified interface.
274
171
 
275
- ```md
276
- Current docs:
277
- <nodejs>
278
- const fs = require("node:fs");
279
- const path = require("node:path");
280
-
281
- const docsDir = path.join(process.cwd(), "docs");
282
- const pages = fs
283
- .readdirSync(docsDir)
284
- .filter((name) => name.endsWith(".md"))
285
- .sort();
286
-
287
- return pages.map((name) => `- ${name}`).join("\n");
288
- </nodejs>
172
+ This can be useful for CI/CD and shell scripts, while maintaining full portability between agents:
173
+
174
+ ```bash
175
+ # code-review.sh
176
+ #!/usr/bin/env bash
177
+ set -euo pipefail
178
+ agent="${1:-claude}"
179
+
180
+ omniagent -p "Perform comprehensive code review for this branch against main" --agent "$agent"
289
181
  ```
290
182
 
291
- Shell blocks execute in the user's shell and inject stdout:
183
+ Example usage:
292
184
 
293
- ```md
294
- Current docs:
295
- <shell>
296
- for file in docs/*.md; do
297
- [ -f "$file" ] || continue
298
- printf -- "- %s\n" "$(basename "$file")"
299
- done | sort
300
- </shell>
185
+ ```bash
186
+ ./code-review.sh
187
+ ./code-review.sh codex
301
188
  ```
302
189
 
303
- Behavior:
190
+ ## Documentation
304
191
 
305
- - Scripts run once per template per sync run and cached results are reused across targets.
306
- - Each script block runs in an isolated process (Node subprocess for `<nodejs>`, shell process for `<shell>`).
307
- - `<nodejs>` blocks can use `require`, `__dirname`, and `__filename`.
308
- - `<shell>` blocks run with the user's shell (`$SHELL` on Unix, `cmd.exe` on Windows fallback).
309
- - `<nodejs>` return values are normalized as: string unchanged, object/array JSON text, other values via
310
- `String(value)`, `null`/`undefined` as empty output.
311
- - `<shell>` blocks render raw stdout.
312
- - Static template text around script blocks is preserved.
313
- - Script failures stop sync before managed writes are applied.
314
- - Long-running scripts emit periodic `still running` warnings every 30 seconds.
315
- - Routine per-script telemetry is quiet by default and shown only with `sync --verbose`.
192
+ - Docs index: [`docs/README.md`](docs/README.md)
193
+ - Getting started: [`docs/getting-started.md`](docs/getting-started.md)
194
+ - Sync basics: [`docs/sync-basics.md`](docs/sync-basics.md)
195
+ - CLI shim details: [`docs/cli-shim.md`](docs/cli-shim.md)
196
+ - Custom targets (custom agents): [`docs/custom-targets.md`](docs/custom-targets.md)
197
+ - Local overrides: [`docs/local-overrides.md`](docs/local-overrides.md)
198
+ - Sync profiles: [`docs/profiles.md`](docs/profiles.md)
199
+ - Templating and dynamic scripts: [`docs/templating.md`](docs/templating.md)
200
+ - Command reference: [`docs/reference.md`](docs/reference.md)
201
+ - Troubleshooting: [`docs/troubleshooting.md`](docs/troubleshooting.md)
316
202
 
317
- ## CLI reference
203
+ ## Requirements
318
204
 
319
- ```bash
320
- npx omniagent@latest sync
321
- npx omniagent@latest sync --only claude
322
- npx omniagent@latest sync --skip codex
323
- npx omniagent@latest sync --exclude-local
324
- npx omniagent@latest sync --exclude-local=skills,commands
325
- npx omniagent@latest sync --agentsDir ./my-custom-agents
326
- npx omniagent@latest sync --list-local
327
- npx omniagent@latest sync --yes
328
- npx omniagent@latest sync --verbose
329
- npx omniagent@latest sync --json
330
- ```
205
+ - Node.js 18+
331
206
 
332
- Run-level overrides:
207
+ ## Contributing
333
208
 
334
- - `--only` replaces per-file frontmatter defaults for this run.
335
- - `--skip` filters the active target set (frontmatter defaults or all targets).
336
- - `--exclude-local` omits local sources entirely (or only for the listed categories).
337
- - `--list-local` prints detected local items and exits.
338
- - `--agentsDir` points to the agents directory (default `agents/`, resolved from the repo root).
339
- - If both are provided, `--only` applies first, then `--skip`.
209
+ Development and test workflows are documented in [`CONTRIBUTING.md`](CONTRIBUTING.md).