facult 2.7.0 → 2.7.2

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
@@ -24,170 +24,14 @@
24
24
 
25
25
  `fclt` is a CLI for building and evolving AI faculties across tools, users, and projects.
26
26
 
27
- Most AI tooling manages files. `fclt` manages faculties: the instructions, snippets, templates, skills, agents, rules, and learning loops that should compound, improve, and survive the next session.
27
+ `fclt` manages the reusable parts of your AI setup: instructions, snippets, templates, skills, agents, rules, and the feedback loops that improve them over time.
28
28
 
29
29
  It helps you:
30
- - turn repeated friction into reusable capability
31
- - preserve learning through writeback and evolve canonical assets over time
32
- - consolidate AI behavior into one canonical store
33
- - compose prompts, agents, skills, and tool outputs from reusable snippets and templates
34
- - discover what exists, what depends on what, and what should change next
35
- - sync managed outputs into Codex, Cursor, and Claude
36
- - review trust/security before installing remote content
37
- - keep that operating layer in a git-backed store under `~/.ai` and repo-local `.ai/`
38
-
39
- ## What fclt Is
40
-
41
- If your agent setup feels scattered, `fclt` gives it memory, structure, and a way to improve.
42
-
43
- A faculty is a reusable piece of AI behavior: an instruction, snippet, template, skill, agent, rule, or learned improvement that you want to keep around and make better.
44
-
45
- That matters because a lot of useful AI behavior is compositional. You want small reusable blocks, a clean way to assemble them into bigger prompts and operating layers, and a safe way to render the final tool-native outputs without losing the source structure.
46
-
47
- Think of it as:
48
- - a canonical home for your AI faculties
49
- - a composition system for snippets, templates, and rendered AI behavior
50
- - a sync layer for projecting them into real tools
51
- - a discovery graph for seeing what exists and what depends on what
52
- - a writeback/evolution loop for turning repeated friction into durable improvements
53
- - an inventory and trust boundary for the assets you let into the system
54
-
55
- ## What fclt Does
56
-
57
- `fclt` is not a skills folder with a nicer CLI.
58
-
59
- It works as five connected layers:
60
-
61
- 1. Canonical source
62
- - global capability in `~/.ai`
63
- - project capability in `<repo>/.ai`
64
- - optional built-in Facult capability packs for bootstrap and defaults
65
- 2. Discovery
66
- - inventory across skills, agents, snippets, instructions, MCP, and rendered surfaces
67
- - merged views across builtin, global, and project provenance
68
- - explicit dependency graph queries
69
- 3. Sync
70
- - managed tool outputs for Codex, Claude, Cursor, and other file-backed surfaces
71
- - rendered docs, agents, skills, MCP, config, and rules
72
- 4. Automation
73
- - background autosync for local propagation
74
- - optional git autosync for the canonical store
75
- 5. Evolution
76
- - writeback capture
77
- - proposal drafting and review
78
- - controlled apply back into canonical assets
79
-
80
- ## Default Operating Model
81
-
82
- `fclt` ships with a built-in operating model for learning, writeback, and capability evolution. That pack includes default:
83
-
84
- - instructions for evolution, integration, and project capability
85
- - specialist agents such as `writeback-curator`, `evolution-planner`, and `scope-promoter`
86
- - skills such as `capability-evolution` and `project-operating-layer-design`
87
-
88
- When managed sync is enabled, these built-in assets are available by default even if you never copy them into `~/.ai`.
89
-
90
- That means:
91
- - builtin skills sync into managed tool skill directories by default
92
- - builtin agents sync into tool agent directories when the tool supports agents
93
- - if you do not author your own `AGENTS.global.md`, `fclt` renders a builtin global baseline doc into tool-native global docs
94
-
95
- The activation point is managed mode:
96
- - until you run `fclt manage <tool>`, the builtin operating-model layer is just packaged capability
97
- - once a tool is managed, the default operating-model layer becomes live for that tool automatically
98
- - for Codex, Claude, and Cursor, that means the core global doc surface plus the bundled writeback/evolution agents and skills are what agents actually see on disk
99
- - this is why the normal setup step is to manage the tools you care about first, then sync
100
-
101
- This is intentionally virtual at the canonical level:
102
- - builtin defaults remain part of the packaged tool
103
- - your personal `~/.ai` stays clean unless you explicitly vendor or override something
104
- - the live tool output on disk still contains the rendered defaults, so users and agents can read them directly
105
-
106
- In practice, this means the system is meant to learn by default. The CLI is there when you want to operate it directly, but the default skills, agents, and global docs are supposed to make writeback and evolution available without ceremony.
107
-
108
- More concretely:
109
- - the normal path is not a human manually typing `fclt ai ...` after every task
110
- - the bundled operating-model layer is meant to instruct synced agents and skills to notice reusable signal, preserve it, and push it toward writeback/evolution
111
- - the CLI remains the explicit operator surface for inspection, review, cleanup, and controlled apply
112
- - the generated state under `.ai/.facult/` gives those agents a durable thread of what was learned, when it was learned, what asset it pointed at, and what proposals or reviews happened afterward
113
-
114
- If you want to disable the builtin default layer for a specific global or project canonical root:
115
-
116
- ```toml
117
- version = 1
118
-
119
- [builtin]
120
- sync_defaults = false
121
- ```
122
-
123
- Put that in `config.toml` or `config.local.toml` under the active canonical root.
124
-
125
- ## Core Concepts
126
-
127
- ### Canonical vs rendered
128
-
129
- `fclt` separates source-of-truth from tool-native output.
130
-
131
- - canonical source lives in `~/.ai` or `<repo>/.ai`
132
- - rendered outputs live in tool homes like `~/.codex`, `<repo>/.codex`, `~/.claude`, or `~/.cursor`
133
- - generated Facult-owned state lives in `~/.ai/.facult` or `<repo>/.ai/.facult`
134
-
135
- This keeps authored capability portable and reviewable while still producing the exact files each tool expects.
136
-
137
- ### Global vs project capability
138
-
139
- Use global `~/.ai` for reusable personal defaults:
140
- - cross-project instructions
141
- - reusable specialist agents
142
- - shared skills
143
- - default tool config and rules
144
-
145
- Use project `.ai/` for repo-owned capability:
146
- - project-specific instructions and snippets
147
- - local architecture/testing doctrine
148
- - project agents and skills that should travel with the codebase
149
- - repo-local rendered outputs for teammates
150
-
151
- Project capability is allowed to extend or shadow global capability in merged views, but it does not silently mutate the global source of truth.
152
-
153
- ### The capability graph
154
-
155
- `fclt` builds a generated graph of explicit relationships between canonical assets and rendered outputs.
156
-
157
- That graph tracks things like:
158
- - snippet markers
159
- - `@ai/...` and `@project/...` refs
160
- - `${refs.*}` symbolic refs
161
- - rendered-target edges from canonical source to live tool files
162
-
163
- This makes it possible to answer:
164
- - what capability do I already have?
165
- - what instructions or snippets does this agent depend on?
166
- - what rendered files change if I update this canonical asset?
167
- - what project asset is shadowing a global asset?
168
-
169
- ### Writeback and evolution
170
-
171
- `fclt` treats repeated failures, weak loops, missing context, and reusable patterns as signal worth preserving.
172
-
173
- Writeback is the act of recording that signal in a structured way.
174
- Evolution is the act of grouping that signal into reviewable proposals and applying it back into canonical assets.
175
-
176
- The intended workflow is agent-driven by default:
177
- - synced global docs, agents, and skills should push your tooling toward creating writebacks when something important was learned
178
- - specialist agents such as `writeback-curator`, `evolution-planner`, and `scope-promoter` are there to help turn that signal into cleaner proposals and scope decisions
179
- - the CLI is what you use when you want to inspect, override, review, reject, apply, or otherwise operate the system directly
180
- - the point is not a new UI. The point is that the operating layer itself can accumulate memory and context across tasks, sessions, and tools
181
-
182
- This matters because otherwise the same problems repeat in chat without ever improving the actual operating layer. With `fclt`, you can:
183
- - record a weak verification pattern
184
- - group repeated writebacks around an instruction or agent
185
- - draft a proposal to tighten that canonical asset
186
- - review and apply the change in a controlled way
187
-
188
- The point is not just better storage. The point is that your AI setup can change shape as it learns.
189
-
190
- That is the core idea behind `fclt`: not just syncing skills, but growing faculties.
30
+ - keep a canonical store in `~/.ai` or `<repo>/.ai`
31
+ - render managed tool files into Codex, Claude, Cursor, and similar tools
32
+ - inspect dependencies, provenance, and rendered outputs
33
+ - review trust and audit remote or local capability before it spreads
34
+ - capture writebacks and evolve canonical assets over time
191
35
 
