@zecalis/fael 0.11.1 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,15 +8,16 @@
8
8
  **The secretary for every agent on your team.** Every agent on your repo knows what was decided and
9
9
  what's still open — without re-asking, and without a context dump.
10
10
 
11
- One person runs five agents; a team runs fifty. Each one starts from zero: it finds the same flaky
12
- test, re-asks why that function looks weird, and repeats the mistake the last agent already fixed.
11
+ One person runs five agents; a team runs fifty — and each of those hands work to sub-agents. Every
12
+ one of them starts from zero: it finds the same flaky test, re-asks why that function looks weird,
13
+ and repeats the mistake the last agent already fixed.
13
14
  Memory tools that try to help stuff a summary of everything into context before the agent has said
14
15
  what it's about to do — you pay tokens for noise, and the one row that mattered gets averaged away.
15
16
 
16
17
  fael works the other way round: like a good secretary, it takes the notes nobody else will and hands
17
- each agent **only what matters for the file in front of it**. The agent **can't finish without
18
- writing**, and when it opens a file it gets **only what was written about that file**. The file it
19
- touches is the question.
18
+ each agent **only what matters for the file in front of it**. The agent writes down what it decided
19
+ or found **in the same reply, at no extra turn**, and when it opens a file it gets **only what was
20
+ written about that file**. The file it touches is the question.
20
21
 
21
22
  The team isn't only the people who write code. A PM, QA, EM or tech lead writes a requirement, a
22
23
  decision or an assignment once — through their own agent or the CLI — and every dev agent that
@@ -24,17 +25,21 @@ touches that code later gets it, so the next feature doesn't forget what the las
24
25
 
25
26
  fael gives the repo a memory that agents can't skip:
26
27
 
27
- - **They have to write.** When an agent edited files but recorded nothing, fael stops the turn and
28
- asks for a note. Mention a bug without filing it? Same.
28
+ - **Writing costs no extra turn.** The agent ends its reply with `fael decision|issue|note: …
29
+ [files: …]` lines and fael files them — no turn is stopped or re-prompted. Want the old
30
+ enforcement (no row, no end of turn)? Opt in with `[capture] block = true`.
29
31
  - **Memory finds them.** When an agent reads a file, the decisions and open bugs about *that file*
30
- come attached — nobody has to remember to search.
31
- - **No spam in context.** Rows are pushed per file, once per session, and cut to a token budget
32
+ come attached — nobody has to remember to search. Sub-agents too: one starts with an empty
33
+ context and only a short brief, and the file it opens brings the memory the brief left out.
34
+ - **No spam in context.** Rows are pushed per file, once per context window (a sub-agent, or a
35
+ session after compaction, is told again — it no longer has them), and cut to a token budget
32
36
  (800 by default) — not a notes dump. Anything else the agent asks for itself, through MCP.
33
37
  `fael stats` shows exactly what fael has put into context.
34
38
  - **It follows the code.** Rename a file and its rows follow it (`git log -M`). Split one into
35
39
  several and `fael mv old new` points the rows at the new files.
36
- - **It lives in git.** Rows are plain JSONL in `.fael/`. Clone the repo and you get every decision,
37
- bug and note with it — for every agent and every person on the team. No server, no account.
40
+ - **It lives in your git, out of your branches.** Rows are plain JSONL in the clone's `.git/fael/`,
41
+ shared at once by every worktree, so PRs never carry log lines to conflict on. `fael sync` carries
42
+ them to teammates through your own remote (`refs/fael/*`). No server, no account.
38
43
 
39
44
  Works with **Claude Code, Codex and OpenCode**, and any MCP host. One small binary; hooks run in 2–3 ms.
40
45
 
@@ -45,7 +50,9 @@ Works with **Claude Code, Codex and OpenCode**, and any MCP host. One small bina
45
50
  | Each session starts from zero | Session opens with what the last one left: open bugs, recent decisions |
46
51
  | "Why is it like this?" — ask again, guess again | The reason sits next to the file, from the agent that made the call |
47
52
  | Agent notices a bug mid-task, then forgets it | It's filed on the spot, and shown to whoever touches that file next |
