facult 2.12.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 +209 -715
- package/assets/packs/facult-operating-model/instructions/CAPABILITY_COMPOSITION.md +1 -1
- package/assets/packs/facult-operating-model/instructions/EVOLUTION.md +1 -1
- package/assets/packs/facult-operating-model/instructions/LEARNING_AND_WRITEBACK.md +1 -1
- package/docs/README.md +19 -9
- package/docs/assets/fclt-capability-loop.png +0 -0
- package/docs/automations.md +68 -0
- package/docs/built-in-pack.md +10 -4
- package/docs/composable-capability.md +8 -0
- package/docs/concepts.md +11 -1
- package/docs/managed-mode.md +10 -4
- package/docs/project-ai.md +10 -4
- package/docs/reference.md +112 -0
- package/docs/roadmap.md +18 -7
- package/docs/security-trust.md +89 -0
- package/docs/writeback-evolution.md +10 -2
- package/package.json +2 -1
- package/src/builtin-assets.ts +1 -1
- package/src/doctor.ts +307 -5
- package/src/index.ts +6 -0
- package/src/paths-command.ts +223 -0
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="
|
|
11
|
-
<img alt="
|
|
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
|
|
22
|
+
`fclt` is a CLI for managing AI capability across tools and projects.
|
|
23
23
|
|
|
24
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
49
|
+
## Install
|
|
36
50
|
|
|
37
|
-
|
|
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
|
-
|
|
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 --
|
|
65
|
+
fclt --version
|
|
53
66
|
```
|
|
54
67
|
|
|
55
|
-
The npm package
|
|
68
|
+
The npm package is named `facult` for registry compatibility. The command is `fclt`.
|
|
56
69
|
|
|
57
|
-
One-off usage
|
|
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
|
|
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
|
|
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
|
|
84
|
+
Update an installed binary:
|
|
73
85
|
|
|
74
86
|
```bash
|
|
75
87
|
fclt self-update
|
|
76
|
-
|
|
77
|
-
fclt update --self
|
|
88
|
+
fclt self-update --version 2.12.0
|
|
78
89
|
```
|
|
79
90
|
|
|
80
|
-
|
|
91
|
+
## Quick start
|
|
81
92
|
|
|
82
|
-
|
|
83
|
-
fclt self-update --version 0.0.1
|
|
84
|
-
```
|
|
93
|
+
### 1. Inspect existing AI state
|
|
85
94
|
|
|
86
|
-
|
|
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
|
-
|
|
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,347 +110,89 @@ fclt inventory --json --project
|
|
|
105
110
|
fclt inventory --json --tool codex
|
|
106
111
|
```
|
|
107
112
|
|
|
108
|
-
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
cd /path/to/repo
|
|
114
|
-
fclt templates init project-ai
|
|
115
|
-
fclt index
|
|
116
|
-
```
|
|
115
|
+
### 2. Create a canonical store
|
|
117
116
|
|
|
118
|
-
|
|
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
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### 3. Import existing skills or config
|
|
126
|
-
|
|
127
|
-
```bash
|
|
128
|
-
fclt consolidate --auto keep-current --from ~/.codex/skills --from ~/.agents/skills
|
|
129
|
-
fclt index
|
|
121
|
+
fclt index --global
|
|
130
122
|
```
|
|
131
123
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
### 4. Optional: manage a tool and sync
|
|
124
|
+
Create a repo-local `.ai` root:
|
|
135
125
|
|
|
136
126
|
```bash
|
|
137
|
-
|
|
138
|
-
fclt
|
|
139
|
-
fclt
|
|
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
|
|
127
|
+
cd /path/to/repo
|
|
128
|
+
fclt templates init project-ai
|
|
129
|
+
fclt status --project
|
|
145
130
|
```
|
|
146
131
|
|
|
147
|
-
|
|
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
|
|
132
|
+
Create individual capability units:
|
|
162
133
|
|
|
163
134
|
```bash
|
|
164
|
-
fclt
|
|
165
|
-
fclt
|
|
166
|
-
fclt
|
|
167
|
-
fclt
|
|
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
|
-
|
|
141
|
+
### 3. Consolidate existing skills or config
|
|
176
142
|
|
|
177
|
-
|
|
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
|
-
```
|
|
183
|
-
|
|
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
|
|
188
|
-
fclt
|
|
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
|
-
- [Composable Capability](./docs/composable-capability.md): refs, snippets, instruction templates, and evolvable units
|
|
219
|
-
- [Managed Mode](./docs/managed-mode.md): safe rendering and adoption rules
|
|
220
|
-
- [Project `.ai`](./docs/project-ai.md): repo-local capability and project sync policy
|
|
221
|
-
- [Built-In Pack](./docs/built-in-pack.md): packaged writeback/evolution defaults
|
|
222
|
-
- [Writeback And Evolution](./docs/writeback-evolution.md): feedback-loop workflow and review surfaces
|
|
223
|
-
- [Roadmap](./docs/roadmap.md): current gaps and non-goals
|
|
224
|
-
|
|
225
|
-
## Built-in Defaults
|
|
226
|
-
|
|
227
|
-
`fclt` includes a built-in layer for writeback and evolution. By default, that layer provides:
|
|
228
|
-
- instructions for work units, capability composition, learning/writeback, evolution, integration, and project capability
|
|
229
|
-
- agents such as `writeback-curator`, `evolution-planner`, and `scope-promoter`
|
|
230
|
-
- skills such as `capability-evolution` and `project-operating-layer-design`
|
|
231
|
-
|
|
232
|
-
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`.
|
|
233
|
-
|
|
234
|
-
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.
|
|
235
|
-
|
|
236
|
-
The intended feedback loop is:
|
|
237
|
-
1. agents notice durable friction, weak verification, stale guidance, or missing capability during normal work
|
|
238
|
-
2. agents record one strong writeback when the signal, target, and scope are clear
|
|
239
|
-
3. humans or scheduled automations review grouped writebacks and existing proposals
|
|
240
|
-
4. only repeated evidence, a clearly missing capability, or a stale canonical asset becomes an evolution proposal
|
|
241
|
-
5. accepted proposals update canonical markdown assets, skills, snippets, or project/global instructions
|
|
242
|
-
|
|
243
|
-
Composition matters: prefer atomic instructions such as `BUN.md` or `RUST.md`, snippets for repeated rendered blocks, skills for workflows, agents for delegated roles, MCP/tool config for tool interfaces, and automations for scheduled loops. Record writeback against the smallest unit that needs to improve.
|
|
244
|
-
|
|
245
|
-
If you want to disable default built-in sync for one canonical root:
|
|
246
|
-
|
|
247
|
-
```toml
|
|
248
|
-
version = 1
|
|
249
|
-
|
|
250
|
-
[builtin]
|
|
251
|
-
sync_defaults = false
|
|
146
|
+
fclt consolidate --auto keep-current --from ~/.codex/skills --from ~/.agents/skills
|
|
147
|
+
fclt index
|
|
252
148
|
```
|
|
253
149
|
|
|
254
|
-
|
|
150
|
+
`keep-current` is deterministic and non-interactive. Use other conflict modes only when you have reviewed the sources.
|
|
255
151
|
|
|
256
|
-
|
|
152
|
+
### 4. Optional: manage a tool
|
|
257
153
|
|
|
258
|
-
`fclt`
|
|
259
|
-
1. Install `fclt` globally so any agent runtime can execute it.
|
|
260
|
-
2. Use `fclt inventory`, `fclt list`, and `fclt consolidate` to inspect and normalize existing tool-native state.
|
|
261
|
-
3. Install the built-in operating-model pack into `~/.ai` or a project `.ai` when you want editable canonical defaults without managed rendering.
|
|
262
|
-
4. If you want fclt-owned rendered outputs, manage each agent tool with `fclt manage <tool>` and `fclt sync`.
|
|
263
|
-
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.
|
|
264
|
-
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.
|
|
265
155
|
|
|
266
156
|
```bash
|
|
267
|
-
|
|
268
|
-
fclt
|
|
269
|
-
fclt
|
|
270
|
-
fclt
|
|
271
|
-
fclt templates init snippet global/lang/bun
|
|
272
|
-
fclt templates init skill facult-manager
|
|
273
|
-
|
|
274
|
-
# Enable that skill for managed tools
|
|
275
|
-
fclt manage codex
|
|
276
|
-
fclt manage cursor
|
|
277
|
-
fclt manage claude
|
|
278
|
-
fclt enable facult-manager --for codex,cursor,claude
|
|
279
|
-
fclt sync
|
|
157
|
+
fclt manage codex --dry-run
|
|
158
|
+
fclt manage codex --adopt-existing
|
|
159
|
+
fclt sync codex --dry-run
|
|
160
|
+
fclt sync codex
|
|
280
161
|
```
|
|
281
162
|
|
|
282
|
-
|
|
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:
|
|
283
164
|
|
|
284
165
|
```bash
|
|
285
|
-
fclt
|
|
286
|
-
fclt enable mcp:facult-cli --for codex,cursor,claude
|
|
287
|
-
fclt sync
|
|
166
|
+
fclt sync --adopt-live
|
|
288
167
|
```
|
|
289
168
|
|
|
290
|
-
|
|
291
|
-
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.
|
|
169
|
+
Project-managed sync is default-deny. Repo-local tool outputs only receive assets that the project explicitly allows.
|
|
292
170
|
|
|
293
|
-
##
|
|
171
|
+
## Core model
|
|
294
172
|
|
|
295
|
-
`fclt`
|
|
296
|
-
|
|
297
|
-
Typical layout:
|
|
173
|
+
`fclt` separates source, generated state, runtime state, review artifacts, and rendered output.
|
|
298
174
|
|
|
299
175
|
```text
|
|
300
|
-
~/.ai/
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
snippets/
|
|
307
|
-
agents/
|
|
308
|
-
skills/
|
|
309
|
-
mcp/
|
|
310
|
-
templates/
|
|
311
|
-
tools/
|
|
312
|
-
codex/
|
|
313
|
-
config.toml
|
|
314
|
-
plugins/
|
|
315
|
-
marketplace.json
|
|
316
|
-
rules/
|
|
317
|
-
<repo>/
|
|
318
|
-
.ai/
|
|
319
|
-
config.toml
|
|
320
|
-
instructions/
|
|
321
|
-
snippets/
|
|
322
|
-
agents/
|
|
323
|
-
skills/
|
|
324
|
-
tools/
|
|
325
|
-
.facult/
|
|
326
|
-
ai/
|
|
327
|
-
index.json
|
|
328
|
-
graph.json
|
|
329
|
-
.codex/
|
|
330
|
-
.agents/
|
|
331
|
-
plugins/
|
|
332
|
-
.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
|
|
333
182
|
```
|
|
334
183
|
|
|
335
|
-
|
|
336
|
-
- `.ai/` is canonical source
|
|
337
|
-
- global `.ai/.facult/ai/` is generated AI state for the global canonical root
|
|
338
|
-
- project generated AI state lives in machine-local per-project Facult state, outside the repo
|
|
339
|
-
- 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/`
|
|
340
|
-
- tool homes such as `.codex/` and `.claude/` are rendered outputs
|
|
341
|
-
- the generated capability graph lives under the active generated AI state directory
|
|
342
|
-
|
|
343
|
-
### Asset types
|
|
344
|
-
|
|
345
|
-
The canonical store can contain several distinct asset classes:
|
|
184
|
+
Canonical capability can include:
|
|
346
185
|
|
|
347
|
-
- `instructions/`: reusable doctrine
|
|
348
|
-
- `snippets/`:
|
|
349
|
-
- `agents/`: role-specific agent manifests
|
|
186
|
+
- `instructions/`: reusable markdown doctrine
|
|
187
|
+
- `snippets/`: composable blocks inserted into rendered markdown
|
|
350
188
|
- `skills/`: workflow-specific capability folders
|
|
351
|
-
- `
|
|
352
|
-
- `mcp
|
|
353
|
-
- `
|
|
354
|
-
- `tools/<tool
|
|
355
|
-
- `
|
|
356
|
-
- global docs such as `AGENTS.global.md` and `AGENTS.override.global.md`
|
|
357
|
-
|
|
358
|
-
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.
|
|
359
|
-
|
|
360
|
-
### Canonical conventions
|
|
361
|
-
|
|
362
|
-
- Use `instructions/` for reusable markdown documents
|
|
363
|
-
- Use `snippets/` for composable partial blocks injected into markdown templates
|
|
364
|
-
- Use `tools/codex/rules/*.rules` for actual Codex approval-policy rules
|
|
365
|
-
- Use logical refs such as `@ai/instructions/WRITING.md` in tracked source
|
|
366
|
-
- Use `@builtin/facult-operating-model/...` for packaged built-in defaults
|
|
367
|
-
- Use `@project/...` when a tracked ref must resolve inside a repo-local `.ai`
|
|
368
|
-
- Use config-backed refs in prompts where you want stable named references such as `${refs.writing_rule}`
|
|
369
|
-
|
|
370
|
-
### Config and env layering
|
|
371
|
-
|
|
372
|
-
Canonical render context is layered explicitly:
|
|
373
|
-
1. built-ins injected by `fclt`
|
|
374
|
-
2. active canonical root `config.toml`
|
|
375
|
-
3. active canonical root `config.local.toml`
|
|
376
|
-
4. explicit runtime overrides
|
|
377
|
-
|
|
378
|
-
Built-ins currently include:
|
|
379
|
-
- `AI_ROOT`
|
|
380
|
-
- `HOME`
|
|
381
|
-
- `PROJECT_ROOT`
|
|
382
|
-
- `PROJECT_SLUG`
|
|
383
|
-
- `TARGET_TOOL`
|
|
384
|
-
- `TARGET_PATH`
|
|
385
|
-
|
|
386
|
-
Recommended split:
|
|
387
|
-
- `~/.ai/config.toml` or `<repo>/.ai/config.toml`: tracked, portable, non-secret refs/defaults
|
|
388
|
-
- `~/.ai/config.local.toml` or `<repo>/.ai/config.local.toml`: ignored, machine-local paths and secrets
|
|
389
|
-
- `~/.ai/mcp/servers.json` or `<repo>/.ai/mcp/servers.json`: tracked canonical MCP definitions
|
|
390
|
-
- `~/.ai/mcp/servers.local.json` or `<repo>/.ai/mcp/servers.local.json`: ignored machine-local MCP env overlay for secrets and per-machine auth
|
|
391
|
-
- `~/.ai/tools/<tool>/config.toml` or `<repo>/.ai/tools/<tool>/config.toml`: tracked tool defaults
|
|
392
|
-
- `~/.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
|
|
393
|
-
- `[builtin].sync_defaults = false`: disable builtin default sync/materialization for this root
|
|
394
|
-
- `[project_sync.<tool>]`: explicit project-managed allowlist for assets that may render into repo-local tool outputs
|
|
395
|
-
- `fclt sync --builtin-conflicts overwrite`: allow packaged builtin defaults to overwrite locally modified generated targets
|
|
396
|
-
- `fclt audit fix ...`: move inline MCP secrets from tracked canonical config into the local MCP overlay and re-sync managed tool configs
|
|
397
|
-
|
|
398
|
-
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:
|
|
399
|
-
|
|
400
|
-
```toml
|
|
401
|
-
version = 1
|
|
402
|
-
|
|
403
|
-
[project_sync.codex]
|
|
404
|
-
skills = ["hack-cli", "hack-tickets"]
|
|
405
|
-
agents = ["review-operator"]
|
|
406
|
-
automations = ["project-check"]
|
|
407
|
-
mcp_servers = ["github"]
|
|
408
|
-
global_docs = true
|
|
409
|
-
tool_rules = true
|
|
410
|
-
tool_config = true
|
|
411
|
-
```
|
|
412
|
-
|
|
413
|
-
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.
|
|
414
|
-
|
|
415
|
-
### Snippets
|
|
416
|
-
|
|
417
|
-
Snippets use HTML comment markers:
|
|
418
|
-
|
|
419
|
-
```md
|
|
420
|
-
<!-- fclty:global/codex/baseline -->
|
|
421
|
-
<!-- /fclty:global/codex/baseline -->
|
|
422
|
-
```
|
|
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
|
|
423
194
|
|
|
424
|
-
|
|
425
|
-
- unscoped marker `codingstyle` prefers `snippets/projects/<project>/codingstyle.md`, then falls back to `snippets/global/codingstyle.md`
|
|
426
|
-
- explicit marker `global/codex/baseline` resolves directly to `snippets/global/codex/baseline.md`
|
|
427
|
-
|
|
428
|
-
Commands:
|
|
429
|
-
|
|
430
|
-
```bash
|
|
431
|
-
fclt snippets list
|
|
432
|
-
fclt snippets show global/codex/baseline
|
|
433
|
-
fclt snippets sync [--dry-run] [file...]
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
Snippets are already used during global Codex `AGENTS.md` rendering.
|
|
437
|
-
|
|
438
|
-
### Composable instructions and refs
|
|
439
|
-
|
|
440
|
-
Use instruction templates for atomic reusable doctrine:
|
|
441
|
-
|
|
442
|
-
```bash
|
|
443
|
-
fclt templates init instruction BUN
|
|
444
|
-
fclt templates init instruction lang/RUST
|
|
445
|
-
fclt show instruction:BUN
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
Use canonical refs to compose instructions without hard-coding paths:
|
|
195
|
+
Refs let markdown point at canonical assets without hard-coding paths:
|
|
449
196
|
|
|
450
197
|
```text
|
|
451
198
|
@ai/instructions/BUN.md
|
|
@@ -453,465 +200,212 @@ Use canonical refs to compose instructions without hard-coding paths:
|
|
|
453
200
|
@builtin/facult-operating-model/instructions/WORK_UNITS.md
|
|
454
201
|
```
|
|
455
202
|
|
|
456
|
-
|
|
203
|
+
Snippet markers let repeated blocks stay independently editable:
|
|
457
204
|
|
|
458
205
|
```md
|
|
459
206
|
<!-- fclty:global/lang/bun -->
|
|
460
207
|
<!-- /fclty:global/lang/bun -->
|
|
461
208
|
```
|
|
462
209
|
|
|
463
|
-
The
|
|
464
|
-
|
|
465
|
-
### Graph inspection
|
|
466
|
-
|
|
467
|
-
The generated graph in `.ai/.facult/ai/graph.json` is queryable directly:
|
|
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.
|
|
468
211
|
|
|
469
|
-
|
|
470
|
-
fclt graph show instruction:WRITING
|
|
471
|
-
fclt graph deps AGENTS.global.md
|
|
472
|
-
fclt graph dependents @project/instructions/TESTING.md
|
|
473
|
-
```
|
|
212
|
+
## Writeback and evolution
|
|
474
213
|
|
|
475
|
-
|
|
476
|
-
- snippet markers like `<!-- fclty:... -->`
|
|
477
|
-
- config-backed refs like `${refs.*}`
|
|
478
|
-
- canonical refs like `@ai/...`
|
|
479
|
-
- project refs like `@project/...`
|
|
480
|
-
- rendered outputs such as managed agents, docs, MCP configs, tool configs, and tool rules
|
|
214
|
+
Writeback is preserved signal from real work. Evolution turns repeated signal into reviewed changes.
|
|
481
215
|
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
`fclt` also has a local writeback and evolution layer built on top of the graph:
|
|
216
|
+
Record one targeted writeback when the signal is durable:
|
|
485
217
|
|
|
486
218
|
```bash
|
|
487
219
|
fclt ai writeback add \
|
|
488
220
|
--kind weak_verification \
|
|
489
|
-
--summary "
|
|
490
|
-
--asset instruction:VERIFICATION
|
|
491
|
-
--tag verification \
|
|
492
|
-
--tag false-positive
|
|
493
|
-
|
|
494
|
-
fclt ai writeback list
|
|
495
|
-
fclt ai writeback show WB-00001
|
|
496
|
-
fclt ai writeback group --by asset
|
|
497
|
-
fclt ai writeback summarize --by kind
|
|
498
|
-
fclt ai evolve propose
|
|
499
|
-
fclt ai evolve list
|
|
500
|
-
fclt ai evolve show EV-00001
|
|
501
|
-
fclt ai evolve draft EV-00001
|
|
502
|
-
fclt ai evolve review EV-00001
|
|
503
|
-
fclt ai evolve accept EV-00001
|
|
504
|
-
fclt ai evolve reject EV-00001 --reason "Needs a tighter draft"
|
|
505
|
-
fclt ai evolve supersede EV-00001 --by EV-00002
|
|
506
|
-
fclt ai evolve apply EV-00001
|
|
507
|
-
fclt ai evolve promote EV-00003 --to global --project
|
|
221
|
+
--summary "Checks were too shallow" \
|
|
222
|
+
--asset instruction:VERIFICATION
|
|
508
223
|
```
|
|
509
224
|
|
|
510
|
-
|
|
511
|
-
- global writeback state: machine-local Facult state under `.../global/ai/global/...`
|
|
512
|
-
- project writeback state: machine-local per-project Facult state under `.../projects/<slug-hash>/ai/project/...`
|
|
513
|
-
- editor-facing writeback review artifacts: `~/.ai/writebacks/global/*.md` and `~/.ai/writebacks/projects/<slug-hash>/*.md`
|
|
514
|
-
- editor-facing evolution review artifacts: `~/.ai/evolution/global/*.md` and `~/.ai/evolution/projects/<slug-hash>/*.md`
|
|
515
|
-
|
|
516
|
-
That split is intentional:
|
|
517
|
-
- canonical source remains in `~/.ai` or `<repo>/.ai`
|
|
518
|
-
- 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
|
|
519
|
-
- human-readable review artifacts always live under the global `~/.ai` root, even when the signal is project-scoped
|
|
520
|
-
- 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
|
|
521
|
-
- those records let agents and humans inspect what changed, why it changed, and how it was reviewed
|
|
522
|
-
|
|
523
|
-
Use writeback when:
|
|
524
|
-
- a task exposed a weak or misleading verification loop
|
|
525
|
-
- an instruction or agent was missing key context
|
|
526
|
-
- a pattern proved reusable enough to become doctrine
|
|
527
|
-
- a project-local pattern deserves promotion toward global capability
|
|
528
|
-
- a skill, tool, prompt, or default behavior repeatedly slows agents down without hard-failing
|
|
529
|
-
|
|
530
|
-
Do not think of writeback as note-taking. Treat it as preserved signal that should improve the system.
|
|
531
|
-
|
|
532
|
-
Recommended agent behavior:
|
|
533
|
-
- record a writeback directly when the learning is durable, scoped, and targetable
|
|
534
|
-
- prefer project scope for repo-specific tooling, tests, architecture, or workflow
|
|
535
|
-
- use global scope for shared doctrine, shared skills, shared agents, or cross-project capability gaps
|
|
536
|
-
- group or summarize before proposing evolution unless the missing capability is already obvious
|
|
537
|
-
- use the smallest proposal kind that fits: `update_asset`, `create_asset`, `extract_snippet`, `add_skill`, or `promote_asset`
|
|
538
|
-
- do not create proposals for one-off preferences, speculative ideas, or duplicate noise
|
|
539
|
-
|
|
540
|
-
Current apply semantics are intentionally policy-bound:
|
|
541
|
-
- targets are resolved through the generated graph when possible and fall back to canonical ref resolution for missing assets
|
|
542
|
-
- apply is limited to markdown canonical assets
|
|
543
|
-
- proposals must be drafted before they can be applied; higher-risk proposals still require explicit acceptance
|
|
544
|
-
- supported proposal kinds currently include `create_instruction`, `update_instruction`, `create_agent`, `update_agent`, `update_asset`, `create_asset`, `extract_snippet`, `add_skill`, and `promote_asset`
|
|
545
|
-
- 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
|
|
546
|
-
|
|
547
|
-
Current review/draft semantics:
|
|
548
|
-
- `writeback group` and `writeback summarize` expose recurring patterns across `asset`, `kind`, and `domain` without mutating canonical assets
|
|
549
|
-
- every writeback/proposal mutation refreshes a Markdown review artifact under global `~/.ai/writebacks/...` or `~/.ai/evolution/...` with frontmatter metadata
|
|
550
|
-
- 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
|
|
551
|
-
- rerunning `evolve draft <id> --append ...` revises the draft and records draft history
|
|
552
|
-
- `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`
|
|
553
|
-
|
|
554
|
-
Review surfaces:
|
|
555
|
-
- open `~/.ai/writebacks/` and `~/.ai/evolution/` in a Markdown editor for global and project-scoped review artifacts
|
|
556
|
-
- `fclt status --json` reports queue/proposal paths, review artifact paths, and counts for the active scope
|
|
557
|
-
- `fclt ai writeback list|show|group|summarize` reviews raw and clustered signal
|
|
558
|
-
- `fclt ai evolve list|show|review` reviews proposal state without applying changes
|
|
559
|
-
- `fclt templates init automation learning-review` scaffolds background writeback capture/review
|
|
560
|
-
- `fclt templates init automation evolution-review` scaffolds periodic proposal review
|
|
561
|
-
- `fclt templates init automation tool-call-audit` scaffolds repeated tool-friction review
|
|
562
|
-
|
|
563
|
-
### Scope and source selection
|
|
564
|
-
|
|
565
|
-
Most inventory and sync commands support explicit canonical-root selection:
|
|
566
|
-
|
|
567
|
-
- `--global` to force `~/.ai`
|
|
568
|
-
- `--project` to force the nearest repo-local `.ai`
|
|
569
|
-
- `--root /path/to/.ai` to point at a specific canonical root
|
|
570
|
-
- `--scope merged|global|project` for discovery views
|
|
571
|
-
- `--source builtin|global|project` to filter provenance in list/find/show/graph flows
|
|
572
|
-
|
|
573
|
-
## Security and Trust
|
|
574
|
-
|
|
575
|
-
`fclt` has two trust layers:
|
|
576
|
-
- Item trust: `fclt trust <name>` / `fclt untrust <name>`
|
|
577
|
-
- Source trust: `fclt sources ...` with levels `trusted`, `review`, `blocked`
|
|
578
|
-
|
|
579
|
-
Bulk trust annotations are also supported:
|
|
225
|
+
Review accumulated signal:
|
|
580
226
|
|
|
581
227
|
```bash
|
|
582
|
-
fclt
|
|
583
|
-
fclt
|
|
584
|
-
fclt
|
|
228
|
+
fclt ai writeback list
|
|
229
|
+
fclt ai writeback group --by asset
|
|
230
|
+
fclt ai writeback summarize --by kind
|
|
585
231
|
```
|
|
586
232
|
|
|
587
|
-
|
|
233
|
+
Draft a proposal only when the evidence repeats, a capability is clearly missing, or a canonical asset is stale:
|
|
588
234
|
|
|
589
|
-
1. Interactive audit workflow:
|
|
590
235
|
```bash
|
|
591
|
-
fclt
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
fclt audit --non-interactive --severity high
|
|
596
|
-
fclt audit --non-interactive mcp:github --severity medium --json
|
|
597
|
-
```
|
|
598
|
-
3. Agent-based audit (Claude/Codex review pass):
|
|
599
|
-
```bash
|
|
600
|
-
fclt audit --non-interactive --with claude --max-items 50
|
|
601
|
-
fclt audit --non-interactive --with codex --max-items all --json
|
|
602
|
-
```
|
|
603
|
-
|
|
604
|
-
4. Suppress or remediate reviewed findings:
|
|
605
|
-
```bash
|
|
606
|
-
fclt audit safe mcp:github --rule static:mcp-env-inline-secret --note "global managed render only"
|
|
607
|
-
fclt audit safe --all --source static --yes
|
|
608
|
-
fclt audit fix mcp:github
|
|
609
|
-
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
|
|
610
240
|
```
|
|
611
241
|
|
|
612
|
-
|
|
613
|
-
1. `fclt verify-source <source>`
|
|
614
|
-
2. `fclt sources trust <source>` only after review
|
|
615
|
-
3. use `--strict-source-trust` for `install`/`update`
|
|
616
|
-
4. keep tracked canonical MCP config secret-free; use `mcp/servers.local.json` for machine-local secrets
|
|
617
|
-
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.
|
|
618
243
|
|
|
619
|
-
##
|
|
244
|
+
## Built-in pack
|
|
620
245
|
|
|
621
|
-
|
|
246
|
+
`fclt` ships an operating-model pack that teaches agents how to work in loops instead of one-off prompts:
|
|
622
247
|
|
|
623
|
-
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
fclt show mcp:<name> [--show-secrets]
|
|
631
|
-
fclt find <query> [--json]
|
|
632
|
-
```
|
|
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
|
|
633
255
|
|
|
634
|
-
|
|
635
|
-
```bash
|
|
636
|
-
fclt consolidate [--auto keep-current|keep-incoming|keep-newest] [--from <path> ...]
|
|
637
|
-
fclt index [--force]
|
|
638
|
-
fclt migrate [--from <path>] [--dry-run] [--move] [--write-config]
|
|
639
|
-
```
|
|
256
|
+
Install it without managing any tool:
|
|
640
257
|
|
|
641
|
-
- Managed mode and rollout
|
|
642
258
|
```bash
|
|
643
|
-
fclt
|
|
644
|
-
fclt
|
|
645
|
-
fclt
|
|
646
|
-
fclt enable <name> [--for <tool1,tool2,...>]
|
|
647
|
-
fclt enable mcp:<name> [--for <tool1,tool2,...>]
|
|
648
|
-
fclt disable <name> [--for <tool1,tool2,...>]
|
|
649
|
-
fclt trust --all
|
|
650
|
-
fclt trust skills --all
|
|
651
|
-
fclt untrust mcp --all
|
|
652
|
-
fclt sync [tool] [--dry-run] [--adopt-live] [--builtin-conflicts overwrite]
|
|
653
|
-
fclt autosync install [tool] [--git-remote <name>] [--git-branch <name>] [--git-interval-minutes <n>] [--git-disable]
|
|
654
|
-
fclt autosync status [tool]
|
|
655
|
-
fclt autosync restart [tool]
|
|
656
|
-
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
|
|
657
262
|
```
|
|
658
263
|
|
|
659
|
-
|
|
660
|
-
```bash
|
|
661
|
-
fclt search <query> [--index <name>] [--limit <n>]
|
|
662
|
-
fclt install <index:item> [--as <name>] [--force] [--strict-source-trust]
|
|
663
|
-
fclt update [--apply] [--strict-source-trust]
|
|
664
|
-
fclt verify-source <name> [--json]
|
|
665
|
-
fclt sources list
|
|
666
|
-
fclt sources trust <source> [--note <text>]
|
|
667
|
-
fclt sources review <source> [--note <text>]
|
|
668
|
-
fclt sources block <source> [--note <text>]
|
|
669
|
-
fclt sources clear <source>
|
|
670
|
-
```
|
|
264
|
+
The pack is also available as built-in refs under:
|
|
671
265
|
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
fclt templates list
|
|
675
|
-
fclt templates init operating-model [--global|--project|--root PATH] [--force] [--dry-run]
|
|
676
|
-
fclt templates init project-ai
|
|
677
|
-
fclt templates init skill <name>
|
|
678
|
-
fclt templates init mcp <name>
|
|
679
|
-
fclt templates init agent <name>
|
|
680
|
-
fclt templates init instruction <name>
|
|
681
|
-
fclt templates init snippet <marker>
|
|
682
|
-
fclt templates init agents
|
|
683
|
-
fclt templates init automation <template-id> --scope global|project|wide [--name <name>] [--project-root <path>] [--cwds <path1,path2>] [--rrule <RRULE>] [--status PAUSED|ACTIVE]
|
|
684
|
-
|
|
685
|
-
fclt snippets list
|
|
686
|
-
fclt snippets show <marker>
|
|
687
|
-
fclt snippets create <marker>
|
|
688
|
-
fclt snippets edit <marker>
|
|
689
|
-
fclt snippets sync [--dry-run] [file...]
|
|
266
|
+
```text
|
|
267
|
+
@builtin/facult-operating-model/...
|
|
690
268
|
```
|
|
691
269
|
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
`templates init automation` can scaffold three Codex automation forms:
|
|
695
|
-
|
|
696
|
-
- `--scope project` (single repo): set `--project-root` (or infer from current working directory)
|
|
697
|
-
- `--scope wide|global` (multiple repos): set `--cwds` explicitly; if omitted, created automation has no `cwds` by default.
|
|
698
|
-
- 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).
|
|
699
|
-
- 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.
|
|
700
|
-
|
|
701
|
-
Recommended topology:
|
|
702
|
-
|
|
703
|
-
- 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/...`.
|
|
704
|
-
- 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`).
|
|
705
|
-
- 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.
|
|
706
|
-
- 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.
|
|
707
|
-
- 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.
|
|
708
|
-
- Add `tool-call-audit` when you want a focused background loop for repeated tool failures, missing skills, excessive retries, or shallow-success patterns.
|
|
709
|
-
- 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.
|
|
710
|
-
|
|
711
|
-
Files are written to:
|
|
712
|
-
|
|
713
|
-
- `~/.codex/automations/<name>/automation.toml`
|
|
714
|
-
- `~/.codex/automations/<name>/memory.md`
|
|
715
|
-
|
|
716
|
-
When Codex is in managed mode, canonical automation sources live under:
|
|
270
|
+
## Automation
|
|
717
271
|
|
|
718
|
-
|
|
719
|
-
- `<repo>/.ai/automations/<name>/...` for project-scoped canonical state
|
|
720
|
-
|
|
721
|
-
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.
|
|
722
|
-
|
|
723
|
-
Example project automation:
|
|
272
|
+
`fclt` can scaffold Codex automations for recurring review loops:
|
|
724
273
|
|
|
725
274
|
```bash
|
|
726
|
-
fclt templates init automation
|
|
275
|
+
fclt templates init automation learning-review \
|
|
727
276
|
--scope project \
|
|
728
277
|
--project-root /path/to/repo \
|
|
729
|
-
--name project-tool-audit \
|
|
730
|
-
--status ACTIVE
|
|
731
|
-
```
|
|
732
|
-
|
|
733
|
-
Example global automation:
|
|
734
|
-
|
|
735
|
-
```bash
|
|
736
|
-
fclt templates init automation learning-review \
|
|
737
|
-
--scope wide \
|
|
738
|
-
--cwds /path/to/repo-a,/path/to/repo-b \
|
|
739
278
|
--status PAUSED
|
|
740
|
-
```
|
|
741
|
-
|
|
742
|
-
Example weekly evolution automation:
|
|
743
279
|
|
|
744
|
-
```bash
|
|
745
280
|
fclt templates init automation evolution-review \
|
|
746
281
|
--scope wide \
|
|
747
282
|
--cwds /path/to/repo-a,/path/to/repo-b \
|
|
748
|
-
--
|
|
283
|
+
--status PAUSED
|
|
284
|
+
|
|
285
|
+
fclt templates init automation tool-call-audit \
|
|
286
|
+
--scope project \
|
|
287
|
+
--project-root /path/to/repo \
|
|
749
288
|
--status PAUSED
|
|
750
289
|
```
|
|
751
290
|
|
|
752
|
-
|
|
291
|
+
Use `learning-review` to preserve signal, `evolution-review` to triage proposals, and `tool-call-audit` to find repeated tool friction.
|
|
753
292
|
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
```
|
|
293
|
+
## Security and trust
|
|
294
|
+
|
|
295
|
+
Remote capability should be reviewed before broad use.
|
|
758
296
|
|
|
759
|
-
For full flags and exact usage:
|
|
760
297
|
```bash
|
|
761
|
-
fclt
|
|
762
|
-
fclt
|
|
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
|
|
763
302
|
```
|
|
764
303
|
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
4. `~/.ai`
|
|
772
|
-
5. `~/agents/.facult` (or a detected legacy store under `~/agents/`)
|
|
773
|
-
|
|
774
|
-
### Runtime env vars
|
|
775
|
-
|
|
776
|
-
- `FACULT_ROOT_DIR`: override canonical store location
|
|
777
|
-
- `FACULT_VERSION`: version selector for `scripts/install.sh` (`latest` by default)
|
|
778
|
-
- `FACULT_INSTALL_DIR`: install target dir for `scripts/install.sh` (`~/.ai/.facult/bin` by default)
|
|
779
|
-
- `FACULT_INSTALL_PM`: force package manager detection for npm bootstrap launcher (`npm` or `bun`)
|
|
780
|
-
|
|
781
|
-
### State and report files
|
|
782
|
-
|
|
783
|
-
Under canonical generated AI state (`~/.ai/.facult/` or `<repo>/.ai/.facult/`):
|
|
784
|
-
- `sources.json` (latest inventory scan state)
|
|
785
|
-
- `consolidated.json` (consolidation state)
|
|
786
|
-
- `ai/index.json` (generated canonical AI inventory)
|
|
787
|
-
- `audit/static-latest.json` (latest static audit report)
|
|
788
|
-
- `audit/agent-latest.json` (latest agent audit report)
|
|
789
|
-
- `trust/sources.json` (source trust policy state)
|
|
790
|
-
|
|
791
|
-
Under machine-local Facult state:
|
|
792
|
-
- `install.json` (machine-local install metadata)
|
|
793
|
-
- `global/managed.json` or `projects/<slug-hash>/managed.json` (managed tool state)
|
|
794
|
-
- `global/ai/global/writeback/queue.jsonl` and `projects/<slug-hash>/ai/project/writeback/queue.jsonl` (writeback queues)
|
|
795
|
-
- `global/ai/global/evolution/` and `projects/<slug-hash>/ai/project/evolution/` (proposal metadata, markdown drafts, and patch artifacts)
|
|
796
|
-
- `.../autosync/services/*.json` (autosync service configs)
|
|
797
|
-
- `.../autosync/state/*.json` (autosync runtime state)
|
|
798
|
-
- `.../autosync/logs/*` (autosync service logs)
|
|
799
|
-
- `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)
|
|
800
|
-
- if that cache root is unavailable, the npm launcher falls back to a temp-dir runtime cache before using the bundled source fallback
|
|
801
|
-
|
|
802
|
-
Under global Markdown review state (`~/.ai/`):
|
|
803
|
-
- `writebacks/global/*.md` and `writebacks/projects/<slug-hash>/*.md` (frontmatter-rich writeback review artifacts)
|
|
804
|
-
- `evolution/global/*.md` and `evolution/projects/<slug-hash>/*.md` (frontmatter-rich proposal review artifacts, including latest draft body when present)
|
|
805
|
-
|
|
806
|
-
### Config reference
|
|
807
|
-
|
|
808
|
-
`~/.ai/.facult/config.json` supports:
|
|
809
|
-
- `rootDir`
|
|
810
|
-
- `scanFrom`
|
|
811
|
-
- `scanFromIgnore`
|
|
812
|
-
- `scanFromNoDefaultIgnore`
|
|
813
|
-
- `scanFromMaxVisits`
|
|
814
|
-
- `scanFromMaxResults`
|
|
815
|
-
|
|
816
|
-
`scanFrom*` settings are used by `scan`/`audit` unless `--no-config-from` is passed.
|
|
817
|
-
|
|
818
|
-
Example:
|
|
819
|
-
```json
|
|
820
|
-
{
|
|
821
|
-
"rootDir": "~/.ai",
|
|
822
|
-
"scanFrom": ["~/dev", "~/work"],
|
|
823
|
-
"scanFromIgnore": ["vendor", ".venv"],
|
|
824
|
-
"scanFromNoDefaultIgnore": false,
|
|
825
|
-
"scanFromMaxVisits": 20000,
|
|
826
|
-
"scanFromMaxResults": 5000
|
|
827
|
-
}
|
|
304
|
+
Audit local capability:
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
fclt audit
|
|
308
|
+
fclt audit --non-interactive --severity high
|
|
309
|
+
fclt audit fix mcp:github
|
|
828
310
|
```
|
|
829
311
|
|
|
830
|
-
|
|
312
|
+
Keep tracked MCP config secret-free. Use local overlays such as `mcp/servers.local.json` for machine-specific secrets.
|
|
831
313
|
|
|
832
|
-
|
|
833
|
-
- `facult` (builtin templates)
|
|
834
|
-
- `smithery`
|
|
835
|
-
- `glama`
|
|
836
|
-
- `skills.sh`
|
|
837
|
-
- `clawhub`
|
|
314
|
+
## Command Map
|
|
838
315
|
|
|
839
|
-
|
|
316
|
+
Discovery:
|
|
840
317
|
|
|
841
|
-
|
|
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
|
+
```
|
|
842
331
|
|
|
843
|
-
|
|
332
|
+
Canonical store:
|
|
844
333
|
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
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
|
+
```
|
|
851
345
|
|
|
852
|
-
|
|
346
|
+
Managed mode:
|
|
853
347
|
|
|
854
348
|
```bash
|
|
855
|
-
fclt
|
|
856
|
-
fclt
|
|
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>
|
|
857
355
|
```
|
|
858
356
|
|
|
859
|
-
|
|
357
|
+
Writeback and evolution:
|
|
860
358
|
|
|
861
359
|
```bash
|
|
862
|
-
|
|
863
|
-
fclt
|
|
864
|
-
fclt
|
|
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
|
|
865
363
|
```
|
|
866
364
|
|
|
867
|
-
|
|
365
|
+
Sources, audit, and updates:
|
|
868
366
|
|
|
869
367
|
```bash
|
|
870
|
-
fclt
|
|
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
|
|
871
375
|
```
|
|
872
376
|
|
|
873
|
-
|
|
874
|
-
- do not sync on every file event
|
|
875
|
-
- mark the canonical repo dirty on local changes
|
|
876
|
-
- on the configured timer, fetch, auto-commit local canonical changes if needed, pull `--rebase`, then push
|
|
877
|
-
- 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.
|
|
878
378
|
|
|
879
|
-
##
|
|
379
|
+
## Documentation
|
|
880
380
|
|
|
881
|
-
|
|
381
|
+
Start with:
|
|
882
382
|
|
|
883
|
-
|
|
884
|
-
-
|
|
885
|
-
-
|
|
886
|
-
-
|
|
887
|
-
-
|
|
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
|
|
888
390
|
|
|
889
|
-
##
|
|
391
|
+
## FAQ
|
|
890
392
|
|
|
891
|
-
|
|
393
|
+
### Does fclt run an MCP server?
|
|
892
394
|
|
|
893
|
-
|
|
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.
|
|
894
396
|
|
|
895
|
-
### Does fclt
|
|
397
|
+
### Does fclt have to manage Codex or Claude files?
|
|
896
398
|
|
|
897
|
-
|
|
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.
|
|
898
400
|
|
|
899
|
-
|
|
401
|
+
### Where do project writebacks go?
|
|
900
402
|
|
|
901
|
-
|
|
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`.
|
|
902
404
|
|
|
903
|
-
|
|
904
|
-
- canonical user-owned AI source in `~/.ai`
|
|
905
|
-
- rendered managed outputs in tool homes such as `~/.codex`, `~/.agents`, and `~/plugins`
|
|
906
|
-
- global instruction docs such as `AGENTS.global.md`, rendered by default into `~/.codex/AGENTS.md`, `~/.claude/CLAUDE.md`, and `~/.cursor/AGENTS.md`
|
|
907
|
-
- Codex-authored skills in `~/.agents/skills`
|
|
908
|
-
- Codex local plugin marketplaces in `~/.agents/plugins/marketplace.json`
|
|
909
|
-
- Codex local plugin bundles in `~/plugins/<plugin-name>`
|
|
910
|
-
- tool-native configs such as `~/.codex/config.toml`
|
|
911
|
-
- tool-native rule files such as `~/.codex/rules/*.rules`
|
|
405
|
+
### What should be committed?
|
|
912
406
|
|
|
913
|
-
|
|
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.
|
|
914
408
|
|
|
915
|
-
|
|
409
|
+
## Contributing
|
|
916
410
|
|
|
917
|
-
|
|
411
|
+
Contributor and release workflow details live in [CONTRIBUTING.md](./CONTRIBUTING.md).
|