192
36
  ## Quick Start
193
37
 
@@ -241,67 +85,64 @@ Pin to a specific version:
241
85
  fclt self-update --version 0.0.1
242
86
  ```
243
87
 
244
- ### 2. Start with a read-only inventory (recommended first)
88
+ ### 2. Scan or bootstrap your canonical store
245
89
 
246
90
  ```bash
247
91
  fclt scan --show-duplicates
248
- # optional machine-readable output
249
- fclt scan --json
250
92
  ```
251
93
 
252
- `scan` is read-only. It inspects local configs and reports what `facult` found without changing files.
94
+ `scan` is read-only. It inspects local configs and reports what `fclt` found without changing files.
253
95
 
254
- ### 3. Import existing skills/configs
96
+ If you want a repo-local `.ai`:
255
97
 
256
98
  ```bash
257
- fclt consolidate --auto keep-current --from ~/.codex/skills --from ~/.agents/skills
99
+ cd /path/to/repo
100
+ fclt templates init project-ai
258
101
  fclt index
259
102
  ```
260
103
 
261
- Why `keep-current`: it is deterministic and non-interactive for duplicate sources.
262
-
263
- Canonical source root: `~/.ai` for global work, or `<repo>/.ai` for project-local work.
104
+ ### 3. Import existing skills or config
264
105
 
265
- Generated AI state that belongs with the canonical root lives inside that root:
266
- - global: `~/.ai/.facult/ai/...`
267
- - project: `<repo>/.ai/.facult/ai/...`
106
+ ```bash
107
+ fclt consolidate --auto keep-current --from ~/.codex/skills --from ~/.agents/skills
108
+ fclt index
109
+ ```
268
110
 
269
- Machine-local operational state lives outside the canonical root:
270
- - macOS state: `~/Library/Application Support/fclt/...`
271
- - macOS cache: `~/Library/Caches/fclt/...`
272
- - Linux/other state: `${XDG_STATE_HOME:-~/.local/state}/fclt/...`
273
- - Linux/other cache: `${XDG_CACHE_HOME:-~/.cache}/fclt/...`
111
+ Why `keep-current`: it is deterministic and non-interactive for duplicate sources.
274
112
 
275
- ### 3b. Bootstrap a repo-local `.ai`
113
+ ### 4. Manage a tool and sync
276
114
 
277
115
  ```bash