48
- | Knowledge stays in one person's chat history | It's in the repo — teammates and their agents get it on `git pull` |
53
+ | Two agents in parallel worktrees hit the same problem | The first files it; the second gets it when it opens the file — the same hour, before any commit |
54
+ | A sub-agent finds something and its summary drops it | Its `fael issue: …` line is filed when it stops (Claude Code), and the parent gets it on that file |
55
+ | Knowledge stays in one person's chat history | It's in the clone — teammates and their agents get it on `fael sync` |
49
56
  | A PM's requirement lives in a ticket the agent never opens | `fael add decision … --files src/pay.rs` — it's in front of the agent the moment it opens the file |
50
57
 
51
58
  ## Install
@@ -76,16 +83,24 @@ fael install --dry-run # show what would change, write nothing
76
83
  an old path. That's also why `npx @zecalis/fael install` is refused: npx keeps the binary in a
77
84
  throwaway cache. Install it globally first.
78
85
 
79
- **3. Work as usual.** The first row an agent writes creates `.fael/log/` in the repo — commit it like code.
86
+ **3. Work as usual.** Rows land in `.git/fael/` — nothing to commit. To share them or back them up:
87
+
88
+ ```bash
89
+ git config fael.remote <url> # any git remote you can push to — origin works, a private one if the repo is public
90
+ fael sync # push your rows, pull everyone else's (the Stop hook also runs it once per session)
91
+ ```
92
+
93
+ Rather review memory in PRs? `store = "tracked"` in `.fael/config.toml` also writes the rows to
94
+ `.fael/log/` in the tree, to commit like code. Repos that already have a `.fael/log/` keep that mode;
95
+ `fael migrate local` moves one over ([docs/integrate.md](docs/integrate.md#moving-a-tracked-repo-to-local)).
80
96
 
81
97
  ## How it works
82
98
 
83
99
  ```
84
100
  agent reads src/pay.rs → fael attaches: "[bug] refund rounds down on JPY → src/pay.rs"
85
- agent edits src/pay.rs → fael notes the edit
86
- agent tries to finish → fael: "you edited src/pay.rs — record what changed or what you found"
87
- agent → fael add decision "refunds round half-up, per finance" --files src/pay.rs
88
- git push → the next agent, on any machine, sees it when it opens src/pay.rs
101
+ agent fixes it, replies → "…done. fael decision: refunds round half-up, per finance [files: src/pay.rs]"
102
+ fael → files that line as a row — no extra turn, nothing blocked
103
+ fael sync → the next agent, on any machine, sees it when it opens src/pay.rs
89
104
  ```
90
105
 
91
106
  Agents use the `fael` MCP server (`find`, `add`, `close`). You can use the same log from the shell:
@@ -97,7 +112,7 @@ fael add bug "refund rounds down on JPY" --files src/pay.rs
97
112
  fael add issue "count from order date or ship date?" --to finance --files src/pay.rs
98
113
  fael close <id> "fixed in 4f2a91c"
99
114
  fael mv src/pay.rs src/pay/refund.rs # a split git can't see — rows follow
100
- fael doctor # check the setup (e.g. a gitignored .fael/log)
115
+ fael doctor # check the setup (e.g. no fael.remote to back rows up)
101
116
  ```
102
117
 
103
118
  `fael` with no arguments lists every command.
@@ -19,7 +19,7 @@
19
19
  "hasInstallScript": true,
20
20
  "license": "MIT",
21
21
  "name": "@zecalis/fael",
22
- "version": "0.11.1"
22
+ "version": "0.13.0"
23
23
  },
24
24
  "node_modules/detect-libc": {
25
25
  "engines": {
@@ -48,5 +48,5 @@
48
48
  }
49
49
  },
50
50
  "requires": true,
51
- "version": "0.11.1"
51
+ "version": "0.13.0"
52
52
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "artifactDownloadUrls": [
3
- "https://github.com/zecalis/fael/releases/download/v0.11.1"
3
+ "https://github.com/zecalis/fael/releases/download/v0.13.0"
4
4
  ],
5
5
  "bin": {
6
6
  "fael": "run-fael.js"
@@ -81,7 +81,7 @@
81
81
  "zipExt": ".tar.xz"
82
82
  }
83
83
  },
84
- "version": "0.11.1",
84
+ "version": "0.13.0",
85
85
  "volta": {
86
86
  "node": "18.14.1",
87
87
  "npm": "9.5.0"