@jentrix/cli 0.5.3
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/LICENSE +21 -0
- package/README.md +54 -0
- package/claude-plugin/.claude-plugin/marketplace.json +16 -0
- package/claude-plugin/.claude-plugin/plugin.json +5 -0
- package/claude-plugin/commands/jentrix-align.md +113 -0
- package/claude-plugin/commands/jentrix-checkpoint.md +56 -0
- package/claude-plugin/commands/jentrix-connect.md +21 -0
- package/claude-plugin/commands/jentrix-end.md +62 -0
- package/claude-plugin/commands/jentrix-plan.md +66 -0
- package/claude-plugin/commands/jentrix-status.md +8 -0
- package/claude-plugin/hooks/hooks.json +57 -0
- package/codex-plugin/.agents/plugins/marketplace.json +20 -0
- package/codex-plugin/plugins/jentrix/.codex-plugin/plugin.json +26 -0
- package/codex-plugin/plugins/jentrix/hooks/hooks.json +87 -0
- package/codex-plugin/plugins/jentrix/skills/jentrix-align/SKILL.md +26 -0
- package/codex-plugin/plugins/jentrix/skills/jentrix-checkpoint/SKILL.md +21 -0
- package/codex-plugin/plugins/jentrix/skills/jentrix-connect/SKILL.md +21 -0
- package/codex-plugin/plugins/jentrix/skills/jentrix-end/SKILL.md +23 -0
- package/codex-plugin/plugins/jentrix/skills/jentrix-plan/SKILL.md +21 -0
- package/codex-plugin/plugins/jentrix/skills/jentrix-status/SKILL.md +10 -0
- package/dist/main.js +28496 -0
- package/package.json +61 -0
- package/surface.json +20808 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Jentrix
|
|
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,54 @@
|
|
|
1
|
+
# @jentrix/cli
|
|
2
|
+
|
|
3
|
+
`jentrix` is a command-line client for the [Jentrix](https://tm.jentrix.ai) MCP
|
|
4
|
+
surface. It turns every MCP tool into a shell command —
|
|
5
|
+
`jentrix task list --board <id> --json | jq …` — so agents and humans can drive
|
|
6
|
+
boards from bash with no bespoke API.
|
|
7
|
+
|
|
8
|
+
It is a **thin client over the same MCP endpoint** the agent platform uses, so
|
|
9
|
+
it inherits scopes, workspace pinning, rate limits, idempotency,
|
|
10
|
+
`expectedUpdatedAt` freshness, and agent attribution by construction.
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install -g @jentrix/cli
|
|
16
|
+
# or: brew install jentrix-au/tap/jentrix
|
|
17
|
+
jentrix --version
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Requires Node ≥ 20. You can also run it without installing:
|
|
21
|
+
`npx @jentrix/cli --help` (`pnpm dlx @jentrix/cli --help`).
|
|
22
|
+
|
|
23
|
+
Install the bundled connected-session plugin with `jentrix plugin install`
|
|
24
|
+
(Claude Code default) or `jentrix plugin install codex`; both require the
|
|
25
|
+
matching `@jentrix/runner`, which the installer adds when missing.
|
|
26
|
+
|
|
27
|
+
For a local self-hosted workflow runner, install the matching
|
|
28
|
+
`@jentrix/runner` version, sign in to Claude Code and/or Codex yourself,
|
|
29
|
+
then run `jentrix runner doctor`,
|
|
30
|
+
`jentrix runner setup --runtime claude|codex|all`, and `jentrix runner up`.
|
|
31
|
+
Setup is preview-first; pass `--yes` only after reviewing the plan. Full details
|
|
32
|
+
and blocker recovery are in the [runner guide](https://tm.jentrix.ai/docs/cli#local-workflow-runner).
|
|
33
|
+
|
|
34
|
+
## Quickstart
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
export STACKS_TOKEN=tm_your_token # mint at /account/tokens
|
|
38
|
+
export STACKS_MCP_URL=https://tm.jentrix.ai/api/mcp # default; override for dev
|
|
39
|
+
jentrix whoami
|
|
40
|
+
jentrix task list --board <id> --json | jq .
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
`STACKS_TOKEN` / `STACKS_MCP_URL` are the same env vars the reference agents
|
|
44
|
+
use, so one `.env` serves both. Humans can also `jentrix login` (OAuth in the
|
|
45
|
+
browser); agents should prefer a scoped `STACKS_TOKEN`.
|
|
46
|
+
|
|
47
|
+
## Documentation
|
|
48
|
+
|
|
49
|
+
Full command reference, auth precedence, exit codes, and idempotency/conflict
|
|
50
|
+
recipes: **https://tm.jentrix.ai/docs/cli**
|
|
51
|
+
|
|
52
|
+
## License
|
|
53
|
+
|
|
54
|
+
MIT © Jentrix
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jentrix",
|
|
3
|
+
"description": "Jentrix connected-session plugin for Claude Code.",
|
|
4
|
+
"owner": {
|
|
5
|
+
"name": "Jentrix"
|
|
6
|
+
},
|
|
7
|
+
"plugins": [
|
|
8
|
+
{
|
|
9
|
+
"name": "jentrix",
|
|
10
|
+
"source": "./",
|
|
11
|
+
"description": "Bind a Claude Code session to a Jentrix project: /jentrix-connect, /jentrix-align, /jentrix-status, /jentrix-end over the Jentrix CLI, with trusted lifecycle hooks supplying the session id.",
|
|
12
|
+
"category": "productivity",
|
|
13
|
+
"keywords": ["jentrix", "sessions", "mcp", "agents", "jentrix"]
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jentrix",
|
|
3
|
+
"description": "Connect this Claude Code session to a Jentrix project: /jentrix-connect binds the current session (trusted lifecycle hooks supply the session id), /jentrix-align runs the MVP alignment wizard, /jentrix-status and /jentrix-end wrap the same session operations. Business logic lives in the Jentrix CLI — removing this plugin leaves `jentrix session attach` as the universal fallback.",
|
|
4
|
+
"version": "0.4.0"
|
|
5
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Align this session to a Jentrix work layer (workspace → project → task → owner) with a server-confirmed alignment snapshot
|
|
3
|
+
allowed-tools: Bash(jentrix align:*), Bash(jentrix session:*)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Run the Jentrix MVP alignment wizard for THIS session. The question set is
|
|
7
|
+
fixed — workspace, project, project name, work item, task title, owner,
|
|
8
|
+
confirmation — and every answer is a choice selection except `project_name`
|
|
9
|
+
and `task_title`, which are `kind: "freetext"`: the operator types them. You
|
|
10
|
+
present the questions; the operator decides. Do NOT invent extra questions,
|
|
11
|
+
and do NOT answer any question yourself.
|
|
12
|
+
|
|
13
|
+
1. Run `jentrix align --questions --json` with the Bash tool. It prints the
|
|
14
|
+
detection summary (repo, branch, provider), `currentAlignment` (when the
|
|
15
|
+
session is already aligned), `preconditions` (the doctor's checks, run up
|
|
16
|
+
front), and the fixed `questions` array.
|
|
17
|
+
2. If any precondition has status `"fail"` or `"warn"`, relay its `detail`
|
|
18
|
+
(and `fix`) to the operator BEFORE asking questions — a failure caught
|
|
19
|
+
here saves answering everything and then failing at submit.
|
|
20
|
+
3. If `currentAlignment` is non-null: show it to the operator and ask —
|
|
21
|
+
using the native choice UI (AskUserQuestion) — whether to keep it or
|
|
22
|
+
re-align. Keep → relay the current snapshot and stop.
|
|
23
|
+
4. For each question whose `status` is `"ask"`, present its `choices`
|
|
24
|
+
verbatim through the native choice UI (AskUserQuestion), preserving the
|
|
25
|
+
labels. If the question carries a `notice`, relay it to the operator
|
|
26
|
+
verbatim BEFORE the choices — it discloses a degraded list (e.g. repo
|
|
27
|
+
discovery unavailable, so the list is the whole workspace). The "Other…"
|
|
28
|
+
choice is the explicit free-text escape: when picked, let the operator
|
|
29
|
+
type the id/slug. A question whose `status` is `"skipped"` was resolved
|
|
30
|
+
by detection — tell the operator what was resolved (e.g. the workspace),
|
|
31
|
+
don't re-ask it.
|
|
32
|
+
5. After the project answer, re-run
|
|
33
|
+
`jentrix align --questions --json --project <chosen>` to load the
|
|
34
|
+
work-item and owner choices, then continue asking. If the operator picked
|
|
35
|
+
"Create a new project from this repo", the NEXT question is
|
|
36
|
+
`project_name` (already in the payload, `kind: "freetext"`): relay its
|
|
37
|
+
`prompt` verbatim and collect the name as free text FROM THE OPERATOR —
|
|
38
|
+
never propose name options, never fill it in yourself. Then re-run
|
|
39
|
+
`jentrix align --questions --json --new-project "<name>"` — the work-item
|
|
40
|
+
and owner questions do not depend on an existing project.
|
|
41
|
+
6. If the operator picked "New task", the NEXT question is `task_title`
|
|
42
|
+
(already in the payload, `kind: "freetext"`). Relay its `prompt` verbatim
|
|
43
|
+
and collect the title as free text FROM THE OPERATOR — never propose
|
|
44
|
+
title options, never fill it in yourself: it becomes the board-permanent
|
|
45
|
+
task title. Pass it as `--new-task "<title>"` on the next `--questions`
|
|
46
|
+
run and the final submit.
|
|
47
|
+
7. The confirmation question's `prompt` embeds `disclosures` — every side
|
|
48
|
+
effect submitting will perform (project/board/task creation, repo link,
|
|
49
|
+
session host, capture mode) plus any notices. Present that prompt
|
|
50
|
+
VERBATIM and IN FULL through the choice UI; never summarize, trim, or
|
|
51
|
+
reorder the disclosure lines. Confirm means the operator approved
|
|
52
|
+
exactly that list.
|
|
53
|
+
8. On Confirm, submit exactly once:
|
|
54
|
+
`jentrix align --json --yes (--project <id> | --new-project "<name>") (--task <taskId> | --new-task "<title>" | --session-level) [--owner <userId>]`
|
|
55
|
+
9. Echo the returned `alignment` snapshot VERBATIM to the operator — it is
|
|
56
|
+
the server-confirmed "we agree" record. Then continue the session's work.
|
|
57
|
+
10. Move the aligned task to the board's working column when you start work
|
|
58
|
+
on it. Read the real columns with `jentrix column list --board <boardId>`
|
|
59
|
+
and move with
|
|
60
|
+
`jentrix task move --task <taskId> --to-column-id <columnId>`. Use only
|
|
61
|
+
the columns the board actually has — never invent a status. `/jentrix-end`
|
|
62
|
+
moves it to a terminal column when the work is genuinely finished. A
|
|
63
|
+
board that never moves is a board that lies about what is in flight.
|
|
64
|
+
11. If align wrote `./.mcp.json`, relay that line too: MCP servers load at
|
|
65
|
+
session start, so the tools in THIS session still point wherever they
|
|
66
|
+
pointed before. Tell the operator to reconnect the MCP server (or start a
|
|
67
|
+
new session) before relying on `list_workspaces` / `create_task` / any
|
|
68
|
+
other Jentrix MCP tool — otherwise those calls land in a different
|
|
69
|
+
deployment, silently.
|
|
70
|
+
|
|
71
|
+
The written server carries **no credential and no `Authorization`
|
|
72
|
+
header**: it authenticates with the deployment over OAuth. So the next
|
|
73
|
+
session needs the operator to approve the consent screen once — in Claude
|
|
74
|
+
Code, `/mcp` → `jentrix` → Authenticate — and nothing needs exporting. Say
|
|
75
|
+
that plainly; a session that has not authorized simply has no
|
|
76
|
+
`mcp__jentrix__*` tools, which looks identical to the endpoint being
|
|
77
|
+
wrong. If align reports removing an existing `Authorization` header, relay
|
|
78
|
+
that too: it is the repair (a header switches OAuth discovery off), and
|
|
79
|
+
`jentrix align --pat` puts it back for a headless checkout.
|
|
80
|
+
|
|
81
|
+
Notes for you (the assistant):
|
|
82
|
+
|
|
83
|
+
- Do NOT invent a `--provider-session` value. The CLI reads the current
|
|
84
|
+
session id from the TRUSTED lifecycle-hook context this plugin records, and
|
|
85
|
+
a model-authored id is never acceptable.
|
|
86
|
+
There is now ONE defined repair path, and only one. The `--questions`
|
|
87
|
+
payload carries a `session` precondition and the confirmation card names
|
|
88
|
+
the provider session id and the transcript the host will watch. When that
|
|
89
|
+
precondition is `warn` — typically "a NEWER live Claude session <id> was
|
|
90
|
+
recorded in <dir>" — **surface it to the operator before asking anything
|
|
91
|
+
else**, together with the `fix` string the precondition carries. If the
|
|
92
|
+
operator confirms the named session is the one you are running in, re-run
|
|
93
|
+
with the id **exactly as the precondition printed it** (it came from the
|
|
94
|
+
trusted hook file, not from you) plus `--transcript-path` if the payload
|
|
95
|
+
names one. Never proceed silently past that warning: on 2026-08-11 an
|
|
96
|
+
alignment bound a 35-hour-dead session this way and lost the entire run's
|
|
97
|
+
token telemetry at exit 0.
|
|
98
|
+
- The confirmation card now names the binding (`bind provider session …`,
|
|
99
|
+
`the session host will watch …`) and any `./.mcp.json` write. Those are
|
|
100
|
+
side effects like any other — present them verbatim with the rest.
|
|
101
|
+
- TRACE capture stays OFF for aligned sessions by default (typed artifacts
|
|
102
|
+
only). Only pass `--capture` when the operator explicitly asks for full
|
|
103
|
+
transcript capture — and the confirmation disclosures will then say
|
|
104
|
+
capture is ON; make sure the operator saw that before confirming.
|
|
105
|
+
- When talking to the operator, use the choice LABELS, never internal ids
|
|
106
|
+
like `__create__` or `__new__` — those are flag values, not words a human
|
|
107
|
+
should be asked to type.
|
|
108
|
+
- Re-aligning to the SAME project converges on the existing session (safe to
|
|
109
|
+
repeat). Aligning this provider session to a DIFFERENT project requires
|
|
110
|
+
ending the current session first (`jentrix session end`) — a `preconditions`
|
|
111
|
+
entry warns about this up front, and the refusal names the same fix.
|
|
112
|
+
- If a command fails, show its error verbatim — it names the blocker and the
|
|
113
|
+
fallback. Do not improvise a workaround.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Write a distilled state-of-play for this session and push it as a typed Jentrix artifact
|
|
3
|
+
allowed-tools: Bash(jentrix push:*), Bash(jentrix session:*), Bash(jentrix task:*)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Write down what this session currently knows, and push it.
|
|
7
|
+
|
|
8
|
+
This is the half a hook provably cannot do. A hook is a shell command with a
|
|
9
|
+
small JSON payload on stdin and no model turn: it can move bytes and nothing
|
|
10
|
+
else. Distilling 400k tokens into the six facts that mattered requires a model
|
|
11
|
+
turn. That is this command.
|
|
12
|
+
|
|
13
|
+
It matters most on a **capture-off** session, which is the MVP default. There
|
|
14
|
+
the `PreCompact` hook records only that a compaction happened — it does not
|
|
15
|
+
preserve the transcript, because `capture: "off"` means the operator asked for
|
|
16
|
+
typed artifacts and no transcript. The bytes stay on the local machine and
|
|
17
|
+
nothing carries their meaning into Jentrix unless you write it. So on a
|
|
18
|
+
capture-off session this command is not a nicety; it is the only thing that
|
|
19
|
+
survives the compaction.
|
|
20
|
+
|
|
21
|
+
Run it at real boundaries: before a `/compact`, after a decision that changes
|
|
22
|
+
the plan, when a long investigation resolves, or before handing the work over.
|
|
23
|
+
|
|
24
|
+
## Steps
|
|
25
|
+
|
|
26
|
+
1. Write the checkpoint. Cover only what a fresh session would need and could
|
|
27
|
+
not re-derive cheaply:
|
|
28
|
+
- **Decisions taken** — and, for each, the reason, because the reason is
|
|
29
|
+
what gets lost first.
|
|
30
|
+
- **What actually changed** — files, records, ids. Concrete, not "made
|
|
31
|
+
progress".
|
|
32
|
+
- **Open questions and dead ends** — including what was tried and did not
|
|
33
|
+
work, which is the most expensive thing to rediscover.
|
|
34
|
+
- **Next step** — the single thing to do next.
|
|
35
|
+
2. Do not summarize the transcript. Do not restate the prompt. Do not include
|
|
36
|
+
anything you have not verified this session — a checkpoint that carries a
|
|
37
|
+
guess as a fact poisons every session that reads it.
|
|
38
|
+
3. Push it:
|
|
39
|
+
- `jentrix push learning --title "Checkpoint — <topic>"` when it is durable
|
|
40
|
+
knowledge worth carrying past this project;
|
|
41
|
+
- `jentrix push report --title "Checkpoint — <topic>"` when it is the
|
|
42
|
+
state of THIS work.
|
|
43
|
+
Content goes on stdin.
|
|
44
|
+
4. Relay the returned `artifactId` to the operator, and say which kind you
|
|
45
|
+
chose and why.
|
|
46
|
+
5. If the session's task status no longer matches reality, fix it now:
|
|
47
|
+
`jentrix column list --board <boardId>` then
|
|
48
|
+
`jentrix task move --task <id> --to-column-id <id>`. Only the columns the
|
|
49
|
+
board actually has.
|
|
50
|
+
|
|
51
|
+
Note for the operator: this records the distillation. On a session aligned
|
|
52
|
+
with `--capture`, the raw pre-compaction range is preserved separately and
|
|
53
|
+
automatically by the `PreCompact` hook, so the bytes survive even when this
|
|
54
|
+
command is never run — but only the bytes. On a capture-off session (the MVP
|
|
55
|
+
default) the hook records the boundary and nothing else, so this command is
|
|
56
|
+
the only thing that carries the work forward.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Connect this Claude Code session to a Jentrix project (session anchor + capture)
|
|
3
|
+
allowed-tools: Bash(jentrix session:*)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Run this exact command with the Bash tool and relay its output to the user:
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
jentrix session attach --provider claude --watch
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Notes for you (the assistant):
|
|
13
|
+
|
|
14
|
+
- Do NOT pass `--provider-session` yourself — the CLI reads the current
|
|
15
|
+
session id and transcript path from the TRUSTED lifecycle-hook context this
|
|
16
|
+
plugin's hooks recorded; model-authored session ids are never accepted.
|
|
17
|
+
- If the user named a project (e.g. `/jentrix-connect atlas`), append
|
|
18
|
+
`--project <that value>`.
|
|
19
|
+
- If the command fails, show its error verbatim — it names the fallback
|
|
20
|
+
(`jentrix session attach ...`) and the blocker code. Do not improvise a
|
|
21
|
+
workaround.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: End the connected Jentrix session (pushes the final artifacts, verifies capture, stores the RUN_SUMMARY)
|
|
3
|
+
allowed-tools: Bash(jentrix session:*), Bash(jentrix push:*)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
End the connected Jentrix session honestly. For an ALIGNED session (the MVP
|
|
7
|
+
pipeline), the typed artifacts ARE the record — push them before closing:
|
|
8
|
+
|
|
9
|
+
1. If this session is aligned (`jentrix session status` shows the alignment,
|
|
10
|
+
or `jentrix align --questions --json` reports `currentAlignment`):
|
|
11
|
+
- Push the final report: write a concise session report (what was done,
|
|
12
|
+
what changed, what's next) and run
|
|
13
|
+
`jentrix push report --title "<short title>"` with the content on stdin.
|
|
14
|
+
- Push any decisions made this session that were not already pushed:
|
|
15
|
+
`jentrix push decision …` (one per decision).
|
|
16
|
+
- Push any durable lessons: `jentrix push learning …`.
|
|
17
|
+
- If the session produced a diff/patch worth recording, push it:
|
|
18
|
+
`git diff | jentrix push diff --title "<what it changes>"`.
|
|
19
|
+
Ask the operator (native choice UI) before pushing anything they might
|
|
20
|
+
not want recorded; never invent content — summarize what actually
|
|
21
|
+
happened.
|
|
22
|
+
2. Move the aligned task to the board's **"In review"** column when the work
|
|
23
|
+
is finished — not to a terminal one. Acceptance is a human's to record
|
|
24
|
+
(Accept / Return on the task panel writes who decided, when, and on which
|
|
25
|
+
artifacts), and an agent grading its own work as Done is the cheapest habit
|
|
26
|
+
to break now and the most expensive later. Read the board's real columns
|
|
27
|
+
first — `jentrix column list --board <boardId>` — and move with
|
|
28
|
+
`jentrix task move --task <taskId> --to-column-id <columnId>`. Use the
|
|
29
|
+
column names the board has; never invent a status it does not carry, and
|
|
30
|
+
never move a card whose work is unfinished. If the board has no in-review
|
|
31
|
+
column, say so and leave the card where it is rather than moving it to a
|
|
32
|
+
terminal column the operator never got to judge. If it is unclear whether
|
|
33
|
+
the task is done, ask the operator through the native choice UI. Pushing a
|
|
34
|
+
`findings` or `report` artifact is not by itself proof the task is done.
|
|
35
|
+
3. **Offer a one-line project outcome.** A project that never changes state
|
|
36
|
+
cannot answer the only question a goal exists to answer — are we closer.
|
|
37
|
+
Ask the operator, through the native choice UI, for one sentence on what
|
|
38
|
+
this session moved, and record it on the project's goal statement: read the
|
|
39
|
+
project first — `jentrix tool get_project --args '{"projectId":"<id>"}'` —
|
|
40
|
+
then append a dated line to its `goalStatement` (never overwrite what is
|
|
41
|
+
there):
|
|
42
|
+
`jentrix tool update_project --args '{"projectId":"<id>","goalStatement":"<existing text>\n<YYYY-MM-DD>: <the operator's sentence>","expectedUpdatedAt":"<updatedAt from the read>"}'`.
|
|
43
|
+
Offer it; never write a sentence they did not say, and never block the
|
|
44
|
+
close on it — a declined nudge is a normal outcome.
|
|
45
|
+
4. Run `jentrix session end <session-id>` with the Bash tool (ask the user or
|
|
46
|
+
run `jentrix session status` first when the id is unknown) and relay the
|
|
47
|
+
output. Telemetry is recorded by the session host's attested path — never
|
|
48
|
+
report token numbers yourself.
|
|
49
|
+
5. **Relay the closing telemetry line verbatim.** `session end` prints a
|
|
50
|
+
`Telemetry:` line, and on stderr it may print `NO TOKEN TELEMETRY: …`.
|
|
51
|
+
Exit 0 does NOT mean telemetry was recorded — on 2026-08-11 a real session
|
|
52
|
+
closed at exit 0 having recorded none, and nothing said so. If the warning
|
|
53
|
+
appears, show it in full: it names the cause (usually the host was watching
|
|
54
|
+
another session's transcript) and the repair for the next session
|
|
55
|
+
(`jentrix align --provider-session <id> --transcript-path <file>`). Do not
|
|
56
|
+
restate the numbers as your own claim — quote the line.
|
|
57
|
+
6. The session is SEALED once ended: `jentrix push` refuses it
|
|
58
|
+
(`SESSION_NOT_ACTIVE`), by design. Anything learned at the close —
|
|
59
|
+
including the telemetry line above — belongs in the report you pushed in
|
|
60
|
+
step 1, or in the next session. Do not try to reopen it.
|
|
61
|
+
7. Ending the Jentrix session does NOT terminate this Claude Code session —
|
|
62
|
+
say so if the user seems to expect it.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Turn the opening prompt into a goal and a small set of Jentrix tasks, confirmed by the operator before anything is created
|
|
3
|
+
allowed-tools: Bash(jentrix task:*), Bash(jentrix column:*), Bash(jentrix board:*), Bash(jentrix session:*), Bash(jentrix push:*)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Decompose the work the operator just asked for into a goal and a short task
|
|
7
|
+
list, **confirm both before creating anything**, then create them.
|
|
8
|
+
|
|
9
|
+
`/jentrix-align` binds at most ONE task and is scrupulous that its title is the
|
|
10
|
+
operator's own words. Every task after that used to be agent-invented with no
|
|
11
|
+
confirmation step at all — the principle was right and its coverage was one
|
|
12
|
+
task deep. This command extends the same rule to the rest.
|
|
13
|
+
|
|
14
|
+
## Rules that are not negotiable
|
|
15
|
+
|
|
16
|
+
- **You never create a board-permanent title the operator has not approved.**
|
|
17
|
+
Propose; do not decide. The operator edits or replaces any title before it
|
|
18
|
+
is created.
|
|
19
|
+
- **Propose few tasks.** A task is a commitment, not a restatement of the
|
|
20
|
+
prompt. Two or three real units of work beat six that mirror your plan's
|
|
21
|
+
headings. If the prompt is one unit of work, say so and create nothing.
|
|
22
|
+
- **The prompt is provenance, the tasks are commitments.** Save the prompt
|
|
23
|
+
once, verbatim, as a `prompt` artifact; do not transcribe it into task
|
|
24
|
+
titles. The approved goal is its own `goal` artifact — the inputs are typed
|
|
25
|
+
records the RUN_SUMMARY's Intent cites, not prose folded into a plan.
|
|
26
|
+
- Read the board's real columns before placing anything. Never invent a
|
|
27
|
+
column or a status.
|
|
28
|
+
|
|
29
|
+
## Steps
|
|
30
|
+
|
|
31
|
+
1. Confirm the session is aligned: `jentrix session status`. If it is not, stop
|
|
32
|
+
and point the operator at `/jentrix-align` — there is no project or board to
|
|
33
|
+
plan into, and creating tasks somewhere else is worse than creating none.
|
|
34
|
+
2. Read the board's columns:
|
|
35
|
+
`jentrix column list --board <boardId> --json`. The first column is the
|
|
36
|
+
normal home for new work unless the operator says otherwise.
|
|
37
|
+
3. Draft, in your own analysis and NOT yet on the board:
|
|
38
|
+
- **one goal sentence** — what "done" means for this work, and how it will
|
|
39
|
+
be judged;
|
|
40
|
+
- **1–4 task titles**, each a unit of work someone could pick up alone.
|
|
41
|
+
4. Present them for confirmation through the native choice UI
|
|
42
|
+
(AskUserQuestion), one decision at a time, showing your proposed wording
|
|
43
|
+
verbatim. Note that the choice UI has no free-text-only mode — it requires
|
|
44
|
+
preset options — so "Other…" is the intended escape for the operator to
|
|
45
|
+
type their own wording, and you must say so. Their words win; when they
|
|
46
|
+
type a replacement, use it exactly, do not "clean it up".
|
|
47
|
+
5. Create only what was approved:
|
|
48
|
+
- `jentrix task create --column-id <columnId> --title "<approved title>" --description "<one-line scope>" --idempotency-key "<stable-key>" --json`
|
|
49
|
+
- record the goal on the aligned task (the card keeps its at-a-glance
|
|
50
|
+
line; the artifact below is the record):
|
|
51
|
+
`jentrix task update --task <alignedTaskId> --description "GOAL: <approved goal> …"`
|
|
52
|
+
- push the opening prompt as provenance, VERBATIM:
|
|
53
|
+
`jentrix push prompt --title "Opening prompt"` with the operator's prompt
|
|
54
|
+
on stdin — never a paraphrase;
|
|
55
|
+
- push the approved goal:
|
|
56
|
+
`jentrix push goal --title "Goal"` with the approved goal sentence on
|
|
57
|
+
stdin;
|
|
58
|
+
- when a PRD exists for this work, push it too:
|
|
59
|
+
`jentrix push prd --title "<PRD title>"` with the PRD body on stdin.
|
|
60
|
+
6. Report the created ids and keys back to the operator, and say which task
|
|
61
|
+
you are starting on. Move that one into the working column
|
|
62
|
+
(`jentrix task move --task <id> --to-column-id <id>`).
|
|
63
|
+
|
|
64
|
+
If the operator declines the plan, create nothing and say so plainly. An
|
|
65
|
+
un-decomposed prompt is a normal outcome; a board full of speculative tasks is
|
|
66
|
+
not.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Show the connected Jentrix session for this work (capture health included)
|
|
3
|
+
allowed-tools: Bash(jentrix session:*)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Run `jentrix session status` with the Bash tool (append the session id if the
|
|
7
|
+
user gave one) and relay the output verbatim, including any capture-pending
|
|
8
|
+
warning.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "M20.1 \u00a715.1 \u2014 lifecycle bridge: hooks append their structured stdin payload (session_id, transcript_path, cwd) to the local session context file via `stacks-runner session-hook`. argv carries only the directory and event name \u2014 never credentials or transcript content. PreCompact/PostCompact additionally run `jentrix session snapshot`, which FOLLOWS THE CAPTURE CONSENT: capture ON preserves the transcript range about to leave the model's context; capture OFF (the MVP default) records the compaction boundary and NO content, because `capture: \"off\"` was disclosed as typed artifacts only, no transcript. Preservation is never distillation \u2014 a hook has no model turn; /jentrix-checkpoint does that. Compaction-path hooks carry an explicit 10s timeout (STA-51): they run inside the operator's /compact, and a slow artifact push must delay it by seconds, not the 60s default.",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"SessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"hooks": [
|
|
7
|
+
{
|
|
8
|
+
"type": "command",
|
|
9
|
+
"command": "stacks-runner session-hook --dir \"$HOME/.config/stacks/claude-sessions\" --event SessionStart"
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"SessionEnd": [
|
|
15
|
+
{
|
|
16
|
+
"hooks": [
|
|
17
|
+
{
|
|
18
|
+
"type": "command",
|
|
19
|
+
"command": "stacks-runner session-hook --dir \"$HOME/.config/stacks/claude-sessions\" --event SessionEnd"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"PreCompact": [
|
|
25
|
+
{
|
|
26
|
+
"hooks": [
|
|
27
|
+
{
|
|
28
|
+
"type": "command",
|
|
29
|
+
"command": "stacks-runner session-hook --dir \"$HOME/.config/stacks/claude-sessions\" --event PreCompact",
|
|
30
|
+
"timeout": 10
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"type": "command",
|
|
34
|
+
"command": "jentrix session snapshot --event PreCompact",
|
|
35
|
+
"timeout": 10
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"PostCompact": [
|
|
41
|
+
{
|
|
42
|
+
"hooks": [
|
|
43
|
+
{
|
|
44
|
+
"type": "command",
|
|
45
|
+
"command": "stacks-runner session-hook --dir \"$HOME/.config/stacks/claude-sessions\" --event PostCompact",
|
|
46
|
+
"timeout": 10
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"type": "command",
|
|
50
|
+
"command": "jentrix session snapshot --event PostCompact",
|
|
51
|
+
"timeout": 10
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jentrix",
|
|
3
|
+
"interface": {
|
|
4
|
+
"displayName": "Jentrix"
|
|
5
|
+
},
|
|
6
|
+
"plugins": [
|
|
7
|
+
{
|
|
8
|
+
"name": "jentrix",
|
|
9
|
+
"source": {
|
|
10
|
+
"source": "local",
|
|
11
|
+
"path": "./plugins/jentrix"
|
|
12
|
+
},
|
|
13
|
+
"policy": {
|
|
14
|
+
"installation": "AVAILABLE",
|
|
15
|
+
"authentication": "ON_INSTALL"
|
|
16
|
+
},
|
|
17
|
+
"category": "Productivity"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jentrix",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Connect Codex tasks to Jentrix projects with trusted lifecycle hooks, alignment, checkpoints, and honest session capture.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Jentrix",
|
|
7
|
+
"url": "https://github.com/jentrix-au"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://stacks-mvp.vercel.app/docs",
|
|
10
|
+
"repository": "https://github.com/jentrix-au/task-manager",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": ["jentrix", "sessions", "task-management", "agents"],
|
|
13
|
+
"skills": "./skills/",
|
|
14
|
+
"interface": {
|
|
15
|
+
"displayName": "Jentrix",
|
|
16
|
+
"shortDescription": "Connect this Codex task to Jentrix.",
|
|
17
|
+
"longDescription": "Align a Codex task to a Jentrix project and task, preserve typed checkpoints, and capture supported lifecycle evidence through trusted hooks.",
|
|
18
|
+
"developerName": "Jentrix",
|
|
19
|
+
"category": "Productivity",
|
|
20
|
+
"capabilities": ["Interactive", "Write"],
|
|
21
|
+
"defaultPrompt": [
|
|
22
|
+
"Connect this Codex task to my Jentrix project.",
|
|
23
|
+
"Align this work and create a confirmed task plan."
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Trusted Codex lifecycle bridge. Hook payloads are appended locally; compact hooks also ask the Jentrix CLI to preserve the approved capture boundary.",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"SessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"hooks": [
|
|
7
|
+
{
|
|
8
|
+
"type": "command",
|
|
9
|
+
"command": "stacks-runner session-hook --dir \"$HOME/.config/stacks/codex-sessions\" --event SessionStart"
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"UserPromptSubmit": [
|
|
15
|
+
{
|
|
16
|
+
"hooks": [
|
|
17
|
+
{
|
|
18
|
+
"type": "command",
|
|
19
|
+
"command": "stacks-runner session-hook --dir \"$HOME/.config/stacks/codex-sessions\" --event UserPromptSubmit"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"PostToolUse": [
|
|
25
|
+
{
|
|
26
|
+
"hooks": [
|
|
27
|
+
{
|
|
28
|
+
"type": "command",
|
|
29
|
+
"command": "stacks-runner session-hook --dir \"$HOME/.config/stacks/codex-sessions\" --event PostToolUse"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"Stop": [
|
|
35
|
+
{
|
|
36
|
+
"hooks": [
|
|
37
|
+
{
|
|
38
|
+
"type": "command",
|
|
39
|
+
"command": "stacks-runner session-hook --dir \"$HOME/.config/stacks/codex-sessions\" --event Stop"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"PreCompact": [
|
|
45
|
+
{
|
|
46
|
+
"hooks": [
|
|
47
|
+
{
|
|
48
|
+
"type": "command",
|
|
49
|
+
"command": "stacks-runner session-hook --dir \"$HOME/.config/stacks/codex-sessions\" --event PreCompact",
|
|
50
|
+
"timeout": 10
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"type": "command",
|
|
54
|
+
"command": "jentrix session snapshot --event PreCompact",
|
|
55
|
+
"timeout": 10
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"PostCompact": [
|
|
61
|
+
{
|
|
62
|
+
"hooks": [
|
|
63
|
+
{
|
|
64
|
+
"type": "command",
|
|
65
|
+
"command": "stacks-runner session-hook --dir \"$HOME/.config/stacks/codex-sessions\" --event PostCompact",
|
|
66
|
+
"timeout": 10
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"type": "command",
|
|
70
|
+
"command": "jentrix session snapshot --event PostCompact",
|
|
71
|
+
"timeout": 10
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
"SessionEnd": [
|
|
77
|
+
{
|
|
78
|
+
"hooks": [
|
|
79
|
+
{
|
|
80
|
+
"type": "command",
|
|
81
|
+
"command": "stacks-runner session-hook --dir \"$HOME/.config/stacks/codex-sessions\" --event SessionEnd"
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-align
|
|
3
|
+
description: Align the current Codex task to a Jentrix workspace, project, work item, and owner with an operator-confirmed server snapshot.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Align this Codex task
|
|
7
|
+
|
|
8
|
+
1. Run `jentrix align --provider codex --questions --json`.
|
|
9
|
+
2. Relay every failed or warning precondition before asking anything.
|
|
10
|
+
3. If `currentAlignment` exists, ask whether to keep it or re-align. Keep means
|
|
11
|
+
show the current snapshot and stop.
|
|
12
|
+
4. Present each `status:"ask"` question and its choices verbatim using Codex's
|
|
13
|
+
structured input UI when available, otherwise ask in chat. Never answer for the
|
|
14
|
+
operator. Preserve notices and the `Other…` free-text escape.
|
|
15
|
+
5. Re-run `--questions --json` after project selection. Collect `project_name` and
|
|
16
|
+
`task_title` as free text from the operator; never propose permanent names.
|
|
17
|
+
6. Present the confirmation prompt and every disclosure verbatim.
|
|
18
|
+
7. On confirmation, submit exactly once with `jentrix align --provider codex --json
|
|
19
|
+
--yes` plus the confirmed project, task/session-level, owner, agent label, and
|
|
20
|
+
capture flags.
|
|
21
|
+
8. Echo the returned server alignment snapshot verbatim. If `.mcp.json` changed,
|
|
22
|
+
explain that the current task must reconnect MCP or restart before using it.
|
|
23
|
+
|
|
24
|
+
TRACE capture is off by default. Pass `--capture` only when the operator explicitly
|
|
25
|
+
approved full hook-derived trace capture. Same-project re-alignment converges;
|
|
26
|
+
different-project re-alignment must be refused until `jentrix session end`.
|