278
- cd /path/to/repo
279
- bunx fclt templates init project-ai
280
- bunx fclt index
116
+ fclt manage codex --dry-run
117
+ fclt manage codex --adopt-existing
118
+ fclt sync codex --builtin-conflicts overwrite
119
+ fclt manage cursor
120
+ fclt manage claude
121
+
122
+ fclt enable requesting-code-review receiving-code-review brainstorming systematic-debugging --for codex,cursor,claude
123
+ fclt sync
281
124
  ```
282
125
 
283
- This seeds `<repo>/.ai` from the built-in Facult operating-model pack and writes a merged project index/graph under `<repo>/.ai/.facult/ai/`.
126
+ 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 with `--adopt-existing` and add `--existing-conflicts keep-canonical|keep-existing` if names collide.
284
127
 
285
- Wide learning-review automations should use this same bootstrap when they hit a local writable repo with durable project-local signal but no repo-local `.ai` yet.
128
+ Codex path policy:
129
+ - skills render to `.agents/skills`
130
+ - local plugin marketplaces render to `.agents/plugins/marketplace.json`
131
+ - local plugin bundles render to `plugins/`
132
+ - Codex runtime config, rules, agents, and automations still render under `.codex/`
286
133
 
287
- ### 4. Inspect what you have
134
+ 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.
135
+
136
+ ### 5. Inspect and evolve
288
137
 
289
138
  ```bash
290
139
  fclt list skills
291
- fclt list instructions
292
- fclt list mcp
293
- fclt show requesting-code-review
294
140
  fclt show instruction:WRITING
295
141
  fclt show mcp:github
296
142
  fclt find verification
297
- fclt graph show instruction:WRITING
298
- fclt graph deps AGENTS.global.md
299
- fclt graph dependents @ai/instructions/WRITING.md
143
+ fclt graph AGENTS.global.md
300
144
  fclt ai writeback add --kind weak_verification --summary "Checks were too shallow" --asset instruction:VERIFICATION
301
145
  fclt ai evolve propose
302
- fclt ai evolve draft EV-00001
303
- fclt ai evolve accept EV-00001
304
- fclt ai evolve apply EV-00001
305
146
  ```
306
147
 
307
148
  Context controls:
@@ -310,66 +151,67 @@ Context controls:
310
151
  fclt list instructions --global
311
152
  fclt list instructions --project
312
153
  fclt find verification --scope merged --source project
313
- fclt sync codex --project
314
- fclt autosync status --global
315
154
  fclt list agents --root /path/to/repo/.ai
316
155
  ```
