facult 2.11.0 → 2.13.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
@@ -7,8 +7,8 @@
7
7
  <a aria-label="Homebrew tap" href="https://github.com/hack-dance/homebrew-tap">
8
8
  <img alt="Homebrew tap" src="https://img.shields.io/badge/homebrew-hack--dance%2Ftap%2Ffclt-FBB040.svg?style=flat-square&logo=homebrew&logoColor=white&labelColor=000000">
9
9
  </a>
10
- <a aria-label="CI status" href="https://github.com/hack-dance/fclt/actions/workflows/ci.yml">
11
- <img alt="CI" src="https://img.shields.io/github/actions/workflow/status/hack-dance/fclt/ci.yml?branch=main&style=flat-square&logo=github&label=ci&labelColor=000000">
10
+ <a aria-label="Release workflow" href="https://github.com/hack-dance/fclt/actions/workflows/release.yml">
11
+ <img alt="Release" src="https://img.shields.io/github/actions/workflow/status/hack-dance/fclt/release.yml?branch=main&style=flat-square&logo=github&label=release&labelColor=000000">
12
12
  </a>
13
13
  <a aria-label="hack.dance" href="https://hack.dance">
14
14
  <img alt="Made by hack.dance" src="https://img.shields.io/badge/MADE%20BY%20HACK.DANCE-000000.svg?style=flat-square&labelColor=000000">
@@ -19,85 +19,90 @@
19
19
  <img alt="fclt demo" src="./Ghostty.gif">
20
20
  </p>
21
21
 
22
- `fclt` is a CLI for building and evolving AI faculties across tools, users, and projects.
22
+ `fclt` is a CLI for managing AI capability across tools and projects.
23
23
 
24
- `fclt` manages the reusable parts of your AI setup: instructions, snippets, templates, skills, agents, rules, and the feedback loops that improve them over time.
24
+ It gives instructions, snippets, skills, agents, MCP definitions, automations, and tool config a shared home. It can inspect what already exists, consolidate duplicates, render selected capability into tools like Codex and Claude, and preserve real-work friction as writeback that can later become reviewed improvements.
25
25
 
26
- It helps you:
27
- - keep a canonical store in `~/.ai` or `<repo>/.ai`
28
- - render managed tool files into Codex, Claude, Cursor, and similar tools
29
- - inspect dependencies, provenance, and rendered outputs
30
- - review trust and audit remote or local capability before it spreads
31
- - capture real-work friction as writeback and evolve canonical assets over time
26
+ Use it when AI setup has become scattered across dotfiles, tool homes, repos, prompts, skills, and one-off notes.
32
27
 
33
- ## Quick Start
28
+ <p align="center">
29
+ <img alt="fclt capability loop: setup, capability, agents, work units, writebacks, evolution, approval, and better future agents" src="./docs/assets/fclt-capability-loop.png">
30
+ </p>
31
+
32
+ Most usage should be agent-led after setup. Humans install, inspect, audit, and approve broad changes. Agents use `fclt` to find the right capability, preserve friction as writeback, and turn repeated signal into reviewed improvements.
33
+
34
+ ## What it does
35
+
36
+ `fclt` helps you:
37
+
38
+ - keep reusable AI capability in a canonical `~/.ai` root
39
+ - keep repo-specific capability in `<repo>/.ai`
40
+ - inspect skills, instructions, MCP servers, agents, automations, and rendered outputs
41
+ - compose guidance from smaller units with refs and snippets
42
+ - optionally render approved capability into Codex, Claude, Cursor, and similar tools
43
+ - record writebacks when an agent finds missing context, weak verification, stale guidance, or tool friction
44
+ - turn repeated writeback into reviewable evolution proposals
45
+ - audit local and remote capability before it spreads
46
+
47
+ The default posture is read-first. Managed rendering is available, but it is not required for inventory, review, writeback, or evolution. The goal is a background feedback loop, not another CLI users must babysit.
34
48
 
35
- ### 1. Install fclt
49
+ ## Install
36
50
 
37
- Recommended global install:
51
+ Homebrew:
38
52
 
39
53
  ```bash
40
54
  brew tap hack-dance/tap
41
55
  brew install hack-dance/tap/fclt
42
- fclt --help
43
56
  fclt --version
44
57
  ```
45
58
 
46
- Package-manager install:
59
+ npm or Bun:
47
60
 
48
61
  ```bash
49
62
  npm install -g facult
50
63
  # or
51
64
  bun add -g facult
52
- fclt --help
65
+ fclt --version
53
66
  ```
54
67
 
55
- The npm package name stays `facult` for registry compatibility. The installed command is still `fclt`.
68
+ The npm package is named `facult` for registry compatibility. The command is `fclt`.
56
69
 
57
- One-off usage without global install:
70
+ One-off usage:
58
71
 
59
72
  ```bash
60
73
  npx --yes -p facult fclt --help
61
74
  ```
62
75
 
63
- Direct binary install from GitHub Releases (macOS/Linux):
76
+ Direct binary install for macOS or Linux:
64
77
 
65
78
  ```bash
66
79
  curl -fsSL https://github.com/hack-dance/fclt/releases/latest/download/fclt-install.sh | bash
67
80
  ```
68
81
 
