@intentic/claude-plugin 1.317.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.
@@ -0,0 +1,82 @@
1
+ {
2
+ "name": "intentic",
3
+ "displayName": "Intentic",
4
+ "version": "1.317.0",
5
+ "description": "Cheaper, sharper Claude Code sessions: Bash output trimmed before Claude reads it, a project map and this project's field notes at session start, iq code search and fileq document reading taught, document shadows kept fresh, and /intentic:stats to show what each one saved. Every mechanism is a switch in /config.",
6
+ "author": {
7
+ "name": "intentic"
8
+ },
9
+ "homepage": "https://github.com/intentic/intentic/tree/main/_sandbox/claude-plugin",
10
+ "repository": "https://github.com/intentic/intentic",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "context",
14
+ "token-savings",
15
+ "output-filter",
16
+ "code-search",
17
+ "documents",
18
+ "measurement"
19
+ ],
20
+ "skills": "./generated/skills",
21
+ "outputStyles": "./generated/output-styles",
22
+ "userConfig": {
23
+ "output_cleaners": {
24
+ "type": "boolean",
25
+ "title": "Trim Bash output",
26
+ "description": "Clean what a successful command printed before Claude reads it (progress bars, install chatter, repeated lines, the middle of huge logs), keep the full text retrievable with `retrieve-output`, and ledger what each cleaner saved.",
27
+ "default": true
28
+ },
29
+ "cleaners": {
30
+ "type": "string",
31
+ "title": "Cleaners",
32
+ "description": "Which cleaners run, as the sandbox spells it: empty for all, `-cap,-wide` to switch some off, `git,pnpm` to allow only those. `/intentic:stats` lists them by what they saved.",
33
+ "default": ""
34
+ },
35
+ "output_holdout": {
36
+ "type": "number",
37
+ "title": "Untrimmed share",
38
+ "description": "Share of commands left untrimmed, so the saving can be measured against a real comparison and not only computed. 0 turns the comparison off; the exact per-command saving is reported either way.",
39
+ "default": 0,
40
+ "min": 0,
41
+ "max": 0.5
42
+ },
43
+ "project_map": {
44
+ "type": "boolean",
45
+ "title": "Project map",
46
+ "description": "Open each session with a map of the project it starts in: its areas, what each is for, and where Claude is standing. Worked out from the tree every time, never stored, so it cannot go stale.",
47
+ "default": true
48
+ },
49
+ "field_notes": {
50
+ "type": "boolean",
51
+ "title": "Field notes",
52
+ "description": "Open each session with this project's field notes: the traps past sessions hit and the commands that really verify. Written by `/intentic:field-notes` from your own sessions here; nothing is sent until you run it once.",
53
+ "default": true
54
+ },
55
+ "iq": {
56
+ "type": "boolean",
57
+ "title": "iq search",
58
+ "description": "Teach Claude the `iq` code search CLI and recall past sessions on a matching prompt. Needs `npm i -g @intentic/iq`; without it this switch does nothing and says so once.",
59
+ "default": true
60
+ },
61
+ "fileq": {
62
+ "type": "boolean",
63
+ "title": "fileq",
64
+ "description": "Let Claude read documents, PDFs, spreadsheets, slides, notebooks, images, audio and archives as markdown with the bundled `fileq` CLI. Off makes the command refuse; its one-line skill description stays listed, since a plugin cannot hide its own skills.",
65
+ "default": true
66
+ },
67
+ "shadows": {
68
+ "type": "boolean",
69
+ "title": "Document shadows",
70
+ "description": "Keep a markdown rendering of every document in the project up to date in the background (a sweep at session start and every ten minutes, and each binary file Claude writes), so a read finds one ready. Costs background CPU on a document-heavy project.",
71
+ "default": false
72
+ },
73
+ "holdout": {
74
+ "type": "number",
75
+ "title": "Measured share",
76
+ "description": "Share of sessions opened without the map, the field notes and the iq teaching, so `/intentic:stats` can show what each changed. 0 sends them to every session and measures nothing.",
77
+ "default": 0.1,
78
+ "min": 0,
79
+ "max": 0.5
80
+ }
81
+ }
82
+ }
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Artur Kurowski
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,116 @@
1
+ # intentic plugin for Claude Code
2
+
3
+ Trims Bash output before Claude reads it, opens each session with a map of the project and its field notes, teaches the `fileq` and `iq` CLIs, and reports what each of these saved. Every mechanism is a switch in `/config`.
4
+
5
+ ```
6
+ /plugin marketplace add intentic/intentic
7
+ /plugin install intentic@intentic
8
+ ```
9
+
10
+ The hooks and the bundled commands run on Node.js 20.11 or later, which has to be on `PATH`. Without it the plugin does nothing, and each session opens with one line saying so. Claude Code fetches the plugin from npm (`@intentic/claude-plugin`), so `npm` has to be installed too.
11
+
12
+ ## What it does
13
+
14
+ | When | What happens | Switch |
15
+ | --- | --- | --- |
16
+ | A session opens | Claude gets a map of the project: its areas, what each is for, and where the session started. It is recomputed from the tree for every session. | `project_map` |
17
+ | A session opens | Claude gets this project's field notes, cut by rank to 4,000 characters, if `/intentic:field-notes` has written them. | `field_notes` |
18
+ | A session opens | Claude is taught `iq`, a code search that answers a question with ranked `path:line` anchors, if `iq` is installed. | `iq` |
19
+ | A prompt is sent | `iq` points a prompt that matches earlier work at the session that did it. | `iq` |
20
+ | A Bash command succeeds | The output is cleaned before Claude reads it: progress bars, install chatter, repeated lines, the middle of huge logs. A footer names the command that reads the full text back. | `output_cleaners`, `cleaners` |
21
+ | Claude reads a document | `fileq` turns docx, pdf, xlsx, pptx, epub, ipynb, images, audio and archives into markdown. | `fileq` |
22
+ | In the background | Every document in the project keeps a markdown shadow that a read finds ready. A sweep runs when a session opens and at most every ten minutes as prompts arrive, and each document Claude writes is rendered at once. Off by default. | `shadows` |
23
+
24
+ A failed command reaches Claude unchanged. Outside an Intentic sandbox there is no secret store to mask values from, so the cleaners mask only text that looks like a credential: an assignment to a name like `API_KEY` or `TOKEN` whose value looks generated, bearer tokens, AWS access keys, and passwords in URLs.
25
+
26
+ The `intentic:Intentic` output style adds three working habits to Claude Code's own instructions: batch independent lookups, reuse what is already in context, and run long commands in the background instead of sleeping. Pick it in `/output-style`. It is off until you do.
27
+
28
+ ## Switches
29
+
30
+ Open `/config` and find the rows under intentic. The switches read at session start (`project_map`, `field_notes`, `iq`, `fileq`, `holdout`) apply from the next session.
31
+
32
+ | Key | Default | Effect |
33
+ | --- | --- | --- |
34
+ | `output_cleaners` | on | Clean successful Bash output and ledger what each cleaner saved |
35
+ | `cleaners` | empty (all) | Which cleaners run: `-cap,-wide` switches some off, `git,pnpm` allows only those |
36
+ | `output_holdout` | 0 | Share of commands left uncleaned, to measure the saving against real output |
37
+ | `project_map` | on | Send the project map at session start |
38
+ | `field_notes` | on | Send this project's field notes at session start |
39
+ | `iq` | on | Teach `iq` and run its session recall, when `iq` is installed |
40
+ | `fileq` | on | Let the bundled `fileq` run. Off, it refuses, and its skill stays listed because a plugin cannot hide its own skills |
41
+ | `shadows` | off | Keep document shadows fresh in the background |
42
+ | `holdout` | 0.1 | Share of sessions opened without the map, the notes and the iq teaching, so the report can compare |
43
+
44
+ ## What it saved
45
+
46
+ Run `/intentic:stats` for this project, or `/intentic:stats all` for every project the plugin has seen.
47
+
48
+ ```
49
+ ## Bash output
50
+ 412 commands trimmed: 1.9M tokens of output became 310k (84% saved, exact per command).
51
+ Biggest cleaners: cap 1.1M (96 commands), pnpm 210k (40 commands), dedup 88k (131 commands).
52
+
53
+ ## Session context
54
+ Project map, root listings in the opening turn: -71.4% ±18.2pp (95%): 0.4 with it vs 1.4 without, over 118 and 31 opening turns.
55
+ Field notes, failed tool calls per turn: no difference yet beyond ±24.1pp (95%): 0.6 with it vs 0.7 without, over 104 and 33 conversations.
56
+ iq teaching, search calls per turn: measuring, 12 of 30 conversations in the smaller arm: 2.1 with it vs 2.9 without, over 96 and 12 conversations.
57
+ ```
58
+
59
+ The numbers above are an illustration of the format. The report reads two things:
60
+
61
+ - The cleaners' ledger, one row per command with the bytes before and after and what each cleaner removed. That saving is exact. With `output_holdout` above 0 it also compares the median cleaned output against commands left uncleaned.
62
+ - Claude Code's own session transcripts, compared across the two arms each session was drawn into. A hash of the session id puts `holdout` of the sessions in the control arm for each mechanism, so the draw needs no state and gives the same answer every time it is read. The map is judged on directory listings of the project root in the first turn, the field notes on failed tool calls, and the iq teaching on search calls. A change is stated only once both arms hold 30 samples and the 95% margin excludes zero.
63
+
64
+ Document shadows are counted but not measured.
65
+
66
+ The arithmetic is the one behind the savings page of an Intentic sandbox, from the same packages, so a number here means what it means there.
67
+
68
+ ## Field notes
69
+
70
+ Run `/intentic:field-notes` every few weeks. It counts this project's sessions (failures by how many sessions hit them, the commands that ran and how often they failed, the files edited most) and asks Claude to rewrite `.claude/intentic/field-notes.toon` from that evidence, checking each fact against the project before writing it. Commit the file to share it with a team, or ignore it to keep it yours.
71
+
72
+ ## Where it keeps things
73
+
74
+ | Path | Holds |
75
+ | --- | --- |
76
+ | `~/.claude/plugins/data/intentic-intentic/` | `sessions.jsonl` (the arms each session drew), `options.json` (the switches of the last session), `output/` (the cleaners' ledger, the full text of trimmed commands, the repeat cache), sweep and ingest logs |
77
+ | `.claude/intentic/field-notes.toon` | This project's field notes |
78
+ | `.intentic/local/cache/derived/` | Document shadows. The directory ignores itself in git |
79
+
80
+ The plugin makes no network requests. Uninstalling it deletes the data directory unless you pass `--keep-data`.
81
+
82
+ ## Not included
83
+
84
+ The Intentic sandbox also replaces lines and sections of Claude Code's system prompt. A plugin can add an output style or replace the whole prompt with fixed text, but it cannot edit the prompt line by line, and a fixed copy would go stale with each Claude Code release. The working habits that hold outside a sandbox are in the `intentic:Intentic` output style instead.
85
+
86
+ ## Development
87
+
88
+ The plugin is built from the packages that own each mechanism, so the sandbox and the plugin run the same code:
89
+
90
+ - [@intentic/output-cleaners](../output-cleaners): the cleaners, `filterRun`, and `summarizeStats`.
91
+ - [@intentic/agent-context](../agent-context): the project map, the reader for field notes and the brief their writer gets, how a session draws its arm, what each turn is scored on, the comparison between the arms, and the transcript reader.
92
+ - [@intentic/fileq](../fileq): the CLI, bundled as `dist/fileq.mjs`, and the text of its skill.
93
+ - [@intentic/iq](../../_search/iq): the iq skill and the hint a session opens with. The build rewords the hint's two sandbox phrases for a plain install and fails if they change upstream.
94
+
95
+ The build writes `dist/` (one esbuild bundle per hook and command, so an install needs no `node_modules`) and `generated/` (the skills and the output style, from the texts those packages own). Both are ignored by git.
96
+
97
+ ### Key files
98
+
99
+ - [src/features.ts](src/features.ts): the switches, the one table behind both `userConfig` and what the hooks read.
100
+ - [src/session-start.ts](src/session-start.ts): what a session is told, which arm it drew, and the background work it starts.
101
+ - [src/post-bash.ts](src/post-bash.ts): the cleaning pass as a `PostToolUse` hook that returns `updatedToolOutput`.
102
+ - [src/stats.ts](src/stats.ts): the `/intentic:stats` report.
103
+ - [src/notes-evidence.ts](src/notes-evidence.ts): the session digest `/intentic:field-notes` is written from.
104
+ - [src/generated.ts](src/generated.ts): the skill and output-style files the build writes.
105
+ - [build.mjs](build.mjs): bundles, generated files, and the manifest version.
106
+
107
+ ### Commands
108
+
109
+ ```sh
110
+ pnpm --filter @intentic/claude-plugin build # dist/, generated/, and the version in plugin.json
111
+ pnpm --filter @intentic/claude-plugin test
112
+ pnpm --filter @intentic/claude-plugin validate # build, then `claude plugin validate`
113
+ claude --plugin-dir _sandbox/claude-plugin # a session with the checkout loaded, after a build
114
+ ```
115
+
116
+ `publishConfig.executableFiles` lists every file in `bin/`. pnpm packs the release tarball and clears the executable bit of anything not listed there, and `src/manifest.test.ts` fails when a script is missing from the list.
package/bin/fileq ADDED
@@ -0,0 +1,9 @@
1
+ #!/bin/sh
2
+ # fileq, bundled with the intentic plugin. A fileq installed on PATH ahead of this one wins (Claude Code puts a plugin's
3
+ # bin/ after the user's own PATH); this one answers otherwise. Its shadows are keyed to the project the SessionStart hook
4
+ # exported, so a `cd` inside the session does not scatter them.
5
+ if [ "${INTENTIC_FILEQ:-1}" = "0" ]; then
6
+ echo "fileq is switched off in the intentic plugin (/config). Tell the user rather than converting the file another way." >&2
7
+ exit 2
8
+ fi
9
+ WORKSPACE_ROOT="${WORKSPACE_ROOT:-${INTENTIC_PROJECT_DIR:-$PWD}}" exec node "$(dirname "$0")/../dist/fileq.mjs" "$@"
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+ # /intentic:field-notes's evidence: this project's Claude Code sessions, read back and counted.
3
+ exec node "$(dirname "$0")/../dist/notes-evidence.mjs" "$@"
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+ # /intentic:stats's report, from the plugin's ledgers and the session transcripts.
3
+ exec node "$(dirname "$0")/../dist/stats.mjs" "$@"
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+ # The reversible half of the intentic plugin's output cleaners: reads back what a trimmed command's footer said was cut.
3
+ exec node "$(dirname "$0")/../dist/retrieve-output.mjs" "$@"