317
156
 
318
- ### 5. Enable managed mode for your tools
157
+ ### 6. Optional: autosync, source trust, and audit
319
158
 
320
159
  ```bash
321
- fclt manage codex --dry-run
322
- fclt manage codex --adopt-existing
323
- fclt sync codex --builtin-conflicts overwrite
324
- fclt manage cursor
325
- fclt manage claude
160
+ fclt autosync install --git-remote origin --git-branch main --git-interval-minutes 60
161
+ fclt autosync status
326
162
 
327
- fclt enable requesting-code-review receiving-code-review brainstorming systematic-debugging --for codex,cursor,claude
328
- fclt sync
163
+ fclt sources list
164
+ fclt verify-source skills.sh --json
165
+ fclt sources trust skills.sh --note "reviewed"
166
+ fclt install skills.sh:code-review --as code-review-skills-sh --strict-source-trust
167
+
168
+ fclt audit
169
+ fclt audit --non-interactive --severity high
170
+ fclt audit safe mcp:github --rule static:mcp-env-inline-secret --note "reviewed"
171
+ fclt audit fix mcp:github
329
172
  ```
330
173
 
331
- At this point, your selected skills are actively synced to all managed tools.
332
- This is also the point where the default operating-model layer becomes active for those tools. If you manage Codex or Claude, the bundled learning/writeback/evolution guidance is no longer just discoverable in `fclt`; it is rendered into the managed global doc surface and synced alongside the bundled agents and skills.
174
+ ## Overview
333
175
 
334
- If you run these commands from inside a repo that has `<repo>/.ai`, `facult` targets the project-local canonical store and repo-local tool outputs by default.
335
- On first entry to managed mode, use `--dry-run` first if the live tool already has local content. `facult` will show what it would adopt into the active canonical store across skills, agents, docs, rules, config, and MCP, plus any conflicts. Then rerun with `--adopt-existing`; if names or files collide, add `--existing-conflicts keep-canonical` or `--existing-conflicts keep-existing`.
336
- For builtin-backed rendered defaults, `facult` now tracks the last managed render hash. If a user edits the generated target locally, normal sync warns and preserves that local edit instead of silently overwriting it. To replace the local edit with the latest packaged builtin default, rerun sync with `--builtin-conflicts overwrite`.
176
+ 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.
337
177
 
338
- ### 6. Turn on background autosync
178
+ `fclt` is a canonical store plus a renderer:
179
+ - canonical store in `~/.ai` or `<repo>/.ai`
180
+ - rendered tool files in places like `~/.codex`, `~/.claude`, or repo-local tool dirs
181
+ - discovery and graph views for dependencies, provenance, and rendered targets
182
+ - writeback and evolution flows for improving canonical assets over time
339
183
 
340
- ```bash
341
- fclt autosync install --git-remote origin --git-branch main --git-interval-minutes 60
342
- fclt autosync status
343
- ```
184
+ ## Built-in Defaults
344
185
 
345
- This installs a macOS LaunchAgent that:
346
- - watches the active canonical root (`~/.ai` or `<repo>/.ai`) for local changes and syncs managed tool outputs automatically
347
- - tracks dirty state for the canonical repo
348
- - runs a slower git autosync loop that batches changes, auto-commits them, rebases on the configured remote branch, and pushes on success
186
+ `fclt` includes a built-in layer for writeback and evolution. By default, that layer provides:
187
+ - instructions for evolution, integration, and project capability
188
+ - agents such as `writeback-curator`, `evolution-planner`, and `scope-promoter`
189
+ - skills such as `capability-evolution` and `project-operating-layer-design`
349
190
 
350
- If the repo hits a rebase conflict, remote autosync stops and reports the blocked state, but local tool sync continues.
191
+ Those built-in defaults become live when you manage a tool. Global tool management renders the bundled docs, agents, and skills into that tool’s live files. Project-local `.ai` roots do not sync the built-in operating-model layer unless you explicitly enable it.
351
192
 
352
- ### 7. Turn on source trust and strict install flow
193
+ If you want to disable default built-in sync for one canonical root:
353
194
 
354
- ```bash
355
- fclt sources list
356
- fclt verify-source skills.sh --json
357
- fclt sources trust skills.sh --note "reviewed"
195
+ ```toml
196
+ version = 1
358
197
 
