facult 1.2.1 → 2.0.1
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 +215 -207
- package/bin/facult.cjs +1 -268
- package/bin/fclt.cjs +264 -0
- package/package.json +6 -3
- package/src/ai-state.ts +49 -1
- package/src/ai.ts +23 -23
- package/src/audit/agent.ts +3 -3
- package/src/audit/index.ts +11 -11
- package/src/audit/static.ts +4 -4
- package/src/audit/tui.ts +14 -14
- package/src/autosync.ts +129 -42
- package/src/consolidate.ts +41 -36
- package/src/doctor.ts +236 -20
- package/src/enable-disable.ts +7 -7
- package/src/graph-query.ts +1 -1
- package/src/index-builder.ts +2 -2
- package/src/index.ts +53 -53
- package/src/manage.ts +36 -20
- package/src/migrate.ts +9 -9
- package/src/paths.ts +132 -74
- package/src/quarantine.ts +2 -1
- package/src/query.ts +4 -4
- package/src/remote-source-policy.ts +8 -8
- package/src/remote-sources.ts +18 -4
- package/src/remote.ts +26 -26
- package/src/scan.ts +15 -13
- package/src/schema.ts +1 -1
- package/src/self-update.ts +71 -25
- package/src/snippets-cli.ts +6 -6
- package/src/source-trust.ts +50 -42
- package/src/trust-list.ts +19 -10
- package/src/trust.ts +8 -8
- package/src/tui.ts +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# fclt
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
4
|
<a aria-label="NPM version" href="https://www.npmjs.com/package/facult">
|
|
@@ -15,34 +15,41 @@
|
|
|
15
15
|
</a>
|
|
16
16
|
</div>
|
|
17
17
|
|
|
18
|
-
`
|
|
18
|
+
`fclt` is a CLI for building and evolving AI faculties across tools, users, and projects.
|
|
19
|
+
|
|
20
|
+
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.
|
|
19
21
|
|
|
20
22
|
It helps you:
|
|
21
|
-
-
|
|
22
|
-
- consolidate everything into one canonical store
|
|
23
|
-
- review trust/security before installing remote content
|
|
24
|
-
- sync managed outputs into Codex, Cursor, and Claude
|
|
25
|
-
- manage a git-backed AI store under `~/.ai` and repo-local `.ai/`
|
|
26
|
-
- model relationships between instructions, snippets, agents, skills, and rendered tool outputs
|
|
23
|
+
- turn repeated friction into reusable capability
|
|
27
24
|
- preserve learning through writeback and evolve canonical assets over time
|
|
25
|
+
- consolidate AI behavior into one canonical store
|
|
26
|
+
- compose prompts, agents, skills, and tool outputs from reusable snippets and templates
|
|
27
|
+
- discover what exists, what depends on what, and what should change next
|
|
28
|
+
- sync managed outputs into Codex, Cursor, and Claude
|
|
29
|
+
- review trust/security before installing remote content
|
|
30
|
+
- keep that operating layer in a git-backed store under `~/.ai` and repo-local `.ai/`
|
|
28
31
|
|
|
29
|
-
## What
|
|
32
|
+
## What fclt Is
|
|
30
33
|
|
|
31
|
-
If your agent setup feels scattered
|
|
34
|
+
If your agent setup feels scattered, `fclt` gives it memory, structure, and a way to improve.
|
|
35
|
+
|
|
36
|
+
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.
|
|
37
|
+
|
|
38
|
+
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.
|
|
32
39
|
|
|
33
40
|
Think of it as:
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
- sync layer
|
|
37
|
-
-
|
|
38
|
-
- a local capability graph for discovering what exists and what depends on what
|
|
41
|
+
- a canonical home for your AI faculties
|
|
42
|
+
- a composition system for snippets, templates, and rendered AI behavior
|
|
43
|
+
- a sync layer for projecting them into real tools
|
|
44
|
+
- a discovery graph for seeing what exists and what depends on what
|
|
39
45
|
- a writeback/evolution loop for turning repeated friction into durable improvements
|
|
46
|
+
- an inventory and trust boundary for the assets you let into the system
|
|
40
47
|
|
|
41
|
-
## What
|
|
48
|
+
## What fclt Does
|
|
42
49
|
|
|
43
|
-
`
|
|
50
|
+
`fclt` is not a skills folder with a nicer CLI.
|
|
44
51
|
|
|
45
|
-
It
|
|
52
|
+
It works as five connected layers:
|
|
46
53
|
|
|
47
54
|
1. Canonical source
|
|
48
55
|
- global capability in `~/.ai`
|
|
@@ -65,7 +72,7 @@ It provides five connected layers:
|
|
|
65
72
|
|
|
66
73
|
## Default Operating Model
|
|
67
74
|
|
|
68
|
-
`
|
|
75
|
+
`fclt` ships with a built-in operating model for learning, writeback, and capability evolution. That pack includes default:
|
|
69
76
|
|
|
70
77
|
- instructions for evolution, integration, and project capability
|
|
71
78
|
- specialist agents such as `writeback-curator`, `evolution-planner`, and `scope-promoter`
|
|
@@ -76,14 +83,14 @@ When managed sync is enabled, these built-in assets are available by default eve
|
|
|
76
83
|
That means:
|
|
77
84
|
- builtin skills sync into managed tool skill directories by default
|
|
78
85
|
- builtin agents sync into tool agent directories when the tool supports agents
|
|
79
|
-
- if you do not author your own `AGENTS.global.md`, `
|
|
86
|
+
- if you do not author your own `AGENTS.global.md`, `fclt` renders a builtin global baseline doc into tool-native global docs
|
|
80
87
|
|
|
81
88
|
This is intentionally virtual at the canonical level:
|
|
82
89
|
- builtin defaults remain part of the packaged tool
|
|
83
90
|
- your personal `~/.ai` stays clean unless you explicitly vendor or override something
|
|
84
91
|
- the live tool output on disk still contains the rendered defaults, so users and agents can read them directly
|
|
85
92
|
|
|
86
|
-
In practice, this means
|
|
93
|
+
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.
|
|
87
94
|
|
|
88
95
|
If you want to disable the builtin default layer for a specific global or project canonical root:
|
|
89
96
|
|
|
@@ -100,11 +107,11 @@ Put that in `config.toml` or `config.local.toml` under the active canonical root
|
|
|
100
107
|
|
|
101
108
|
### Canonical vs rendered
|
|
102
109
|
|
|
103
|
-
`
|
|
110
|
+
`fclt` separates source-of-truth from tool-native output.
|
|
104
111
|
|
|
105
112
|
- canonical source lives in `~/.ai` or `<repo>/.ai`
|
|
106
113
|
- rendered outputs live in tool homes like `~/.codex`, `<repo>/.codex`, `~/.claude`, or `~/.cursor`
|
|
107
|
-
- generated state lives in `~/.facult` or `<repo>/.facult`
|
|
114
|
+
- generated Facult-owned state lives in `~/.ai/.facult` or `<repo>/.ai/.facult`
|
|
108
115
|
|
|
109
116
|
This keeps authored capability portable and reviewable while still producing the exact files each tool expects.
|
|
110
117
|
|
|
@@ -126,7 +133,7 @@ Project capability is allowed to extend or shadow global capability in merged vi
|
|
|
126
133
|
|
|
127
134
|
### The capability graph
|
|
128
135
|
|
|
129
|
-
`
|
|
136
|
+
`fclt` builds a generated graph of explicit relationships between canonical assets and rendered outputs.
|
|
130
137
|
|
|
131
138
|
That graph tracks things like:
|
|
132
139
|
- snippet markers
|
|
@@ -142,22 +149,24 @@ This makes it possible to answer:
|
|
|
142
149
|
|
|
143
150
|
### Writeback and evolution
|
|
144
151
|
|
|
145
|
-
`
|
|
152
|
+
`fclt` treats repeated failures, weak loops, missing context, and reusable patterns as signal worth preserving.
|
|
146
153
|
|
|
147
154
|
Writeback is the act of recording that signal in a structured way.
|
|
148
155
|
Evolution is the act of grouping that signal into reviewable proposals and applying it back into canonical assets.
|
|
149
156
|
|
|
150
|
-
This matters because otherwise the same problems repeat in chat without ever improving the actual operating layer. With `
|
|
157
|
+
This matters because otherwise the same problems repeat in chat without ever improving the actual operating layer. With `fclt`, you can:
|
|
151
158
|
- record a weak verification pattern
|
|
152
159
|
- group repeated writebacks around an instruction or agent
|
|
153
160
|
- draft a proposal to tighten that canonical asset
|
|
154
161
|
- review and apply the change in a controlled way
|
|
155
162
|
|
|
156
|
-
The
|
|
163
|
+
The point is not just better storage. The point is that your AI setup can change shape as it learns.
|
|
164
|
+
|
|
165
|
+
That is the core idea behind `fclt`: not just syncing skills, but growing faculties.
|
|
157
166
|
|
|
158
167
|
## Quick Start
|
|
159
168
|
|
|
160
|
-
### 1. Install
|
|
169
|
+
### 1. Install fclt
|
|
161
170
|
|
|
162
171
|
Recommended global install:
|
|
163
172
|
|
|
@@ -165,45 +174,46 @@ Recommended global install:
|
|
|
165
174
|
npm install -g facult
|
|
166
175
|
# or
|
|
167
176
|
bun add -g facult
|
|
168
|
-
|
|
177
|
+
fclt --help
|
|
169
178
|
```
|
|
170
179
|
|
|
180
|
+
The npm package name stays `facult` for registry compatibility. The installed command is still `fclt`.
|
|
181
|
+
|
|
171
182
|
One-off usage without global install:
|
|
172
183
|
|
|
173
184
|
```bash
|
|
174
|
-
npx facult --help
|
|
175
|
-
bunx facult --help
|
|
185
|
+
npx --yes -p facult fclt --help
|
|
176
186
|
```
|
|
177
187
|
|
|
178
188
|
Direct binary install from GitHub Releases (macOS/Linux):
|
|
179
189
|
|
|
180
190
|
```bash
|
|
181
|
-
curl -fsSL https://github.com/hack-dance/facult/releases/latest/download/
|
|
191
|
+
curl -fsSL https://github.com/hack-dance/facult/releases/latest/download/fclt-install.sh | bash
|
|
182
192
|
```
|
|
183
193
|
|
|
184
194
|
Windows and manual installs can download the correct binary from each release page:
|
|
185
|
-
`
|
|
195
|
+
`fclt-<version>-<platform>-<arch>`.
|
|
186
196
|
|
|
187
197
|
Update later with:
|
|
188
198
|
|
|
189
199
|
```bash
|
|
190
|
-
|
|
200
|
+
fclt self-update
|
|
191
201
|
# or
|
|
192
|
-
|
|
202
|
+
fclt update --self
|
|
193
203
|
```
|
|
194
204
|
|
|
195
205
|
Pin to a specific version:
|
|
196
206
|
|
|
197
207
|
```bash
|
|
198
|
-
|
|
208
|
+
fclt self-update --version 0.0.1
|
|
199
209
|
```
|
|
200
210
|
|
|
201
211
|
### 2. Start with a read-only inventory (recommended first)
|
|
202
212
|
|
|
203
213
|
```bash
|
|
204
|
-
|
|
214
|
+
fclt scan --show-duplicates
|
|
205
215
|
# optional machine-readable output
|
|
206
|
-
|
|
216
|
+
fclt scan --json
|
|
207
217
|
```
|
|
208
218
|
|
|
209
219
|
`scan` is read-only. It inspects local configs and reports what `facult` found without changing files.
|
|
@@ -211,68 +221,68 @@ facult scan --json
|
|
|
211
221
|
### 3. Import existing skills/configs
|
|
212
222
|
|
|
213
223
|
```bash
|
|
214
|
-
|
|
215
|
-
|
|
224
|
+
fclt consolidate --auto keep-current --from ~/.codex/skills --from ~/.agents/skills
|
|
225
|
+
fclt index
|
|
216
226
|
```
|
|
217
227
|
|
|
218
228
|
Why `keep-current`: it is deterministic and non-interactive for duplicate sources.
|
|
219
229
|
|
|
220
|
-
Canonical source root: `~/.ai` for global work, or `<repo>/.ai` for project-local work.
|
|
221
|
-
- global: `~/.facult`
|
|
222
|
-
- project: `<repo>/.facult`
|
|
230
|
+
Canonical source root: `~/.ai` for global work, or `<repo>/.ai` for project-local work. Facult-owned generated/config/runtime state lives inside the active canonical root:
|
|
231
|
+
- global: `~/.ai/.facult`
|
|
232
|
+
- project: `<repo>/.ai/.facult`
|
|
223
233
|
|
|
224
234
|
### 3b. Bootstrap a repo-local `.ai`
|
|
225
235
|
|
|
226
236
|
```bash
|
|
227
237
|
cd /path/to/repo
|
|
228
|
-
bunx
|
|
229
|
-
bunx
|
|
238
|
+
bunx fclt templates init project-ai
|
|
239
|
+
bunx fclt index
|
|
230
240
|
```
|
|
231
241
|
|
|
232
|
-
This seeds `<repo>/.ai` from the built-in Facult operating-model pack and writes a merged project index/graph under `<repo>/.facult/ai/`.
|
|
242
|
+
This seeds `<repo>/.ai` from the built-in Facult operating-model pack and writes a merged project index/graph under `<repo>/.ai/.facult/ai/`.
|
|
233
243
|
|
|
234
244
|
### 4. Inspect what you have
|
|
235
245
|
|
|
236
246
|
```bash
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
247
|
+
fclt list skills
|
|
248
|
+
fclt list instructions
|
|
249
|
+
fclt list mcp
|
|
250
|
+
fclt show requesting-code-review
|
|
251
|
+
fclt show instruction:WRITING
|
|
252
|
+
fclt show mcp:github
|
|
253
|
+
fclt find verification
|
|
254
|
+
fclt graph show instruction:WRITING
|
|
255
|
+
fclt graph deps AGENTS.global.md
|
|
256
|
+
fclt graph dependents @ai/instructions/WRITING.md
|
|
257
|
+
fclt ai writeback add --kind weak_verification --summary "Checks were too shallow" --asset instruction:VERIFICATION
|
|
258
|
+
fclt ai evolve propose
|
|
259
|
+
fclt ai evolve draft EV-00001
|
|
260
|
+
fclt ai evolve accept EV-00001
|
|
261
|
+
fclt ai evolve apply EV-00001
|
|
252
262
|
```
|
|
253
263
|
|
|
254
264
|
Context controls:
|
|
255
265
|
|
|
256
266
|
```bash
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
267
|
+
fclt list instructions --global
|
|
268
|
+
fclt list instructions --project
|
|
269
|
+
fclt find verification --scope merged --source project
|
|
270
|
+
fclt sync codex --project
|
|
271
|
+
fclt autosync status --global
|
|
272
|
+
fclt list agents --root /path/to/repo/.ai
|
|
263
273
|
```
|
|
264
274
|
|
|
265
275
|
### 5. Enable managed mode for your tools
|
|
266
276
|
|
|
267
277
|
```bash
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
278
|
+
fclt manage codex --dry-run
|
|
279
|
+
fclt manage codex --adopt-existing
|
|
280
|
+
fclt sync codex --builtin-conflicts overwrite
|
|
281
|
+
fclt manage cursor
|
|
282
|
+
fclt manage claude
|
|
273
283
|
|
|
274
|
-
|
|
275
|
-
|
|
284
|
+
fclt enable requesting-code-review receiving-code-review brainstorming systematic-debugging --for codex,cursor,claude
|
|
285
|
+
fclt sync
|
|
276
286
|
```
|
|
277
287
|
|
|
278
288
|
At this point, your selected skills are actively synced to all managed tools.
|
|
@@ -283,8 +293,8 @@ For builtin-backed rendered defaults, `facult` now tracks the last managed rende
|
|
|
283
293
|
### 6. Turn on background autosync
|
|
284
294
|
|
|
285
295
|
```bash
|
|
286
|
-
|
|
287
|
-
|
|
296
|
+
fclt autosync install --git-remote origin --git-branch main --git-interval-minutes 60
|
|
297
|
+
fclt autosync status
|
|
288
298
|
```
|
|
289
299
|
|
|
290
300
|
This installs a macOS LaunchAgent that:
|
|
@@ -297,14 +307,14 @@ If the repo hits a rebase conflict, remote autosync stops and reports the blocke
|
|
|
297
307
|
### 7. Turn on source trust and strict install flow
|
|
298
308
|
|
|
299
309
|
```bash
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
310
|
+
fclt sources list
|
|
311
|
+
fclt verify-source skills.sh --json
|
|
312
|
+
fclt sources trust skills.sh --note "reviewed"
|
|
303
313
|
|
|
304
|
-
|
|
314
|
+
fclt install skills.sh:code-review --as code-review-skills-sh --strict-source-trust
|
|
305
315
|
```
|
|
306
316
|
|
|
307
|
-
## Use
|
|
317
|
+
## Use fclt from your agents
|
|
308
318
|
|
|
309
319
|
`facult` is CLI-first. The practical setup is:
|
|
310
320
|
1. Install `facult` globally so any agent runtime can execute it.
|
|
@@ -313,24 +323,24 @@ facult install skills.sh:code-review --as code-review-skills-sh --strict-source-
|
|
|
313
323
|
|
|
314
324
|
```bash
|
|
315
325
|
# Scaffold reusable templates in the canonical store
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
326
|
+
fclt templates init agents
|
|
327
|
+
fclt templates init claude
|
|
328
|
+
fclt templates init skill facult-manager
|
|
319
329
|
|
|
320
330
|
# Enable that skill for managed tools
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
331
|
+
fclt manage codex
|
|
332
|
+
fclt manage cursor
|
|
333
|
+
fclt manage claude
|
|
334
|
+
fclt enable facult-manager --for codex,cursor,claude
|
|
335
|
+
fclt sync
|
|
326
336
|
```
|
|
327
337
|
|
|
328
338
|
Optional MCP scaffold:
|
|
329
339
|
|
|
330
340
|
```bash
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
341
|
+
fclt templates init mcp facult-cli
|
|
342
|
+
fclt enable mcp:facult-cli --for codex,cursor,claude
|
|
343
|
+
fclt sync
|
|
334
344
|
```
|
|
335
345
|
|
|
336
346
|
Note: `templates init mcp ...` is a scaffold, not a running server by itself.
|
|
@@ -365,19 +375,19 @@ Typical layout:
|
|
|
365
375
|
agents/
|
|
366
376
|
skills/
|
|
367
377
|
tools/
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
378
|
+
.facult/
|
|
379
|
+
ai/
|
|
380
|
+
index.json
|
|
381
|
+
graph.json
|
|
372
382
|
.codex/
|
|
373
383
|
.claude/
|
|
374
384
|
```
|
|
375
385
|
|
|
376
386
|
Important split:
|
|
377
387
|
- `.ai/` is canonical source
|
|
378
|
-
- `.facult/` is generated state, trust state, managed tool state, autosync state, and caches
|
|
388
|
+
- `.ai/.facult/` is Facult-owned generated state, trust state, managed tool state, autosync state, and caches
|
|
379
389
|
- tool homes such as `.codex/` and `.claude/` are rendered outputs
|
|
380
|
-
- the generated capability graph lives at `.facult/ai/graph.json`
|
|
390
|
+
- the generated capability graph lives at `.ai/.facult/ai/graph.json`
|
|
381
391
|
|
|
382
392
|
### Asset types
|
|
383
393
|
|
|
@@ -408,11 +418,9 @@ Not every asset syncs directly to a tool. Some exist primarily to support render
|
|
|
408
418
|
|
|
409
419
|
Canonical render context is layered explicitly:
|
|
410
420
|
1. built-ins injected by `facult`
|
|
411
|
-
2.
|
|
412
|
-
3.
|
|
413
|
-
4.
|
|
414
|
-
5. `~/.ai/projects/<slug>/config.local.toml`
|
|
415
|
-
6. explicit runtime overrides
|
|
421
|
+
2. active canonical root `config.toml`
|
|
422
|
+
3. active canonical root `config.local.toml`
|
|
423
|
+
4. explicit runtime overrides
|
|
416
424
|
|
|
417
425
|
Built-ins currently include:
|
|
418
426
|
- `AI_ROOT`
|
|
@@ -423,10 +431,10 @@ Built-ins currently include:
|
|
|
423
431
|
- `TARGET_PATH`
|
|
424
432
|
|
|
425
433
|
Recommended split:
|
|
426
|
-
- `config.toml`: tracked, portable, non-secret refs/defaults
|
|
427
|
-
- `config.local.toml`: ignored, machine-local paths and secrets
|
|
434
|
+
- `~/.ai/config.toml` or `<repo>/.ai/config.toml`: tracked, portable, non-secret refs/defaults
|
|
435
|
+
- `~/.ai/config.local.toml` or `<repo>/.ai/config.local.toml`: ignored, machine-local paths and secrets
|
|
428
436
|
- `[builtin].sync_defaults = false`: disable builtin default sync/materialization for this root
|
|
429
|
-
- `
|
|
437
|
+
- `fclt sync --builtin-conflicts overwrite`: allow packaged builtin defaults to overwrite locally modified generated targets
|
|
430
438
|
|
|
431
439
|
### Snippets
|
|
432
440
|
|
|
@@ -444,21 +452,21 @@ Resolution rules:
|
|
|
444
452
|
Commands:
|
|
445
453
|
|
|
446
454
|
```bash
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
455
|
+
fclt snippets list
|
|
456
|
+
fclt snippets show global/codex/baseline
|
|
457
|
+
fclt snippets sync [--dry-run] [file...]
|
|
450
458
|
```
|
|
451
459
|
|
|
452
460
|
Snippets are already used during global Codex `AGENTS.md` rendering.
|
|
453
461
|
|
|
454
462
|
### Graph inspection
|
|
455
463
|
|
|
456
|
-
The generated graph in `.facult/ai/graph.json` is queryable directly:
|
|
464
|
+
The generated graph in `.ai/.facult/ai/graph.json` is queryable directly:
|
|
457
465
|
|
|
458
466
|
```bash
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
467
|
+
fclt graph show instruction:WRITING
|
|
468
|
+
fclt graph deps AGENTS.global.md
|
|
469
|
+
fclt graph dependents @project/instructions/TESTING.md
|
|
462
470
|
```
|
|
463
471
|
|
|
464
472
|
This is the explicit dependency layer for:
|
|
@@ -473,36 +481,36 @@ This is the explicit dependency layer for:
|
|
|
473
481
|
`facult` also has a local writeback/evolution substrate built on top of the graph:
|
|
474
482
|
|
|
475
483
|
```bash
|
|
476
|
-
|
|
484
|
+
fclt ai writeback add \
|
|
477
485
|
--kind weak_verification \
|
|
478
486
|
--summary "Verification guidance did not distinguish shallow checks from meaningful proof." \
|
|
479
487
|
--asset instruction:VERIFICATION \
|
|
480
488
|
--tag verification \
|
|
481
489
|
--tag false-positive
|
|
482
490
|
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
Runtime state stays generated and local:
|
|
500
|
-
- global writeback state: `~/.facult/ai/global/...`
|
|
501
|
-
- project writeback state:
|
|
491
|
+
fclt ai writeback list
|
|
492
|
+
fclt ai writeback show WB-00001
|
|
493
|
+
fclt ai writeback group --by asset
|
|
494
|
+
fclt ai writeback summarize --by kind
|
|
495
|
+
fclt ai evolve propose
|
|
496
|
+
fclt ai evolve list
|
|
497
|
+
fclt ai evolve show EV-00001
|
|
498
|
+
fclt ai evolve draft EV-00001
|
|
499
|
+
fclt ai evolve review EV-00001
|
|
500
|
+
fclt ai evolve accept EV-00001
|
|
501
|
+
fclt ai evolve reject EV-00001 --reason "Needs a tighter draft"
|
|
502
|
+
fclt ai evolve supersede EV-00001 --by EV-00002
|
|
503
|
+
fclt ai evolve apply EV-00001
|
|
504
|
+
fclt ai evolve promote EV-00003 --to global --project
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
Runtime state stays generated and local inside the active canonical root:
|
|
508
|
+
- global writeback state: `~/.ai/.facult/ai/global/...`
|
|
509
|
+
- project writeback state: `<repo>/.ai/.facult/ai/project/...`
|
|
502
510
|
|
|
503
511
|
That split is intentional:
|
|
504
512
|
- canonical source remains in `~/.ai` or `<repo>/.ai`
|
|
505
|
-
- writeback queues, journals,
|
|
513
|
+
- 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
|
|
506
514
|
|
|
507
515
|
Use writeback when:
|
|
508
516
|
- a task exposed a weak or misleading verification loop
|
|
@@ -512,7 +520,7 @@ Use writeback when:
|
|
|
512
520
|
|
|
513
521
|
Do not think of writeback as “taking notes.” Think of it as preserving signal that should change the system, not just the current conversation.
|
|
514
522
|
|
|
515
|
-
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 `
|
|
523
|
+
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.
|
|
516
524
|
|
|
517
525
|
Current apply semantics are intentionally policy-bound:
|
|
518
526
|
- targets are resolved through the generated graph when possible and fall back to canonical ref resolution for missing assets
|
|
@@ -540,29 +548,29 @@ Most inventory and sync commands support explicit canonical-root selection:
|
|
|
540
548
|
## Security and Trust
|
|
541
549
|
|
|
542
550
|
`facult` has two trust layers:
|
|
543
|
-
- Item trust: `
|
|
544
|
-
- Source trust: `
|
|
551
|
+
- Item trust: `fclt trust <name>` / `fclt untrust <name>`
|
|
552
|
+
- Source trust: `fclt sources ...` with levels `trusted`, `review`, `blocked`
|
|
545
553
|
|
|
546
554
|
`facult` also supports two audit modes:
|
|
547
555
|
|
|
548
556
|
1. Interactive audit workflow:
|
|
549
557
|
```bash
|
|
550
|
-
|
|
558
|
+
fclt audit
|
|
551
559
|
```
|
|
552
560
|
2. Static audit rules (deterministic pattern checks):
|
|
553
561
|
```bash
|
|
554
|
-
|
|
555
|
-
|
|
562
|
+
fclt audit --non-interactive --severity high
|
|
563
|
+
fclt audit --non-interactive mcp:github --severity medium --json
|
|
556
564
|
```
|
|
557
565
|
3. Agent-based audit (Claude/Codex review pass):
|
|
558
566
|
```bash
|
|
559
|
-
|
|
560
|
-
|
|
567
|
+
fclt audit --non-interactive --with claude --max-items 50
|
|
568
|
+
fclt audit --non-interactive --with codex --max-items all --json
|
|
561
569
|
```
|
|
562
570
|
|
|
563
571
|
Recommended security flow:
|
|
564
|
-
1. `
|
|
565
|
-
2. `
|
|
572
|
+
1. `fclt verify-source <source>`
|
|
573
|
+
2. `fclt sources trust <source>` only after review
|
|
566
574
|
3. use `--strict-source-trust` for `install`/`update`
|
|
567
575
|
4. run both static and agent audits on a schedule
|
|
568
576
|
|
|
@@ -581,70 +589,70 @@ Recommended security flow:
|
|
|
581
589
|
|
|
582
590
|
- Inventory and discovery
|
|
583
591
|
```bash
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
592
|
+
fclt scan [--from <path>] [--json] [--show-duplicates]
|
|
593
|
+
fclt list [skills|mcp|agents|snippets|instructions] [--enabled-for <tool>] [--untrusted] [--flagged] [--pending]
|
|
594
|
+
fclt show <name>
|
|
595
|
+
fclt show instruction:<name>
|
|
596
|
+
fclt show mcp:<name> [--show-secrets]
|
|
597
|
+
fclt find <query> [--json]
|
|
590
598
|
```
|
|
591
599
|
|
|
592
600
|
- Canonical store and migration
|
|
593
601
|
```bash
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
602
|
+
fclt consolidate [--auto keep-current|keep-incoming|keep-newest] [--from <path> ...]
|
|
603
|
+
fclt index [--force]
|
|
604
|
+
fclt migrate [--from <path>] [--dry-run] [--move] [--write-config]
|
|
597
605
|
```
|
|
598
606
|
|
|
599
607
|
- Managed mode and rollout
|
|
600
608
|
```bash
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
609
|
+
fclt manage <tool> [--dry-run] [--adopt-existing] [--existing-conflicts keep-canonical|keep-existing]
|
|
610
|
+
fclt unmanage <tool>
|
|
611
|
+
fclt managed
|
|
612
|
+
fclt enable <name> [--for <tool1,tool2,...>]
|
|
613
|
+
fclt enable mcp:<name> [--for <tool1,tool2,...>]
|
|
614
|
+
fclt disable <name> [--for <tool1,tool2,...>]
|
|
615
|
+
fclt sync [tool] [--dry-run] [--builtin-conflicts overwrite]
|
|
616
|
+
fclt autosync install [tool] [--git-remote <name>] [--git-branch <name>] [--git-interval-minutes <n>] [--git-disable]
|
|
617
|
+
fclt autosync status [tool]
|
|
618
|
+
fclt autosync restart [tool]
|
|
619
|
+
fclt autosync uninstall [tool]
|
|
612
620
|
```
|
|
613
621
|
|
|
614
622
|
- Remote catalogs and policies
|
|
615
623
|
```bash
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
624
|
+
fclt search <query> [--index <name>] [--limit <n>]
|
|
625
|
+
fclt install <index:item> [--as <name>] [--force] [--strict-source-trust]
|
|
626
|
+
fclt update [--apply] [--strict-source-trust]
|
|
627
|
+
fclt verify-source <name> [--json]
|
|
628
|
+
fclt sources list
|
|
629
|
+
fclt sources trust <source> [--note <text>]
|
|
630
|
+
fclt sources review <source> [--note <text>]
|
|
631
|
+
fclt sources block <source> [--note <text>]
|
|
632
|
+
fclt sources clear <source>
|
|
625
633
|
```
|
|
626
634
|
|
|
627
635
|
- Templates and snippets
|
|
628
636
|
```bash
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
637
|
+
fclt templates list
|
|
638
|
+
fclt templates init project-ai
|
|
639
|
+
fclt templates init skill <name>
|
|
640
|
+
fclt templates init mcp <name>
|
|
641
|
+
fclt templates init snippet <marker>
|
|
642
|
+
fclt templates init agents
|
|
643
|
+
fclt templates init claude
|
|
636
644
|
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
645
|
+
fclt snippets list
|
|
646
|
+
fclt snippets show <marker>
|
|
647
|
+
fclt snippets create <marker>
|
|
648
|
+
fclt snippets edit <marker>
|
|
649
|
+
fclt snippets sync [--dry-run] [file...]
|
|
642
650
|
```
|
|
643
651
|
|
|
644
652
|
For full flags and exact usage:
|
|
645
653
|
```bash
|
|
646
|
-
|
|
647
|
-
|
|
654
|
+
fclt --help
|
|
655
|
+
fclt <command> --help
|
|
648
656
|
```
|
|
649
657
|
|
|
650
658
|
### Root resolution
|
|
@@ -652,7 +660,7 @@ facult <command> --help
|
|
|
652
660
|
`facult` resolves the canonical root in this order:
|
|
653
661
|
1. `FACULT_ROOT_DIR`
|
|
654
662
|
2. nearest project `.ai` from the current working directory for CLI-facing commands
|
|
655
|
-
3. `~/.facult/config.json` (`rootDir`)
|
|
663
|
+
3. `~/.ai/.facult/config.json` (`rootDir`)
|
|
656
664
|
4. `~/.ai`
|
|
657
665
|
5. `~/agents/.facult` (or a detected legacy store under `~/agents/`)
|
|
658
666
|
|
|
@@ -660,12 +668,12 @@ facult <command> --help
|
|
|
660
668
|
|
|
661
669
|
- `FACULT_ROOT_DIR`: override canonical store location
|
|
662
670
|
- `FACULT_VERSION`: version selector for `scripts/install.sh` (`latest` by default)
|
|
663
|
-
- `FACULT_INSTALL_DIR`: install target dir for `scripts/install.sh` (`~/.facult/bin` by default)
|
|
671
|
+
- `FACULT_INSTALL_DIR`: install target dir for `scripts/install.sh` (`~/.ai/.facult/bin` by default)
|
|
664
672
|
- `FACULT_INSTALL_PM`: force package manager detection for npm bootstrap launcher (`npm` or `bun`)
|
|
665
673
|
|
|
666
674
|
### State and report files
|
|
667
675
|
|
|
668
|
-
Under `~/.facult/`:
|
|
676
|
+
Under `~/.ai/.facult/`:
|
|
669
677
|
- `sources.json` (latest inventory scan state)
|
|
670
678
|
- `consolidated.json` (consolidation state)
|
|
671
679
|
- `managed.json` (managed tool state)
|
|
@@ -679,7 +687,7 @@ Under `~/.facult/`:
|
|
|
679
687
|
|
|
680
688
|
### Config reference
|
|
681
689
|
|
|
682
|
-
`~/.facult/config.json` supports:
|
|
690
|
+
`~/.ai/.facult/config.json` supports:
|
|
683
691
|
- `rootDir`
|
|
684
692
|
- `scanFrom`
|
|
685
693
|
- `scanFromIgnore`
|
|
@@ -710,7 +718,7 @@ Default source aliases:
|
|
|
710
718
|
- `skills.sh`
|
|
711
719
|
- `clawhub`
|
|
712
720
|
|
|
713
|
-
Custom remote sources can be defined in `~/.facult/indices.json` (manifest URL, optional integrity, optional signature keys/signature verification settings).
|
|
721
|
+
Custom remote sources can be defined in `~/.ai/.facult/indices.json` (manifest URL, optional integrity, optional signature keys/signature verification settings).
|
|
714
722
|
|
|
715
723
|
## Local Install Modes
|
|
716
724
|
|
|
@@ -722,11 +730,11 @@ bun run install:bin
|
|
|
722
730
|
bun run install:status
|
|
723
731
|
```
|
|
724
732
|
|
|
725
|
-
Default install path is `~/.facult/bin/
|
|
733
|
+
Default install path is `~/.ai/.facult/bin/fclt`. You can pass a custom target dir via `--dir=/path`.
|
|
726
734
|
|
|
727
735
|
## Autosync
|
|
728
736
|
|
|
729
|
-
`
|
|
737
|
+
`fclt autosync` is the background propagation layer for managed installs.
|
|
730
738
|
|
|
731
739
|
Current v1 behavior:
|
|
732
740
|
- macOS LaunchAgent-backed
|
|
@@ -738,28 +746,28 @@ Current v1 behavior:
|
|
|
738
746
|
Recommended usage:
|
|
739
747
|
|
|
740
748
|
```bash
|
|
741
|
-
|
|
742
|
-
|
|
749
|
+
fclt autosync install
|
|
750
|
+
fclt autosync status
|
|
743
751
|
```
|
|
744
752
|
|
|
745
753
|
Project-local usage:
|
|
746
754
|
|
|
747
755
|
```bash
|
|
748
756
|
cd /path/to/repo
|
|
749
|
-
|
|
750
|
-
|
|
757
|
+
fclt autosync install codex
|
|
758
|
+
fclt autosync status codex
|
|
751
759
|
```
|
|
752
760
|
|
|
753
761
|
Tool-scoped service:
|
|
754
762
|
|
|
755
763
|
```bash
|
|
756
|
-
|
|
764
|
+
fclt autosync install codex
|
|
757
765
|
```
|
|
758
766
|
|
|
759
767
|
One-shot runner for verification/debugging:
|
|
760
768
|
|
|
761
769
|
```bash
|
|
762
|
-
|
|
770
|
+
fclt autosync run --service all --once
|
|
763
771
|
```
|
|
764
772
|
|
|
765
773
|
Remote git policy:
|
|
@@ -780,7 +788,7 @@ Release behavior:
|
|
|
780
788
|
3. The same release workflow then builds platform binaries and uploads them to that GitHub release.
|
|
781
789
|
4. npm publish runs only after binary asset upload succeeds (`publish-npm` depends on `publish-assets`).
|
|
782
790
|
5. Published release assets include platform binaries, `facult-install.sh`, and `SHA256SUMS`.
|
|
783
|
-
6. The npm package launcher resolves your platform, downloads the matching release binary, caches it under `~/.facult/runtime/<version>/<platform-arch>/`, and runs it.
|
|
791
|
+
6. The npm package launcher resolves your platform, downloads the matching release binary, caches it under `~/.ai/.facult/runtime/<version>/<platform-arch>/`, and runs it.
|
|
784
792
|
|
|
785
793
|
Current prebuilt binary targets:
|
|
786
794
|
- `darwin-x64`
|
|
@@ -791,7 +799,7 @@ Current prebuilt binary targets:
|
|
|
791
799
|
Self-update behavior:
|
|
792
800
|
1. npm/bun global install: updates via package manager (`npm install -g facult@...` or `bun add -g facult@...`).
|
|
793
801
|
2. Direct binary install (release script/local binary path): downloads and replaces the binary in place.
|
|
794
|
-
3. Use `
|
|
802
|
+
3. Use `fclt self-update` (or `fclt update --self`).
|
|
795
803
|
|
|
796
804
|
Required secrets for publish:
|
|
797
805
|
- `NPM_TOKEN`
|
|
@@ -829,13 +837,13 @@ bun run release:dry-run
|
|
|
829
837
|
|
|
830
838
|
## FAQ
|
|
831
839
|
|
|
832
|
-
### Does
|
|
840
|
+
### Does fclt run its own MCP server today?
|
|
833
841
|
|
|
834
|
-
Not as a first-party `
|
|
842
|
+
Not as a first-party `fclt mcp serve` runtime.
|
|
835
843
|
|
|
836
844
|
`facult` currently focuses on inventory, trust/audit, install/update, and managed sync of skills/MCP configs.
|
|
837
845
|
|
|
838
|
-
### Does
|
|
846
|
+
### Does fclt now manage global AI config, not just skills and MCP?
|
|
839
847
|
|
|
840
848
|
Yes. The core model now includes:
|
|
841
849
|
- canonical personal AI source in `~/.ai`
|
|
@@ -844,8 +852,8 @@ Yes. The core model now includes:
|
|
|
844
852
|
- tool-native configs such as `~/.codex/config.toml`
|
|
845
853
|
- tool-native rule files such as `~/.codex/rules/*.rules`
|
|
846
854
|
|
|
847
|
-
### Do I still need to run `
|
|
855
|
+
### Do I still need to run `fclt sync` manually?
|
|
848
856
|
|
|
849
857
|
If autosync is not installed, yes.
|
|
850
858
|
|
|
851
|
-
If autosync is installed, local changes under `~/.ai` propagate automatically to managed tools. Manual `
|
|
859
|
+
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.
|