69
- Windows and manual installs can download the correct binary from each release page:
70
- `fclt-<version>-<platform>-<arch>`.
82
+ Windows and manual installs can download binaries from the [latest release](https://github.com/hack-dance/fclt/releases/latest).
71
83
 
72
- Update later with:
84
+ Update an installed binary:
73
85
 
74
86
  ```bash
75
87
  fclt self-update
76
- # or
77
- fclt update --self
88
+ fclt self-update --version 2.12.0
78
89
  ```
79
90
 
80
- Pin to a specific version:
91
+ ## Quick start
81
92
 
82
- ```bash
83
- fclt self-update --version 0.0.1
84
- ```
93
+ ### 1. Inspect existing AI state
85
94
 
86
- ### 2. Scan or bootstrap your canonical store
95
+ Start read-only:
87
96
 
88
97
  ```bash
89
- fclt scan --show-duplicates
90
98
  fclt status
99
+ fclt scan --show-duplicates
91
100
  fclt inventory --json
101
+ fclt list skills
102
+ fclt find verification
92
103
  ```
93
104
 
94
- `scan` is read-only. It inspects local configs and reports what `fclt` found without changing files.
95
-
96
- `status` reports the active canonical root, managed-tool state, generated index/graph state, writeback/proposal queue state, and high-signal sync risks.
97
-
98
- `inventory` is the stable machine-readable discovery surface for agent harnesses. It returns a JSON catalog of discovered MCP servers, skills, and instruction/rule assets across known tool configs and configured scan roots. MCP definitions are redacted by default, including env values, inline `KEY=value` args, bearer tokens, and secret-looking URL query params, but include safe auth metadata such as env keys, env references, and whether inline secret values were found.
99
-
100
- Useful inventory slices:
105
+ Useful flags:
101
106
 
102
107
  ```bash
103
108
  fclt inventory --json --global
@@ -105,780 +110,302 @@ fclt inventory --json --project
105
110
  fclt inventory --json --tool codex
106
111
  ```
107
112
 
108
- Use `mcpCapabilities` for the de-duplicated agent-facing MCP view. Use `mcpServers` when you need raw per-source occurrences for diagnostics.
113
+ `inventory` is the stable JSON surface for agents and automation. It redacts MCP secrets by default while preserving safe metadata such as env references and whether inline secrets were detected.
109
114
 
110
- If you want a repo-local `.ai`:
115
+ ### 2. Create a canonical store
111
116
 
112
- ```bash
113
- cd /path/to/repo
114
- fclt templates init project-ai
115
- fclt index
116
- ```
117
-
118
- If you want a concrete copy of the built-in operating-model pack without managing a tool:
117
+ Install the built-in operating-model pack into the global root:
119
118
 
120
119
  ```bash
121
120
  fclt templates init operating-model --global
122
- fclt templates init operating-model --root /path/to/.ai
121
+ fclt index --global
123
122
  ```
124
123
 
125
- ### 3. Import existing skills or config
124
+ Create a repo-local `.ai` root:
126
125
 
127
126
  ```bash
128
- fclt consolidate --auto keep-current --from ~/.codex/skills --from ~/.agents/skills
129
- fclt index
127
+ cd /path/to/repo
128
+ fclt templates init project-ai
129
+ fclt status --project
130
130
  ```
131
131
 
132
- Why `keep-current`: it is deterministic and non-interactive for duplicate sources.
133
-
134
- ### 4. Optional: manage a tool and sync
132
+ Create individual capability units:
135
133
 
136
134
  ```bash
137
- fclt manage codex --dry-run
138
- fclt manage codex --adopt-existing
139
- fclt sync codex --builtin-conflicts overwrite
140
- fclt manage cursor
141
- fclt manage claude
142
-
143
- fclt enable requesting-code-review receiving-code-review brainstorming systematic-debugging --for codex,cursor,claude
144
- fclt sync
145
- ```
146
-
147
- Managed rendering is an advanced mode. Prefer `fclt inventory`, `fclt list`, `fclt consolidate`, and explicit writeback/evolution when you mainly want visibility and normalization across Codex, Claude, and other tool homes. Use `manage` only when you want fclt to write rendered files back into a tool.
148
-
149
- Use `--dry-run` first if the live tool already has local content. If the tool already contains skills, agents, rules, docs, config, or MCP definitions, rerun `manage` with `--adopt-existing` and add `--existing-conflicts keep-canonical|keep-existing` if names collide.
150
-
151
- Ordinary `fclt sync` does not import live tool edits into canonical state. If you intentionally edited skills, agents, docs, rules, config, or MCP entries in Codex/Claude and want fclt to pick them up, run `fclt sync --adopt-live`.
152
-
153
- Codex path policy:
154
- - skills render to `.agents/skills`
155
- - local plugin marketplaces render to `.agents/plugins/marketplace.json`
156
- - local plugin bundles render to `plugins/`
157
- - Codex runtime config, rules, agents, and automations still render under `.codex/`
158
-
159
- If you run these commands inside a repo that has `<repo>/.ai`, `fclt` targets the project-local canonical store and repo-local tool outputs by default.
160
-
161
- ### 5. Inspect and evolve
162
-
163
- ```bash
164
- fclt list skills
165
- fclt inventory --json
166
- fclt status --json
167
- fclt show instruction:WRITING
168
- fclt show mcp:github
169
- fclt find verification
170
- fclt graph AGENTS.global.md
171
- fclt ai writeback add --kind weak_verification --summary "Checks were too shallow" --asset instruction:VERIFICATION
172
- fclt ai evolve propose
135
+ fclt templates init instruction BUN
136
+ fclt templates init snippet global/lang/bun
137
+ fclt templates init skill project-review
138
+ fclt templates init agent review-operator
173
139
  ```
174
140
 
175
- Context controls:
176
-
177
- ```bash
178
- fclt list instructions --global
179
- fclt list instructions --project
180
- fclt find verification --scope merged --source project
181
- fclt list agents --root /path/to/repo/.ai
182
- ```
141
+ ### 3. Consolidate existing skills or config
183
142
 
184
- ### 6. Optional: autosync, source trust, and audit
143
+ Bring existing tool-native assets into a canonical root deliberately:
185
144
 
186
145
  ```bash
187
- fclt autosync install --git-remote origin --git-branch main --git-interval-minutes 60
188
- fclt autosync status
189
-
190
- fclt sources list
191
- fclt verify-source skills.sh --json
192
- fclt sources trust skills.sh --note "reviewed"
193
- fclt install skills.sh:code-review --as code-review-skills-sh --strict-source-trust
194
-
195
- fclt audit
196
- fclt audit --non-interactive --severity high
197
- fclt audit safe mcp:github --rule static:mcp-env-inline-secret --note "reviewed"
198
- fclt audit fix mcp:github
199
- ```
200
-
201
- ## Overview
202
-
203
- Useful AI behavior is composable. You need small reusable parts, a clean way to combine them, and a safe way to render them into the files your tools actually use.
204
-
205
- `fclt` is a canonical store plus a renderer:
206
- - canonical store in `~/.ai` or `<repo>/.ai`
207
- - rendered tool files in places like `~/.codex`, `~/.claude`, or repo-local tool dirs
208
- - discovery and graph views for dependencies, provenance, and rendered targets
209
- - writeback and evolution flows for improving canonical assets over time
210
-
211
- The renderer is optional. The low-friction default is to let tools keep their native files, use `fclt inventory`/`scan`/`list` to see the full global set, and use `fclt consolidate` or `fclt sync --adopt-live` only when you explicitly want to promote live tool edits into canonical `~/.ai`.
212
-
213
- ## Documentation
214
-
215
- Focused docs live under [docs](./docs/README.md):
216
-
217
- - [Concepts](./docs/concepts.md): roots, scopes, state layers, and asset types
218
- - [Managed Mode](./docs/managed-mode.md): safe rendering and adoption rules
219
- - [Project `.ai`](./docs/project-ai.md): repo-local capability and project sync policy
220
- - [Built-In Pack](./docs/built-in-pack.md): packaged writeback/evolution defaults
221
- - [Writeback And Evolution](./docs/writeback-evolution.md): feedback-loop workflow and review surfaces
222
- - [Roadmap](./docs/roadmap.md): current gaps and non-goals
223
-
224
- ## Built-in Defaults
225
-
226
- `fclt` includes a built-in layer for writeback and evolution. By default, that layer provides:
227
- - instructions for work units, learning/writeback, evolution, integration, and project capability
228
- - agents such as `writeback-curator`, `evolution-planner`, and `scope-promoter`
229
- - skills such as `capability-evolution` and `project-operating-layer-design`
230
-
231
- Those built-in defaults are always available as `@builtin/facult-operating-model/...`. To install a concrete copy into a canonical root without managing any tool, run `fclt templates init operating-model --global`, `--project`, or `--root /path/to/.ai`.
232
-
233
- Managed mode is separate. Global tool management renders the bundled docs, agents, and skills into that tool's live files, so every managed agent sees that it can preserve strong friction with `fclt ai writeback ...` and escalate repeated signal with `fclt ai evolve ...`. Project-local `.ai` roots do not sync the built-in operating-model layer unless you explicitly enable it.
234
-
235
- The intended feedback loop is:
236
- 1. agents notice durable friction, weak verification, stale guidance, or missing capability during normal work
237
- 2. agents record one strong writeback when the signal, target, and scope are clear
238
- 3. humans or scheduled automations review grouped writebacks and existing proposals
239
- 4. only repeated evidence, a clearly missing capability, or a stale canonical asset becomes an evolution proposal
240
- 5. accepted proposals update canonical markdown assets, skills, snippets, or project/global instructions
241
-
242
- If you want to disable default built-in sync for one canonical root:
243
-
244
- ```toml
245
- version = 1
246
-
247
- [builtin]
248
- sync_defaults = false
146
+ fclt consolidate --auto keep-current --from ~/.codex/skills --from ~/.agents/skills
147
+ fclt index
249
148
  ```
250
149
 
251
- Put that in `config.toml` or `config.local.toml` under the active canonical root.
150
+ `keep-current` is deterministic and non-interactive. Use other conflict modes only when you have reviewed the sources.
252
151
 
253
- ## Use fclt from your agents
152
+ ### 4. Optional: manage a tool
254
153
 
255
- `fclt` is CLI-first. The practical setup is:
256
- 1. Install `fclt` globally so any agent runtime can execute it.
257
- 2. Use `fclt inventory`, `fclt list`, and `fclt consolidate` to inspect and normalize existing tool-native state.
258
- 3. Install the built-in operating-model pack into `~/.ai` or a project `.ai` when you want editable canonical defaults without managed rendering.
259
- 4. If you want fclt-owned rendered outputs, manage each agent tool with `fclt manage <tool>` and `fclt sync`.
260
- 5. Let the built-in operating-model layer render global writeback/evolution instructions into the tool only where managed rendering is worth the ownership tradeoff.
261
- 6. Optionally scaffold MCP wrappers if you want an MCP entry that delegates to `fclt`.
154
+ Managed mode writes rendered files into a tool home. Use it only when `fclt` should own that rendered surface.
262
155
 
263
156
  ```bash
264
- # Scaffold reusable templates in the canonical store
265
- fclt templates init agents
266
- fclt templates init agent review-operator
267
- fclt templates init skill facult-manager
268
-
269
- # Enable that skill for managed tools
270
- fclt manage codex
271
- fclt manage cursor
272
- fclt manage claude
273
- fclt enable facult-manager --for codex,cursor,claude
274
- fclt sync
157
+ fclt manage codex --dry-run
158
+ fclt manage codex --adopt-existing
159
+ fclt sync codex --dry-run
160
+ fclt sync codex
275
161
  ```
276
162
 
277
- Optional MCP scaffold:
163
+ Ordinary `fclt sync` does not import live tool edits into canonical state. If a live tool file was edited intentionally and should be promoted, run:
278
164
 
279
165
  ```bash
280
- fclt templates init mcp facult-cli
281
- fclt enable mcp:facult-cli --for codex,cursor,claude
282
- fclt sync
166
+ fclt sync --adopt-live
283
167
  ```
284
168
 
285
- Note: `templates init mcp ...` is a scaffold, not a running server by itself.
286
- The supported review surface today is the CLI plus generated Codex automation templates; MCP is an optional wrapper path when an agent environment prefers MCP calls over shell commands.
287
-
288
- ## Mental Model
169
+ Project-managed sync is default-deny. Repo-local tool outputs only receive assets that the project explicitly allows.
289
170
 
290
- `fclt` treats both `~/.ai` and `<repo>/.ai` as canonical stores. The global store is for user-owned reusable capability. The project store is for repo-owned capability that should travel with the codebase.
171
+ ## Core model
291
172
 
292
- Typical layout:
173
+ `fclt` separates source, generated state, runtime state, review artifacts, and rendered output.
293
174
 
294
175
  ```text
295
- ~/.ai/
296
- AGENTS.global.md
297
- AGENTS.override.global.md
298
- config.toml
299
- config.local.toml
300
- instructions/
301
- snippets/
302
- agents/
303
- skills/
304
- mcp/
305
- templates/
306
- tools/
307
- codex/
308
- config.toml
309
- plugins/
310
- marketplace.json
311
- rules/
312
- <repo>/
313
- .ai/
314
- config.toml
315
- instructions/
316
- snippets/
317
- agents/
318
- skills/
319
- tools/
320
- .facult/
321
- ai/
322
- index.json
323
- graph.json
324
- .codex/
325
- .agents/
326
- plugins/
327
- .claude/
176
+ ~/.ai/ global canonical capability
177
+ <repo>/.ai/ project canonical capability
178
+ ~/.ai/writebacks/ markdown review artifacts
179
+ ~/.ai/evolution/ markdown proposal artifacts
180
+ tool homes rendered output for Codex, Claude, Cursor, etc.
181
+ machine-local fclt state queues, drafts, indexes, managed state, runtime cache
328
182
  ```
329
183
 
330
- Important split:
331
- - `.ai/` is canonical source
332
- - global `.ai/.facult/ai/` is generated AI state for the global canonical root
333
- - project generated AI state lives in machine-local per-project Facult state, outside the repo
334
- - machine-local Facult state such as project indexes, project graphs, managed-tool state, autosync runtime/config, install metadata, and launcher caches lives outside project `.ai/`
335
- - tool homes such as `.codex/` and `.claude/` are rendered outputs
336
- - the generated capability graph lives under the active generated AI state directory
184
+ Canonical capability can include:
337
185
 
338
- ### Asset types
339
-
340
- The canonical store can contain several distinct asset classes:
341
-
342
- - `instructions/`: reusable doctrine and deeper conceptual guidance
343
- - `snippets/`: small composable blocks that can be inserted into rendered markdown
344
- - `agents/`: role-specific agent manifests
186
+ - `instructions/`: reusable markdown doctrine
187
+ - `snippets/`: composable blocks inserted into rendered markdown
345
188
  - `skills/`: workflow-specific capability folders
346
- - `mcp/`: canonical MCP server definitions
347
- - `mcp/servers.local.json` or `mcp/mcp.local.json`: ignored machine-local MCP secret overlay
348
- - `tools/<tool>/config.toml`: canonical tool config
349
- - `tools/<tool>/config.local.toml`: machine-local tool config overlay
350
- - `tools/<tool>/rules/*.rules`: canonical tool rules
351
- - global docs such as `AGENTS.global.md` and `AGENTS.override.global.md`
352
-
353
- Not every asset syncs directly to a tool. Some exist primarily to support rendered outputs or to be discovered and reused by other canonical assets.
354
-
355
- ### Canonical conventions
356
-
357
- - Use `instructions/` for reusable markdown documents
358
- - Use `snippets/` for composable partial blocks injected into markdown templates
359
- - Use `tools/codex/rules/*.rules` for actual Codex approval-policy rules
360
- - Use logical refs such as `@ai/instructions/WRITING.md` in tracked source
361
- - Use `@builtin/facult-operating-model/...` for packaged built-in defaults
362
- - Use `@project/...` when a tracked ref must resolve inside a repo-local `.ai`
363
- - Use config-backed refs in prompts where you want stable named references such as `${refs.writing_rule}`
364
-
365
- ### Config and env layering
366
-
367
- Canonical render context is layered explicitly:
368
- 1. built-ins injected by `fclt`
369
- 2. active canonical root `config.toml`
370
- 3. active canonical root `config.local.toml`
371
- 4. explicit runtime overrides
372
-
373
- Built-ins currently include:
374
- - `AI_ROOT`
375
- - `HOME`
376
- - `PROJECT_ROOT`
377
- - `PROJECT_SLUG`
378
- - `TARGET_TOOL`
379
- - `TARGET_PATH`
380
-
381
- Recommended split:
382
- - `~/.ai/config.toml` or `<repo>/.ai/config.toml`: tracked, portable, non-secret refs/defaults
383
- - `~/.ai/config.local.toml` or `<repo>/.ai/config.local.toml`: ignored, machine-local paths and secrets
384
- - `~/.ai/mcp/servers.json` or `<repo>/.ai/mcp/servers.json`: tracked canonical MCP definitions
385
- - `~/.ai/mcp/servers.local.json` or `<repo>/.ai/mcp/servers.local.json`: ignored machine-local MCP env overlay for secrets and per-machine auth
386
- - `~/.ai/tools/<tool>/config.toml` or `<repo>/.ai/tools/<tool>/config.toml`: tracked tool defaults
387
- - `~/.ai/tools/<tool>/config.local.toml` or `<repo>/.ai/tools/<tool>/config.local.toml`: ignored, machine-local tool overrides merged after tracked tool config during sync
388
- - `[builtin].sync_defaults = false`: disable builtin default sync/materialization for this root
389
- - `[project_sync.<tool>]`: explicit project-managed allowlist for assets that may render into repo-local tool outputs
390
- - `fclt sync --builtin-conflicts overwrite`: allow packaged builtin defaults to overwrite locally modified generated targets
391
- - `fclt audit fix ...`: move inline MCP secrets from tracked canonical config into the local MCP overlay and re-sync managed tool configs
392
-
393
- For project-local `.ai` roots, tool sync is default-deny. Nothing flows into repo-local managed tool outputs unless the repo explicitly opts in. Use `config.toml` or `config.local.toml` under the project root:
394
-
395
- ```toml
396
- version = 1
397
-
398
- [project_sync.codex]
399
- skills = ["hack-cli", "hack-tickets"]
400
- agents = ["review-operator"]
401
- automations = ["project-check"]
402
- mcp_servers = ["github"]
403
- global_docs = true
404
- tool_rules = true
405
- tool_config = true
406
- ```
189
+ - `agents/`: delegated roles
190
+ - `mcp/`: MCP server definitions and overlays
191
+ - `automations/`: scheduled review loops
192
+ - `tools/<tool>/`: tool config and rules
193
+ - `AGENTS.global.md`: composed agent guidance
407
194
 
408
- That policy applies to project-managed tool renders, including assets inherited from the merged global index. If you want a global skill or shared Codex automation inside project-managed output, name it explicitly here. `fclt doctor --repair` can materialize repo-local project assets into `config.local.toml` for already-managed project roots.
195
+ Refs let markdown point at canonical assets without hard-coding paths:
409
196
 
410
- ### Snippets
197
+ ```text
198
+ @ai/instructions/BUN.md
199
+ @project/instructions/TESTING.md
200
+ @builtin/facult-operating-model/instructions/WORK_UNITS.md
201
+ ```
411
202
 
412
- Snippets use HTML comment markers:
203
+ Snippet markers let repeated blocks stay independently editable:
413
204
 
414
205
  ```md
415
- <!-- fclty:global/codex/baseline -->
416
- <!-- /fclty:global/codex/baseline -->
206
+ <!-- fclty:global/lang/bun -->
207
+ <!-- /fclty:global/lang/bun -->
417
208
  ```
418
209
 
419
- Resolution rules:
420
- - unscoped marker `codingstyle` prefers `snippets/projects/<project>/codingstyle.md`, then falls back to `snippets/global/codingstyle.md`
421
- - explicit marker `global/codex/baseline` resolves directly to `snippets/global/codex/baseline.md`
210
+ The rule is simple: target the smallest unit that needs to change. Use instructions for doctrine, snippets for repeated blocks, skills for workflows, agents for roles, MCP/tool config for interfaces, and automations for scheduled loops.
422
211
 
423
- Commands:
212
+ ## Writeback and evolution
424
213
 
425
- ```bash
426
- fclt snippets list
427
- fclt snippets show global/codex/baseline
428
- fclt snippets sync [--dry-run] [file...]
429
- ```
430
-
431
- Snippets are already used during global Codex `AGENTS.md` rendering.
432
-
433
- ### Graph inspection
214
+ Writeback is preserved signal from real work. Evolution turns repeated signal into reviewed changes.
434
215
 
435
- The generated graph in `.ai/.facult/ai/graph.json` is queryable directly:
216
+ Record one targeted writeback when the signal is durable:
436
217
 
437
218
  ```bash
438
- fclt graph show instruction:WRITING
439
- fclt graph deps AGENTS.global.md
440
- fclt graph dependents @project/instructions/TESTING.md
219
+ fclt ai writeback add \
220
+ --kind weak_verification \
221
+ --summary "Checks were too shallow" \
222
+ --asset instruction:VERIFICATION
441
223
  ```
442
224
 
443
- This is the explicit dependency layer for:
444
- - snippet markers like `<!-- fclty:... -->`
445
- - config-backed refs like `${refs.*}`
446
- - canonical refs like `@ai/...`
447
- - project refs like `@project/...`
448
- - rendered outputs such as managed agents, docs, MCP configs, tool configs, and tool rules
449
-
450
- ### Writeback and evolution
451
-
452
- `fclt` also has a local writeback and evolution layer built on top of the graph:
225
+ Review accumulated signal:
453
226
 
454
227
  ```bash
455
- fclt ai writeback add \
456
- --kind weak_verification \
457
- --summary "Verification guidance did not distinguish shallow checks from meaningful proof." \
458
- --asset instruction:VERIFICATION \
459
- --tag verification \
460
- --tag false-positive
461
-
462
228
  fclt ai writeback list
463
- fclt ai writeback show WB-00001
464
229
  fclt ai writeback group --by asset
465
230
  fclt ai writeback summarize --by kind
466
- fclt ai evolve propose
467
- fclt ai evolve list
468
- fclt ai evolve show EV-00001
469
- fclt ai evolve draft EV-00001
470
- fclt ai evolve review EV-00001
471
- fclt ai evolve accept EV-00001
472
- fclt ai evolve reject EV-00001 --reason "Needs a tighter draft"
473
- fclt ai evolve supersede EV-00001 --by EV-00002
474
- fclt ai evolve apply EV-00001
475
- fclt ai evolve promote EV-00003 --to global --project
476
231
  ```
477
232
 
478
- Runtime writeback and evolution source state stays generated and machine-local:
479
- - global writeback state: machine-local Facult state under `.../global/ai/global/...`
480
- - project writeback state: machine-local per-project Facult state under `.../projects/<slug-hash>/ai/project/...`
481
- - editor-facing writeback review artifacts: `~/.ai/writebacks/global/*.md` and `~/.ai/writebacks/projects/<slug-hash>/*.md`
482
- - editor-facing evolution review artifacts: `~/.ai/evolution/global/*.md` and `~/.ai/evolution/projects/<slug-hash>/*.md`
483
-
484
- That split is intentional:
485
- - canonical source remains in `~/.ai` or `<repo>/.ai`
486
- - global generated index and graph state stays inside `~/.ai/.facult/`; JSON queues, proposal metadata, journals, draft refs, patches, and managed runtime state stay outside canonical source in machine-local state
487
- - human-readable review artifacts always live under the global `~/.ai` root, even when the signal is project-scoped
488
- - project repos do not receive bundled writeback/evolution review artifacts; project metadata such as cwd, project root, project slug, target refs, status, and evidence is captured in frontmatter instead
489
- - those records let agents and humans inspect what changed, why it changed, and how it was reviewed
490
-
491
- Use writeback when:
492
- - a task exposed a weak or misleading verification loop
493
- - an instruction or agent was missing key context
494
- - a pattern proved reusable enough to become doctrine
495
- - a project-local pattern deserves promotion toward global capability
496
- - a skill, tool, prompt, or default behavior repeatedly slows agents down without hard-failing
497
-
498
- Do not think of writeback as note-taking. Treat it as preserved signal that should improve the system.
499
-
500
- Recommended agent behavior:
501
- - record a writeback directly when the learning is durable, scoped, and targetable
502
- - prefer project scope for repo-specific tooling, tests, architecture, or workflow
503
- - use global scope for shared doctrine, shared skills, shared agents, or cross-project capability gaps
504
- - group or summarize before proposing evolution unless the missing capability is already obvious
505
- - use the smallest proposal kind that fits: `update_asset`, `create_asset`, `extract_snippet`, `add_skill`, or `promote_asset`
506
- - do not create proposals for one-off preferences, speculative ideas, or duplicate noise
507
-
508
- Current apply semantics are intentionally policy-bound:
509
- - targets are resolved through the generated graph when possible and fall back to canonical ref resolution for missing assets
510
- - apply is limited to markdown canonical assets
511
- - proposals must be drafted before they can be applied; higher-risk proposals still require explicit acceptance
512
- - supported proposal kinds currently include `create_instruction`, `update_instruction`, `create_agent`, `update_agent`, `update_asset`, `create_asset`, `extract_snippet`, `add_skill`, and `promote_asset`
513
- - low-risk project-scoped additive proposals such as `create_instruction` can be applied directly after drafting, while global and higher-risk proposals still require review/acceptance
514
-
515
- Current review/draft semantics:
516
- - `writeback group` and `writeback summarize` expose recurring patterns across `asset`, `kind`, and `domain` without mutating canonical assets
517
- - every writeback/proposal mutation refreshes a Markdown review artifact under global `~/.ai/writebacks/...` or `~/.ai/evolution/...` with frontmatter metadata
518
- - drafted proposals emit both a human-readable markdown draft and a patch artifact under machine-local generated state, and the latest draft body is mirrored into the global evolution review artifact
519
- - rerunning `evolve draft <id> --append ...` revises the draft and records draft history
520
- - `evolve promote --to global` creates a new high-risk global proposal from a project-scoped proposal; that promoted proposal can then be drafted, reviewed, and applied into `~/.ai`
521
-
522
- Review surfaces:
523
- - open `~/.ai/writebacks/` and `~/.ai/evolution/` in a Markdown editor for global and project-scoped review artifacts
524
- - `fclt status --json` reports queue/proposal paths, review artifact paths, and counts for the active scope
525
- - `fclt ai writeback list|show|group|summarize` reviews raw and clustered signal
526
- - `fclt ai evolve list|show|review` reviews proposal state without applying changes
527
- - `fclt templates init automation learning-review` scaffolds background writeback capture/review
528
- - `fclt templates init automation evolution-review` scaffolds periodic proposal review
529
- - `fclt templates init automation tool-call-audit` scaffolds repeated tool-friction review
530
-
531
- ### Scope and source selection
532
-
533
- Most inventory and sync commands support explicit canonical-root selection:
534
-
535
- - `--global` to force `~/.ai`
536
- - `--project` to force the nearest repo-local `.ai`
537
- - `--root /path/to/.ai` to point at a specific canonical root
538
- - `--scope merged|global|project` for discovery views
539
- - `--source builtin|global|project` to filter provenance in list/find/show/graph flows
540
-
541
- ## Security and Trust
542
-
543
- `fclt` has two trust layers:
544
- - Item trust: `fclt trust <name>` / `fclt untrust <name>`
545
- - Source trust: `fclt sources ...` with levels `trusted`, `review`, `blocked`
546
-
547
- Bulk trust annotations are also supported:
548
-
549
- ```bash
550
- fclt trust --all
551
- fclt trust skills --all
552
- fclt untrust mcp --all
553
- ```
554
-
555
- `fclt` also supports interactive and scripted audit flows:
556
-
557
- 1. Interactive audit workflow:
558
- ```bash
559
- fclt audit
560
- ```
561
- 2. Static audit rules (deterministic pattern checks):
562
- ```bash
563
- fclt audit --non-interactive --severity high
564
- fclt audit --non-interactive mcp:github --severity medium --json
565
- ```
566
- 3. Agent-based audit (Claude/Codex review pass):
567
- ```bash
568
- fclt audit --non-interactive --with claude --max-items 50
569
- fclt audit --non-interactive --with codex --max-items all --json
570
- ```
233
+ Draft a proposal only when the evidence repeats, a capability is clearly missing, or a canonical asset is stale:
571
234
 
572
- 4. Suppress or remediate reviewed findings:
573
235
  ```bash
574
- fclt audit safe mcp:github --rule static:mcp-env-inline-secret --note "global managed render only"
575
- fclt audit safe --all --source static --yes
576
- fclt audit fix mcp:github
577
- fclt audit fix --all --source combined --yes
236
+ fclt ai evolve propose
237
+ fclt ai evolve list
238
+ fclt ai evolve draft EV-00001
239
+ fclt ai evolve review EV-00001
578
240
  ```
579
241
 
580
- Recommended security flow:
581
- 1. `fclt verify-source <source>`
582
- 2. `fclt sources trust <source>` only after review
583
- 3. use `--strict-source-trust` for `install`/`update`
584
- 4. keep tracked canonical MCP config secret-free; use `mcp/servers.local.json` for machine-local secrets
585
- 5. run both static and agent audits on a schedule
242
+ Project-scoped additive markdown changes can be lower risk. Global instructions, shared skills, plugins, and other broad surfaces require review before apply.
586
243
 
587
- ## Comprehensive Reference
244
+ ## Built-in pack
588
245
 
589
- ### Command categories
246
+ `fclt` ships an operating-model pack that teaches agents how to work in loops instead of one-off prompts:
590
247
 
591
- - Inventory and discovery
592
- ```bash
593
- fclt scan [--from <path>] [--json] [--show-duplicates]
594
- fclt inventory [--from <path>] [--json] [--show-secrets]
595
- fclt list [skills|mcp|agents|snippets|instructions] [--enabled-for <tool>] [--untrusted] [--flagged] [--pending]
596
- fclt show <name>
597
- fclt show instruction:<name>
598
- fclt show mcp:<name> [--show-secrets]
599
- fclt find <query> [--json]
600
- ```
248
+ - define work units
249
+ - verify meaningfully
250
+ - compose capability units
251
+ - record writebacks
252
+ - synthesize repeated signal into proposals
253
+ - decide project vs global scope
254
+ - respect managed-mode ownership boundaries
601
255
 
602
- - Canonical store and migration
603
- ```bash
604
- fclt consolidate [--auto keep-current|keep-incoming|keep-newest] [--from <path> ...]
605
- fclt index [--force]
606
- fclt migrate [--from <path>] [--dry-run] [--move] [--write-config]
607
- ```
256
+ Install it without managing any tool:
608
257
 
609
- - Managed mode and rollout
610
258
  ```bash
611
- fclt manage <tool> [--dry-run] [--adopt-existing] [--existing-conflicts keep-canonical|keep-existing]
612
- fclt unmanage <tool>
613
- fclt managed
614
- fclt enable <name> [--for <tool1,tool2,...>]
615
- fclt enable mcp:<name> [--for <tool1,tool2,...>]
616
- fclt disable <name> [--for <tool1,tool2,...>]
617
- fclt trust --all
618
- fclt trust skills --all
619
- fclt untrust mcp --all
620
- fclt sync [tool] [--dry-run] [--adopt-live] [--builtin-conflicts overwrite]
621
- fclt autosync install [tool] [--git-remote <name>] [--git-branch <name>] [--git-interval-minutes <n>] [--git-disable]
622
- fclt autosync status [tool]
623
- fclt autosync restart [tool]
624
- fclt autosync uninstall [tool]
259
+ fclt templates init operating-model --global
260
+ fclt templates init operating-model --project
261
+ fclt templates init operating-model --root /path/to/.ai
625
262
  ```
626
263
 
627
- - Remote catalogs and policies
628
- ```bash
629
- fclt search <query> [--index <name>] [--limit <n>]
630
- fclt install <index:item> [--as <name>] [--force] [--strict-source-trust]
631
- fclt update [--apply] [--strict-source-trust]
632
- fclt verify-source <name> [--json]
633
- fclt sources list
634
- fclt sources trust <source> [--note <text>]
635
- fclt sources review <source> [--note <text>]
636
- fclt sources block <source> [--note <text>]
637
- fclt sources clear <source>
638
- ```
264
+ The pack is also available as built-in refs under:
639
265
 
640
- - Templates and snippets
641
- ```bash
642
- fclt templates list
643
- fclt templates init operating-model [--global|--project|--root PATH] [--force] [--dry-run]
644
- fclt templates init project-ai
645
- fclt templates init skill <name>
646
- fclt templates init mcp <name>
647
- fclt templates init agent <name>
648
- fclt templates init snippet <marker>
649
- fclt templates init agents
650
- fclt templates init automation <template-id> --scope global|project|wide [--name <name>] [--project-root <path>] [--cwds <path1,path2>] [--rrule <RRULE>] [--status PAUSED|ACTIVE]
651
-
652
- fclt snippets list
653
- fclt snippets show <marker>
654
- fclt snippets create <marker>
655
- fclt snippets edit <marker>
656
- fclt snippets sync [--dry-run] [file...]
266
+ ```text
267
+ @builtin/facult-operating-model/...
657
268
  ```
658
269
 
659
- ### Codex automations
660
-
661
- `templates init automation` can scaffold three Codex automation forms:
662
-
663
- - `--scope project` (single repo): set `--project-root` (or infer from current working directory)
664
- - `--scope wide|global` (multiple repos): set `--cwds` explicitly; if omitted, created automation has no `cwds` by default.
665
- - If you run it interactively without `--scope`, `fclt` prompts for scope and, where possible, known workspaces (git worktrees, configured scan roots, and existing Codex automation paths).
666
- - Built-in automation templates are opinionated: they reference the global Codex operating model, point at relevant Codex skills, and tell Codex when to use focused subagents for bounded review work.
667
-
668
- Recommended topology:
669
-
670
- - Use `learning-review --scope project` for project-scoped writeback and evolution. This keeps verification and follow-up scoped to the repo that produced the evidence while storing human-readable review artifacts under global `~/.ai/writebacks/projects/...` and `~/.ai/evolution/projects/...`.
671
- - Use `evolution-review` on a slower cadence, usually weekly, to triage open proposals and proposal-worthy clusters and suggest the next operator action (`draft`, `review`, `accept`, `reject`, `promote`, or `apply`).
672
- - Use a separate wide/global automation only for cross-repo or shared-surface review, such as global doctrine, shared skills, or repeated tool/agent patterns across repos.
673
- - If you do use a wide learning review, keep the `cwds` list intentionally small and related. The prompt is designed to partition by cwd first, not to blur unrelated repos together.
674
- - A practical default is daily `learning-review` plus weekly `evolution-review`. The first finds and records durable signal; the second keeps proposal review from stalling.
675
- - Add `tool-call-audit` when you want a focused background loop for repeated tool failures, missing skills, excessive retries, or shallow-success patterns.
676
- - Treat automations as review and synthesis loops. They should create writebacks and proposals when evidence is strong, but high-risk global changes still move through proposal review before apply.
677
-
678
- Files are written to:
270
+ ## Automation
679
271
 
680
- - `~/.codex/automations/<name>/automation.toml`
681
- - `~/.codex/automations/<name>/memory.md`
682
-
683
- When Codex is in managed mode, canonical automation sources live under:
684
-
685
- - `~/.ai/automations/<name>/...` for global automation state
686
- - `<repo>/.ai/automations/<name>/...` for project-scoped canonical state
687
-
688
- Managed sync renders global canonical automation directories into the shared live Codex automation store at `~/.codex/automations/` and only removes automation files that were previously rendered by the same canonical root. Project-scoped automation sources are default-deny; add their names to `[project_sync.codex].automations` before project managed sync can render them into that shared live store.
689
-
690
- Example project automation:
272
+ `fclt` can scaffold Codex automations for recurring review loops:
691
273
 
692
274
  ```bash
693
- fclt templates init automation tool-call-audit \
275
+ fclt templates init automation learning-review \
694
276
  --scope project \
695
277
  --project-root /path/to/repo \
696
- --name project-tool-audit \
697
- --status ACTIVE
698
- ```
699
-
700
- Example global automation:
701
-
702
- ```bash
703
- fclt templates init automation learning-review \
704
- --scope wide \
705
- --cwds /path/to/repo-a,/path/to/repo-b \
706
278
  --status PAUSED
707
- ```
708
-
709
- Example weekly evolution automation:
710
279
 
711
- ```bash
712
280
  fclt templates init automation evolution-review \
713
281
  --scope wide \
714
282
  --cwds /path/to/repo-a,/path/to/repo-b \
715
- --name weekly-evolution-review \
283
+ --status PAUSED
284
+
285
+ fclt templates init automation tool-call-audit \
286
+ --scope project \
287
+ --project-root /path/to/repo \
716
288
  --status PAUSED
717
289
  ```
718
290
 
719
- Interactive prompt example:
291
+ Use `learning-review` to preserve signal, `evolution-review` to triage proposals, and `tool-call-audit` to find repeated tool friction.
720
292
 
721
- ```bash
722
- fclt templates init automation learning-review
723
- # prompts for scope, then lets you select known workspaces or add custom paths.
724
- ```
293
+ ## Security and trust
294
+
295
+ Remote capability should be reviewed before broad use.
725
296
 
726
- For full flags and exact usage:
727
297
  ```bash
728
- fclt --help
729
- fclt <command> --help
298
+ fclt sources list
299
+ fclt verify-source skills.sh --json
300
+ fclt sources trust skills.sh --note "reviewed"
301
+ fclt install skills.sh:code-review --as code-review-skills-sh --strict-source-trust
730
302
  ```
731
303
 
732
- ### Root resolution
733
-
734
- `fclt` resolves the canonical root in this order:
735
- 1. `FACULT_ROOT_DIR`
736
- 2. nearest project `.ai` from the current working directory for CLI-facing commands
737
- 3. `~/.ai/.facult/config.json` (`rootDir`)
738
- 4. `~/.ai`
739
- 5. `~/agents/.facult` (or a detected legacy store under `~/agents/`)
740
-
741
- ### Runtime env vars
742
-
743
- - `FACULT_ROOT_DIR`: override canonical store location
744
- - `FACULT_VERSION`: version selector for `scripts/install.sh` (`latest` by default)
745
- - `FACULT_INSTALL_DIR`: install target dir for `scripts/install.sh` (`~/.ai/.facult/bin` by default)
746
- - `FACULT_INSTALL_PM`: force package manager detection for npm bootstrap launcher (`npm` or `bun`)
747
-
748
- ### State and report files
749
-
750
- Under canonical generated AI state (`~/.ai/.facult/` or `<repo>/.ai/.facult/`):
751
- - `sources.json` (latest inventory scan state)
752
- - `consolidated.json` (consolidation state)
753
- - `ai/index.json` (generated canonical AI inventory)
754
- - `audit/static-latest.json` (latest static audit report)
755
- - `audit/agent-latest.json` (latest agent audit report)
756
- - `trust/sources.json` (source trust policy state)
757
-
758
- Under machine-local Facult state:
759
- - `install.json` (machine-local install metadata)
760
- - `global/managed.json` or `projects/<slug-hash>/managed.json` (managed tool state)
761
- - `global/ai/global/writeback/queue.jsonl` and `projects/<slug-hash>/ai/project/writeback/queue.jsonl` (writeback queues)
762
- - `global/ai/global/evolution/` and `projects/<slug-hash>/ai/project/evolution/` (proposal metadata, markdown drafts, and patch artifacts)
763
- - `.../autosync/services/*.json` (autosync service configs)
764
- - `.../autosync/state/*.json` (autosync runtime state)
765
- - `.../autosync/logs/*` (autosync service logs)
766
- - `cache/runtime/<version>/<platform-arch>/...` under the macOS machine-local state root, or `runtime/<version>/<platform-arch>/...` under `FACULT_CACHE_DIR`/XDG cache roots on other platforms (npm launcher binary cache)
767
- - if that cache root is unavailable, the npm launcher falls back to a temp-dir runtime cache before using the bundled source fallback
768
-
769
- Under global Markdown review state (`~/.ai/`):
770
- - `writebacks/global/*.md` and `writebacks/projects/<slug-hash>/*.md` (frontmatter-rich writeback review artifacts)
771
- - `evolution/global/*.md` and `evolution/projects/<slug-hash>/*.md` (frontmatter-rich proposal review artifacts, including latest draft body when present)
772
-
773
- ### Config reference
774
-
775
- `~/.ai/.facult/config.json` supports:
776
- - `rootDir`
777
- - `scanFrom`
778
- - `scanFromIgnore`
779
- - `scanFromNoDefaultIgnore`
780
- - `scanFromMaxVisits`
781
- - `scanFromMaxResults`
782
-
783
- `scanFrom*` settings are used by `scan`/`audit` unless `--no-config-from` is passed.
784
-
785
- Example:
786
- ```json
787
- {
788
- "rootDir": "~/.ai",
789
- "scanFrom": ["~/dev", "~/work"],
790
- "scanFromIgnore": ["vendor", ".venv"],
791
- "scanFromNoDefaultIgnore": false,
792
- "scanFromMaxVisits": 20000,
793
- "scanFromMaxResults": 5000
794
- }
304
+ Audit local capability:
305
+
306
+ ```bash
307
+ fclt audit
308
+ fclt audit --non-interactive --severity high
309
+ fclt audit fix mcp:github
795
310
  ```
796
311
 
797
- ### Source aliases and custom indices
312
+ Keep tracked MCP config secret-free. Use local overlays such as `mcp/servers.local.json` for machine-specific secrets.
798
313
 
799
- Default source aliases:
800
- - `facult` (builtin templates)
801
- - `smithery`
802
- - `glama`
803
- - `skills.sh`
804
- - `clawhub`
314
+ ## Command Map
805
315
 
806
- Custom remote sources can be defined in `~/.ai/.facult/indices.json` (manifest URL, optional integrity, optional signature keys/signature verification settings).
316
+ Discovery:
807
317
 
808
- ## Autosync
318
+ ```bash
319
+ fclt status [--json]
320
+ fclt doctor [--json] [--repair]
321
+ fclt paths [--json]
322
+ fclt scan [--from <path>] [--json] [--show-duplicates]
323
+ fclt inventory [--json] [--tool <name>] [--show-secrets]
324
+ fclt list [skills|mcp|agents|snippets|instructions|automations]
325
+ fclt show <selector>
326
+ fclt find <query>
327
+ fclt graph show <selector>
328
+ fclt graph deps <selector>
329
+ fclt graph dependents <selector>
330
+ ```
809
331
 
810
- `fclt autosync` is the background propagation layer for managed installs.
332
+ Canonical store:
811
333
 
812
- Current v1 behavior:
813
- - macOS LaunchAgent-backed
814
- - immediate local managed-tool sync on the configured canonical root
815
- - periodic git autosync for the canonical repo
816
- - automatic autosync commits with source-tagged commit messages such as:
817
- - `chore(facult-autosync): sync canonical ai changes from <host> [service:all]`
334
+ ```bash
335
+ fclt templates list
336
+ fclt templates init operating-model [--global|--project|--root PATH]
337
+ fclt templates init project-ai
338
+ fclt templates init instruction <name>
339
+ fclt templates init snippet <marker>
340
+ fclt templates init skill <name>
341
+ fclt templates init agent <name>
342
+ fclt consolidate --auto keep-current --from <path>
343
+ fclt index [--force]
344
+ ```
818
345
 
819
- Recommended usage:
346
+ Managed mode:
820
347
 
821
348
  ```bash
822
- fclt autosync install
823
- fclt autosync status
349
+ fclt manage <tool> [--dry-run] [--adopt-existing]
350
+ fclt sync [tool] [--dry-run] [--adopt-live]
351
+ fclt enable <selector> --for codex,claude
352
+ fclt disable <selector> --for codex,claude
353
+ fclt managed
354
+ fclt unmanage <tool>
824
355
  ```
825
356
 
826
- Tool-scoped or project-local usage:
357
+ Writeback and evolution:
827
358
 
828
359
  ```bash
829
- cd /path/to/repo
830
- fclt autosync install codex
831
- fclt autosync status codex
360
+ fclt ai writeback add --kind <kind> --summary <text> --asset <selector>
361
+ fclt ai writeback list|show|group|summarize
362
+ fclt ai evolve propose|list|show|draft|review|accept|reject|apply|promote
832
363
  ```
833
364
 
834
- One-shot runner for verification/debugging:
365
+ Sources, audit, and updates:
835
366
 
836
367
  ```bash
837
- fclt autosync run --service all --once
368
+ fclt search <query>
369
+ fclt install <source:item> [--as <name>] [--strict-source-trust]
370
+ fclt update [--apply]
371
+ fclt sources list|trust|review|block|clear
372
+ fclt verify-source <name>
373
+ fclt audit [--non-interactive]
374
+ fclt self-update
838
375
  ```
839
376
 
840
- Remote git policy:
841
- - do not sync on every file event
842
- - mark the canonical repo dirty on local changes
843
- - on the configured timer, fetch, auto-commit local canonical changes if needed, pull `--rebase`, then push
844
- - if rebase conflicts occur, remote autosync is blocked and reported, but local managed-tool sync keeps running
377
+ Use `fclt --help` and `fclt <command> --help` for exact flags.
845
378
 
846
- ## Commit Hygiene
379
+ ## Documentation
847
380
 
848
- Some MCP config files can contain secrets. Keep local generated artifacts and secret-bearing config files ignored and out of commits.
381
+ Start with:
849
382
 
850
- Recommended practice:
851
- - tracked canonical MCP definitions in `mcp/servers.json` should not inline secrets
852
- - machine-local secrets belong in `mcp/servers.local.json` or `mcp/mcp.local.json`
853
- - global rendered configs under `~/.codex`, `~/.claude`, or similar can contain merged secret values as machine-local runtime output
854
- - repo-local rendered configs should be gitignored; `fclt audit` now flags inline secrets more aggressively when the destination is git-tracked or repo-local and not ignored
383
+ - [Concepts](./docs/concepts.md): roots, scopes, state layers, and asset types
384
+ - [Composable Capability](./docs/composable-capability.md): refs, snippets, instruction templates, and evolvable units
385
+ - [Project `.ai`](./docs/project-ai.md): repo-owned capability and project sync policy
386
+ - [Built-in pack](./docs/built-in-pack.md): packaged work-unit, writeback, and evolution defaults
387
+ - [Writeback and evolution](./docs/writeback-evolution.md): the feedback-loop workflow and review surfaces
388
+ - [Managed mode](./docs/managed-mode.md): when to let `fclt` write tool files
389
+ - [Roadmap](./docs/roadmap.md): current gaps and planned work
855
390
 
856
- ## Contributing
391
+ ## FAQ
857
392
 
858
- Contributor and release workflow details live in [CONTRIBUTING.md](./CONTRIBUTING.md).
393
+ ### Does fclt run an MCP server?
859
394
 
860
- ## FAQ
395
+ Not yet as a first-party runtime. Today, `fclt` is CLI-first. You can scaffold MCP definitions that delegate to the CLI, and a dedicated plugin/MCP surface is on the roadmap.
861
396
 
862
- ### Does fclt run its own MCP server today?
397
+ ### Does fclt have to manage Codex or Claude files?
863
398
 
864
- Not as a first-party `fclt mcp serve` runtime.
399
+ No. You can use `status`, `scan`, `inventory`, `list`, `show`, `graph`, `writeback`, and `evolve` without managed rendering. Use `manage` and `sync` only when `fclt` should write rendered output into a tool home.
865
400
 
866
- `fclt` currently focuses on inventory, trust/audit, install/update, writeback/evolution, and managed sync of canonical AI capability and tool-native outputs. Use the CLI directly from agents, or scaffold an MCP definition that delegates to the CLI when an environment needs an MCP-shaped entrypoint.
401
+ ### Where do project writebacks go?
867
402
 
868
- ### Does fclt now manage global AI config, not just skills and MCP?
403
+ Runtime JSON state stays machine-local. Human-readable review artifacts are mirrored under global `~/.ai/writebacks/projects/<slug-hash>/` and `~/.ai/evolution/projects/<slug-hash>/`, not inside repo-local `<repo>/.ai`.
869
404
 
870
- Yes. The core model now includes:
871
- - canonical user-owned AI source in `~/.ai`
872
- - rendered managed outputs in tool homes such as `~/.codex`, `~/.agents`, and `~/plugins`
873
- - global instruction docs such as `AGENTS.global.md`, rendered by default into `~/.codex/AGENTS.md`, `~/.claude/CLAUDE.md`, and `~/.cursor/AGENTS.md`
874
- - Codex-authored skills in `~/.agents/skills`
875
- - Codex local plugin marketplaces in `~/.agents/plugins/marketplace.json`
876
- - Codex local plugin bundles in `~/plugins/<plugin-name>`
877
- - tool-native configs such as `~/.codex/config.toml`
878
- - tool-native rule files such as `~/.codex/rules/*.rules`
405
+ ### What should be committed?
879
406
 
880
- ### Do I still need to run `fclt sync` manually?
407
+ Commit canonical project assets that belong to the repo: instructions, snippets, skills, agents, MCP definitions without secrets, and project sync policy. Do not commit generated state, machine-local review queues, rendered tool outputs, or secrets.
881
408
 
882
- If autosync is not installed, yes.
409
+ ## Contributing
883
410
 
884
- If autosync is installed, local changes under `~/.ai` propagate automatically to managed tools. Manual `fclt sync` is still useful for explicit repair, dry-runs, and non-daemon workflows.
411
+ Contributor and release workflow details live in [CONTRIBUTING.md](./CONTRIBUTING.md).