359
- fclt install skills.sh:code-review --as code-review-skills-sh --strict-source-trust
198
+ [builtin]
199
+ sync_defaults = false
360
200
  ```
361
201
 
202
+ Put that in `config.toml` or `config.local.toml` under the active canonical root.
203
+
362
204
  ## Use fclt from your agents
363
205
 
364
- `facult` is CLI-first. The practical setup is:
365
- 1. Install `facult` globally so any agent runtime can execute it.
366
- 2. Put allowed `facult` workflows in your agent instructions/skills.
367
- 3. Optionally scaffold MCP wrappers if you want an MCP entry that delegates to `facult`.
206
+ `fclt` is CLI-first. The practical setup is:
207
+ 1. Install `fclt` globally so any agent runtime can execute it.
208
+ 2. Put allowed `fclt` workflows in your agent instructions and skills.
209
+ 3. Optionally scaffold MCP wrappers if you want an MCP entry that delegates to `fclt`.
368
210
 
369
211
  ```bash
370
212
  # Scaffold reusable templates in the canonical store
371
213
  fclt templates init agents
372
- fclt templates init claude
214
+ fclt templates init agent review-operator
373
215
  fclt templates init skill facult-manager
374
216
 
375
217
  # Enable that skill for managed tools
@@ -390,9 +232,9 @@ fclt sync
390
232
 
391
233
  Note: `templates init mcp ...` is a scaffold, not a running server by itself.
392
234
 
393
- ## The `.ai` Model
235
+ ## Mental Model
394
236
 
395
- `facult` treats both `~/.ai` and `<repo>/.ai` as canonical AI stores. The global store is for personal reusable capability; the project store is for repo-owned capability that should travel with the codebase.
237
+ `fclt` treats both `~/.ai` and `<repo>/.ai` as canonical stores. The global store is for personal reusable capability. The project store is for repo-owned capability that should travel with the codebase.
396
238
 
397
239
  Typical layout:
398
240
 
@@ -411,6 +253,8 @@ Typical layout:
411
253
  tools/
412
254
  codex/
413
255
  config.toml
256
+ plugins/
257
+ marketplace.json
414
258
  rules/
415
259
  <repo>/
416
260
  .ai/
@@ -425,6 +269,8 @@ Typical layout:
425
269
  index.json
426
270
  graph.json
427
271
  .codex/
272
+ .agents/
273
+ plugins/
428
274
  .claude/
