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