429
275
  ```
430
276
 
@@ -458,14 +304,14 @@ Not every asset syncs directly to a tool. Some exist primarily to support render
458
304
  - Use `snippets/` for composable partial blocks injected into markdown templates
459
305
  - Use `tools/codex/rules/*.rules` for actual Codex approval-policy rules
460
306
  - Use logical refs such as `@ai/instructions/WRITING.md` in tracked source
461
- - Use `@builtin/facult-operating-model/...` for packaged Facult defaults
307
+ - Use `@builtin/facult-operating-model/...` for packaged built-in defaults
462
308
  - Use `@project/...` when a tracked ref must resolve inside a repo-local `.ai`
463
309
  - Use config-backed refs in prompts where you want stable named references such as `${refs.writing_rule}`
464
310
 
465
311
  ### Config and env layering
466
312
 
467
313
  Canonical render context is layered explicitly:
468
- 1. built-ins injected by `facult`
314
+ 1. built-ins injected by `fclt`
469
315
  2. active canonical root `config.toml`
470
316
  3. active canonical root `config.local.toml`
471
317
  4. explicit runtime overrides
@@ -486,9 +332,26 @@ Recommended split:
486
332
  - `~/.ai/tools/<tool>/config.toml` or `<repo>/.ai/tools/<tool>/config.toml`: tracked tool defaults
487
333
  - `~/.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
488
334
  - `[builtin].sync_defaults = false`: disable builtin default sync/materialization for this root
335
+ - `[project_sync.<tool>]`: explicit project-managed allowlist for assets that may render into repo-local tool outputs
489
336
  - `fclt sync --builtin-conflicts overwrite`: allow packaged builtin defaults to overwrite locally modified generated targets
490
337
  - `fclt audit fix ...`: move inline MCP secrets from tracked canonical config into the local MCP overlay and re-sync managed tool configs
491
338
 
339
+ 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:
340
+
341
+ ```toml
342
+ version = 1
343
+
344
+ [project_sync.codex]
345
+ skills = ["hack-cli", "hack-tickets"]
346
+ agents = ["review-operator"]
347
+ mcp_servers = ["github"]
348
+ global_docs = true
349
+ tool_rules = true
350
+ tool_config = true
351
+ ```
352
+
353
+ That policy applies to project-managed tool renders, including assets inherited from the merged global index. If you want a global skill inside a repo-local managed Codex output, name it explicitly here. `fclt doctor --repair` can materialize repo-local project assets into `config.local.toml` for already-managed project roots.
354
+
492
355
  ### Snippets
493
356
 
494
357
  Snippets use HTML comment markers:
@@ -531,7 +394,7 @@ This is the explicit dependency layer for:
531
394
 
532
395
  ### Writeback and evolution
533
396
 
534
- `facult` also has a local writeback/evolution substrate built on top of the graph:
397
+ `fclt` also has a local writeback and evolution layer built on top of the graph:
535
398
 
536
399
  ```bash
537
400
  fclt ai writeback add \
@@ -563,8 +426,8 @@ Runtime state stays generated and local inside the active canonical root:
563
426
 
564
427
  That split is intentional:
565
428
  - canonical source remains in `~/.ai` or `<repo>/.ai`
566
- - writeback queues, journals, proposal records, trust state, autosync state, and other Facult-owned runtime/config state stay inside `.ai/.facult/` rather than inside the tool homes
567
- - those records create a historical thread agents can inspect over time: what changed, what triggered it, which asset it pointed at, what proposal was drafted, how it was reviewed, and whether it was applied or rejected
429
+ - writeback queues, journals, proposal records, trust state, autosync state, and other generated runtime/config state stay inside `.ai/.facult/`
430
+ - those records let agents inspect what changed, why it changed, and how it was reviewed
568
431
 
569
432
  Use writeback when:
570
433
  - a task exposed a weak or misleading verification loop
@@ -572,15 +435,7 @@ Use writeback when:
572
435
  - a pattern proved reusable enough to become doctrine
573
436
  - a project-local pattern deserves promotion toward global capability
574
437
 
575
- Do not think of writeback as taking notes.” Think of it as preserving signal that should change the system, not just the current conversation.
576
-
577
- For many users, the normal entrypoint is not the CLI directly. The builtin operating-model layer is designed so synced agents, skills, and global docs can push the system toward writeback and evolution by default, while the `fclt ai ...` commands remain the explicit operator surface when you want direct control.
578
-
579
- In other words:
580
- - agents should be the ones noticing friction and capturing it
581
- - skills should be the ones teaching when writeback or evolution is warranted
582
- - proposal history should give future agents enough context to understand why a rule, instruction, or prompt changed
583
- - you drop to the CLI when you want to inspect the thread, steer it, or make the final call
438
+ Do not think of writeback as note-taking. Treat it as preserved signal that should improve the system.
584
439
 
585
440
  Current apply semantics are intentionally policy-bound:
586
441
  - targets are resolved through the generated graph when possible and fall back to canonical ref resolution for missing assets
@@ -607,11 +462,19 @@ Most inventory and sync commands support explicit canonical-root selection:
607
462
 
608
463
  ## Security and Trust
609
464
 
610
- `facult` has two trust layers:
465
+ `fclt` has two trust layers:
611
466
  - Item trust: `fclt trust <name>` / `fclt untrust <name>`
612
467
  - Source trust: `fclt sources ...` with levels `trusted`, `review`, `blocked`
613
468
 
614
- `facult` also supports two audit modes:
469
+ Bulk trust annotations are also supported:
470
+
471
+ ```bash
472
+ fclt trust --all
473
+ fclt trust skills --all
474
+ fclt untrust mcp --all
475
+ ```
476
+
477
+ `fclt` also supports interactive and scripted audit flows:
615
478
 
616
479
  1. Interactive audit workflow:
617
480
  ```bash
@@ -628,23 +491,23 @@ fclt audit --non-interactive --with claude --max-items 50
628
491
  fclt audit --non-interactive --with codex --max-items all --json
629
492
  ```
630
493
 
494
+ 4. Suppress or remediate reviewed findings:
495
+ ```bash
496
+ fclt audit safe mcp:github --rule static:mcp-env-inline-secret --note "global managed render only"
497
+ fclt audit safe --all --source static --yes
498
+ fclt audit fix mcp:github
499
+ fclt audit fix --all --source combined --yes
500
+ ```
501
+
631
502
  Recommended security flow:
632
503
  1. `fclt verify-source <source>`
633
504
  2. `fclt sources trust <source>` only after review
634
505
  3. use `--strict-source-trust` for `install`/`update`
635
- 4. run both static and agent audits on a schedule
506
+ 4. keep tracked canonical MCP config secret-free; use `mcp/servers.local.json` for machine-local secrets
507
+ 5. run both static and agent audits on a schedule
636
508
 
637
509
  ## Comprehensive Reference
638
510
 
639
- ### Capability categories
640
-
641
- - Inventory: discover local skills, MCP configs, hooks, and instruction files
642
- - Management: consolidate, index, manage/unmanage tools, enable/disable entries, manage canonical AI config
643
- - Security: static audit, agent audit, item trust, source trust, source verification
644
- - Distribution: search/install/update from catalogs and verified manifests
645
- - DX: scaffold templates and sync snippets into instruction/config files
646
- - Automation: background autosync for local tool propagation and canonical repo git sync
647
-
648
511
  ### Command categories
649
512
 
650
513
  - Inventory and discovery
@@ -672,6 +535,9 @@ fclt managed
672
535
  fclt enable <name> [--for <tool1,tool2,...>]
673
536
  fclt enable mcp:<name> [--for <tool1,tool2,...>]
674
537
  fclt disable <name> [--for <tool1,tool2,...>]
538
+ fclt trust --all
539
+ fclt trust skills --all
540
+ fclt untrust mcp --all
675
541
  fclt sync [tool] [--dry-run] [--builtin-conflicts overwrite]
676
542
  fclt autosync install [tool] [--git-remote <name>] [--git-branch <name>] [--git-interval-minutes <n>] [--git-disable]
677
543
  fclt autosync status [tool]
@@ -698,9 +564,9 @@ fclt templates list
698
564
  fclt templates init project-ai
699
565
  fclt templates init skill <name>
700
566
  fclt templates init mcp <name>
567
+ fclt templates init agent <name>
701
568
  fclt templates init snippet <marker>
702
569
  fclt templates init agents
703
- fclt templates init claude
704
570
  fclt templates init automation <template-id> --scope global|project|wide [--name <name>] [--project-root <path>] [--cwds <path1,path2>] [--rrule <RRULE>] [--status PAUSED|ACTIVE]
705
571
 
706
572
  fclt snippets list
@@ -783,7 +649,7 @@ fclt <command> --help
783
649
 
784
650
  ### Root resolution
785
651
 
786
- `facult` resolves the canonical root in this order:
652
+ `fclt` resolves the canonical root in this order:
787
653
  1. `FACULT_ROOT_DIR`
788
654
  2. nearest project `.ai` from the current working directory for CLI-facing commands
789
655
  3. `~/.ai/.facult/config.json` (`rootDir`)
@@ -850,18 +716,6 @@ Default source aliases:
850
716
 
851
717
  Custom remote sources can be defined in `~/.ai/.facult/indices.json` (manifest URL, optional integrity, optional signature keys/signature verification settings).
852
718
 
853
- ## Local Install Modes
854
-
855
- For local CLI setup (outside npm global install), use:
856
-
857
- ```bash
858
- bun run install:dev
859
- bun run install:bin
860
- bun run install:status
861
- ```
862
-
863
- Default install path is `~/.ai/.facult/bin/fclt`. You can pass a custom target dir via `--dir=/path`.
864
-
865
719
  ## Autosync
866
720
 
867
721
  `fclt autosync` is the background propagation layer for managed installs.
@@ -880,7 +734,7 @@ fclt autosync install
880
734
  fclt autosync status
881
735
  ```
882
736
 
883
- Project-local usage:
737
+ Tool-scoped or project-local usage:
884
738
 
885
739
  ```bash
886
740
  cd /path/to/repo
@@ -888,12 +742,6 @@ fclt autosync install codex
888
742
  fclt autosync status codex
889
743
  ```
890
744
 
891
- Tool-scoped service:
892
-
893
- ```bash
894
- fclt autosync install codex
895
- ```
896
-
897
745
  One-shot runner for verification/debugging:
898
746
 
899
747
  ```bash
@@ -906,66 +754,19 @@ Remote git policy:
906
754
  - on the configured timer, fetch, auto-commit local canonical changes if needed, pull `--rebase`, then push
907
755
  - if rebase conflicts occur, remote autosync is blocked and reported, but local managed-tool sync keeps running
908
756
 
909
- ## CI and Release Automation
910
-
911
- - CI workflow: `.github/workflows/ci.yml`
912
- - Release workflow: `.github/workflows/release.yml`
913
- - Semantic-release config: `.releaserc.json`
914
-
915
- Release behavior:
916
- 1. Every push to `main` runs full checks.
917
- 2. `semantic-release` creates the version/tag and GitHub release (npm publish is disabled in this phase).
918
- 3. The same release workflow then builds platform binaries and uploads them to that GitHub release.
919
- 4. npm publish runs only after binary asset upload succeeds (`publish-npm` depends on `publish-assets`).
920
- 5. Published release assets include platform binaries, `fclt-install.sh`, `facult-install.sh`, and `SHA256SUMS`.
921
- 6. When `HOMEBREW_TAP_TOKEN` is configured, the release workflow also updates the Homebrew tap at `hack-dance/homebrew-tap`.
922
- 7. The npm package launcher resolves your platform, downloads the matching release binary, caches it under the machine-local cache root (`~/Library/Caches/fclt/runtime/...` on macOS or `${XDG_CACHE_HOME:-~/.cache}/fclt/runtime/...` elsewhere), and runs it.
923
-
924
- Current prebuilt binary targets:
925
- - `darwin-x64`
926
- - `darwin-arm64`
927
- - `linux-x64`
928
- - `windows-x64`
929
-
930
- Self-update behavior:
931
- 1. npm/bun global install: updates via package manager (`npm install -g facult@...` or `bun add -g facult@...`).
932
- 2. Direct binary install (release script/local binary path): downloads and replaces the binary in place.
933
- 3. Use `fclt self-update` (or `fclt update --self`).
934
-
935
- Required secrets for publish:
936
- - `NPM_TOKEN`
937
- - `HOMEBREW_TAP_TOKEN` (fine-grained token with contents write access to `hack-dance/homebrew-tap`)
938
-
939
- Local semantic-release dry-runs require a supported Node runtime (`>=24.10`).
940
-
941
- Recommended one-time bootstrap before first auto release:
942
- ```bash
943
- git tag v0.0.0
944
- git push origin v0.0.0
945
- ```
946
-
947
- This makes the first semantic-release increment land at `0.0.1` for patch-level changes.
948
-
949
757
  ## Commit Hygiene
950
758
 
951
759
  Some MCP config files can contain secrets. Keep local generated artifacts and secret-bearing config files ignored and out of commits.
952
760
 
953
- ## Local Development
761
+ Recommended practice:
762
+ - tracked canonical MCP definitions in `mcp/servers.json` should not inline secrets
763
+ - machine-local secrets belong in `mcp/servers.local.json` or `mcp/mcp.local.json`
764
+ - global rendered configs under `~/.codex`, `~/.claude`, or similar can contain merged secret values as machine-local runtime output
765
+ - 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
954
766
 
955
- ```bash
956
- bun run install:status
957
- bun run install:dev
958
- bun run install:bin
959
- bun run build
960
- bun run build:verify
961
- bun run type-check
962
- bun run test:ci
963
- bun test
964
- bun run check
965
- bun run fix
966
- bun run pack:dry-run
967
- bun run release:dry-run
968
- ```
767
+ ## Contributing
768
+
769
+ Contributor and release workflow details live in [CONTRIBUTING.md](./CONTRIBUTING.md).
969
770
 
970
771
  ## FAQ
971
772
 
@@ -973,14 +774,17 @@ bun run release:dry-run
973
774
 
974
775
  Not as a first-party `fclt mcp serve` runtime.
975
776
 
976
- `facult` currently focuses on inventory, trust/audit, install/update, and managed sync of skills/MCP configs.
777
+ `fclt` currently focuses on inventory, trust/audit, install/update, and managed sync of canonical AI capability and tool-native outputs.
977
778
 
978
779
  ### Does fclt now manage global AI config, not just skills and MCP?
979
780
 
980
781
  Yes. The core model now includes:
981
782
  - canonical personal AI source in `~/.ai`
982
- - rendered managed outputs in tool homes such as `~/.codex`
783
+ - rendered managed outputs in tool homes such as `~/.codex`, `~/.agents`, and `~/plugins`
983
784
  - global instruction docs such as `AGENTS.global.md`, rendered by default into `~/.codex/AGENTS.md`, `~/.claude/CLAUDE.md`, and `~/.cursor/AGENTS.md`
785
+ - Codex-authored skills in `~/.agents/skills`
786
+ - Codex local plugin marketplaces in `~/.agents/plugins/marketplace.json`
787
+ - Codex local plugin bundles in `~/plugins/<plugin-name>`
984
788
  - tool-native configs such as `~/.codex/config.toml`
985
789
  - tool-native rule files such as `~/.codex/rules/*.rules`
986
790