@cueloop/pi 0.1.0-alpha.87 → 0.1.0-alpha.89

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
@@ -5,3 +5,7 @@ pi install npm:@cueloop/pi
5
5
  ```
6
6
 
7
7
  The package opens cueloop Threads in the configured terminal surface and delivers Messages back into the active pi conversation.
8
+
9
+ Use `/cueloop:plan`, `/cueloop:diff`, `/cueloop:review`, `/cueloop:reply`, `/cueloop:prototype`, or `/cueloop:refine` to start a workflow. Each command loads the corresponding shared cueloop skill. The review skill uses the CLI to attach line anchored findings; the other workflow skills use `open_thread` when available.
10
+
11
+ Pi reports available package updates on startup. If cueloop reports a version mismatch, run `cueloop restart`, then update the older component if needed: `cueloop update` or `pi update npm:@cueloop/pi`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cueloop/pi",
3
- "version": "0.1.0-alpha.87",
3
+ "version": "0.1.0-alpha.89",
4
4
  "description": "cueloop Thread integration for pi",
5
5
  "keywords": [
6
6
  "pi-package"
@@ -17,7 +17,8 @@
17
17
  },
18
18
  "files": [
19
19
  "extension.ts",
20
- "README.md"
20
+ "README.md",
21
+ "skills/"
21
22
  ],
22
23
  "type": "module",
23
24
  "exports": {
@@ -26,8 +27,11 @@
26
27
  "publishConfig": {
27
28
  "access": "public"
28
29
  },
30
+ "scripts": {
31
+ "prepack": "node prepare-skills.mjs"
32
+ },
29
33
  "dependencies": {
30
- "@cueloop/adapters": "0.1.0-alpha.87"
34
+ "@cueloop/adapters": "0.1.0-alpha.89"
31
35
  },
32
36
  "peerDependencies": {
33
37
  "@earendil-works/pi-coding-agent": "^0.86.0"
@@ -38,6 +42,9 @@
38
42
  "pi": {
39
43
  "extensions": [
40
44
  "./extension.ts"
45
+ ],
46
+ "skills": [
47
+ "./skills"
41
48
  ]
42
49
  }
43
50
  }
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: cueloop-annotate
3
+ description: Read a cueloop plan or diff and comment on it as a review-side agent, without leaving the review. Use when you are helping a collaborator poke holes in a plan under review - you annotate on their behalf; you never rewrite the plan or cast the message.
4
+ ---
5
+
6
+ # cueloop annotate
7
+
8
+ The agent side of the review write-surface. You read the artifact under review
9
+ and attach span-anchored comments through the same annotation API a human uses.
10
+ Your comments are attributed to the collaborator who launched you and show up in
11
+ their rail exactly as if they had typed them.
12
+
13
+ ## Rights boundary
14
+
15
+ You may **read** and **comment** only. You may not rewrite the plan
16
+ (`submit-revision` is the driving agent's alone), send the Message (`resolve` is
17
+ the human's alone), or cut / edit / share (owner-only). The plan stays
18
+ single-writer: you annotate, the human curates, the message carries it back.
19
+
20
+ Pass `--role agent` on every command below. The daemon then caps this connection
21
+ to read + annotate and rejects any escalation - the boundary is enforced, not
22
+ just documented.
23
+
24
+ ## Steps
25
+
26
+ 1. Read the artifact and its existing annotations:
27
+
28
+ ```bash
29
+ cueloop session get <id> --role agent
30
+ ```
31
+
32
+ 2. See the shared quick-action vocabulary for this session (the same presets the
33
+ human picks); `--session` reads the reviewed session's own repo:
34
+
35
+ ```bash
36
+ cueloop actions list --session <id> --role agent
37
+ ```
38
+
39
+ 3. Comment on a span. **Anchor contract: `--quote` is the exact text from the
40
+ artifact you are commenting on** - copy it verbatim, not a paraphrase or a
41
+ line number. Add `--prefix`/`--suffix` (a few surrounding characters) when the
42
+ quote is not unique. Attribute every comment to the acting collaborator with
43
+ `--author` (and `--author-name` on the first comment so the rail shows a name):
44
+
45
+ ```bash
46
+ cueloop session annotate <id> --role agent \
47
+ --author <collaborator-id> --author-name "<display name>" \
48
+ --quote "<exact span from the plan>" \
49
+ --body "<your comment>"
50
+ ```
51
+
52
+ To use a quick action instead of a free-form body, reference it by index or
53
+ name from `actions list`:
54
+
55
+ ```bash
56
+ cueloop session annotate <id> --role agent \
57
+ --author <collaborator-id> --quote "<exact span>" --action "Out of scope"
58
+ ```
59
+
60
+ 4. Type a comment with `--kind` for a typed annotation (`security`, `perf`, a
61
+ tool id); the default kind is `comment`.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Matt Pocock
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.
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: cueloop-code-review
3
+ description: "Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes: Standards (does the code follow this repo's documented coding standards?) and Spec (does the code match what the originating issue/spec asked for?). Runs both reviews in parallel sub-agents and reports them side by side. Use when the user wants to review a branch, a PR, work-in-progress changes, or asks to \"review since X\"."
4
+ ---
5
+
6
+ Two-axis review of the diff between `HEAD` and a fixed point the user supplies:
7
+
8
+ - **Standards**: does the code conform to this repo's documented coding standards?
9
+ - **Spec**: does the code faithfully implement the originating issue / spec?
10
+
11
+ Both axes run as **parallel sub-agents** so they don't pollute each other's context, then this skill aggregates their findings.
12
+
13
+ The issue tracker should have been provided to you. If `docs/agents/issue-tracker.md` is missing, tell the user to run `/setup-matt-pocock-skills`.
14
+
15
+ ## Process
16
+
17
+ ### 1. Pin the fixed point
18
+
19
+ Whatever the user said is the fixed point (a commit SHA, branch name, tag, `main`, `HEAD~5`, etc.). If they didn't specify one, ask for it.
20
+
21
+ Capture the diff command once: `git diff <fixed-point>...HEAD` (three-dot, so the comparison is against the merge-base). Also note the list of commits via `git log <fixed-point>..HEAD --oneline`.
22
+
23
+ Before going further, confirm the fixed point resolves (`git rev-parse <fixed-point>`) and the diff is non-empty. A bad ref or empty diff should fail here, not inside two parallel sub-agents.
24
+
25
+ ### 2. Identify the spec source
26
+
27
+ Look for the originating spec, in this order:
28
+
29
+ 1. Issue references in the commit messages (`#123`, `Closes #45`, GitLab `!67`, etc.), fetched via the workflow in `docs/agents/issue-tracker.md`.
30
+ 2. A path the user passed as an argument.
31
+ 3. A spec file under `docs/`, `specs/`, or `.scratch/` matching the branch name or feature.
32
+ 4. If nothing is found, ask the user where the spec is. If they say there isn't one, the **Spec** sub-agent will skip and report "no spec available".
33
+
34
+ ### 3. Identify the standards sources
35
+
36
+ Anything in the repo that documents how code should be written, such as `CODING_STANDARDS.md` or `CONTRIBUTING.md`.
37
+
38
+ On top of whatever the repo documents, the Standards axis always carries the **smell baseline** below: a fixed set of Fowler code smells (_Refactoring_, ch.3) that applies even when a repo documents nothing. Two rules bind it:
39
+
40
+ - **The repo overrides.** A documented repo standard always wins; where it endorses something the baseline would flag, suppress the smell.
41
+ - **Always a judgement call.** Each smell is a labelled heuristic ("possible Feature Envy"), never a hard violation. Like any standard here, skip anything tooling already enforces.
42
+
43
+ Each smell reads *what it is* → *how to fix*; match it against the diff:
44
+
45
+ - **Mysterious Name**: a function, variable, or type whose name doesn't reveal what it does or holds. → rename it; if no honest name comes, the design's murky.
46
+ - **Duplicated Code**: the same logic shape appears in more than one hunk or file in the change. → extract the shared shape, call it from both.
47
+ - **Feature Envy**: a method that reaches into another object's data more than its own. → move the method onto the data it envies.
48
+ - **Data Clumps**: the same few fields or params keep travelling together (a type wanting to be born). → bundle them into one type, pass that.
49
+ - **Primitive Obsession**: a primitive or string standing in for a domain concept that deserves its own type. → give the concept its own small type.
50
+ - **Repeated Switches**: the same `switch`/`if`-cascade on the same type recurs across the change. → replace with polymorphism, or one map both sites share.
51
+ - **Shotgun Surgery**: one logical change forces scattered edits across many files in the diff. → gather what changes together into one module.
52
+ - **Divergent Change**: one file or module is edited for several unrelated reasons. → split so each module changes for one reason.
53
+ - **Speculative Generality**: abstraction, parameters, or hooks added for needs the spec doesn't have. → delete it; inline back until a real need shows.
54
+ - **Message Chains**: long `a.b().c().d()` navigation the caller shouldn't depend on. → hide the walk behind one method on the first object.
55
+ - **Middle Man**: a class or function that mostly just delegates onward. → cut it, call the real target direct.
56
+ - **Refused Bequest**: a subclass or implementer that ignores or overrides most of what it inherits. → drop the inheritance, use composition.
57
+
58
+ ### 4. Spawn both sub-agents in parallel
59
+
60
+ **Standards sub-agent prompt** should include:
61
+
62
+ - The full diff command and commit list.
63
+ - The list of standards-source files you found in step 3, **plus the smell baseline from step 3** pasted in full (the sub-agent has no other access to it).
64
+ - The brief: "Report, per file/hunk where relevant, (a) every place the diff violates a documented standard: cite the standard (file + the rule); and (b) any baseline smell you spot: name it and quote the hunk. Distinguish hard violations from judgement calls: documented-standard breaches can be hard, but baseline smells are always judgement calls, and a documented repo standard overrides the baseline. Skip anything tooling enforces. Under 400 words."
65
+
66
+ **Spec sub-agent prompt** should include:
67
+
68
+ - The diff command and commit list.
69
+ - The path or fetched contents of the spec.
70
+ - The brief: "Report: (a) requirements the spec asked for that are missing or partial; (b) behaviour in the diff that wasn't asked for (scope creep); (c) requirements that look implemented but where the implementation looks wrong. Quote the spec line for each finding. Under 400 words."
71
+
72
+ If the spec is missing, skip the Spec sub-agent and note this in the final report.
73
+
74
+ ### 5. Aggregate
75
+
76
+ Present the two reports under `## Standards` and `## Spec` headings, verbatim or lightly cleaned. Do **not** merge or rerank findings, because the two axes are deliberately separate (see _Why two axes_).
77
+
78
+ End with a one-line summary: total findings per axis, and the worst issue _within each axis_ (if any). Don't pick a single winner across axes: that's the reranking the separation exists to prevent.
79
+
80
+ ## Why two axes
81
+
82
+ A change can pass one axis and fail the other:
83
+
84
+ - Code that follows every standard but implements the wrong thing → **Standards pass, Spec fail.**
85
+ - Code that does exactly what the issue asked but breaks the project's conventions → **Spec pass, Standards fail.**
86
+
87
+ Reporting them separately stops one axis from masking the other.
@@ -0,0 +1,7 @@
1
+ Vendored verbatim from `mattpocock/skills`:
2
+
3
+ - Source: https://github.com/mattpocock/skills/tree/c55ee46073ed923f86ce59a5eb3b6d895095d1b7/skills/engineering/code-review
4
+ - Commit: `c55ee46073ed923f86ce59a5eb3b6d895095d1b7`
5
+ - Imported: 2026-09-24
6
+
7
+ The skill is distributed under the adjacent MIT license.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: cueloop-diff
3
+ description: Submit working-tree changes to the cueloop changes panel. Use when the user asks to review your code changes or before committing substantial agent-authored changes.
4
+ ---
5
+
6
+ # cueloop diff
7
+
8
+ Capture the working-tree patch, including untracked files, through the
9
+ harness's cueloop `diff` workflow when available. Submit full changed-file
10
+ contents so hunk curation stays applyable. Otherwise, write a complete patch
11
+ to a file and run `cueloop session create --type diff --content-file <patch>`.
12
+ The CLI path has no file snapshots, so hunk curation is unavailable. Give the
13
+ user the returned Thread ID and collect the Message with
14
+ `cueloop session wait <id> --timeout-ms 60000`, repeating while pending.
15
+
16
+ File notes may explain intent in plain prose; they are context, not reviewer
17
+ feedback. If changes are requested, fix each cited line and submit an updated
18
+ diff for review with `cueloop session submit-revision <id> --content-file <patch>`
19
+ on the CLI path.
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: cueloop-plan
3
+ description: Submit a Markdown plan to a cueloop Thread for human review. Use when the user asks to review a plan or wants a reviewed go-ahead before implementation.
4
+ ---
5
+
6
+ # cueloop plan
7
+
8
+ When the harness exposes cueloop's `plan` workflow, submit the complete Markdown
9
+ plan through it. Otherwise, write the plan to a file and use the installed CLI:
10
+
11
+ ```bash
12
+ cueloop session create --type plan --content-file <plan.md>
13
+ ```
14
+
15
+ Read the returned Thread ID and give it to the user. On the CLI path, collect
16
+ the Message with `cueloop session wait <id> --timeout-ms 60000`; repeat while
17
+ the response says `pending`. This path does not inject a native harness message.
18
+
19
+ Keep the plan's exact wording: annotations attach to its text. When changes are
20
+ requested, apply any edited text and every annotation, then revise the same
21
+ Thread with `cueloop session submit-revision <id> --content-file <plan.md>` on
22
+ the CLI path. Proceed with implementation only after approval.
@@ -0,0 +1,100 @@
1
+ ---
2
+ name: cueloop-prototype
3
+ description: >-
4
+ Submit a component design proposal to cueloop for human review without blocking.
5
+ Use when the user asks to review a UI component's shape before implementing it:
6
+ its prop/type API, composition, and callstack.
7
+ ---
8
+
9
+ # cueloop prototype review
10
+
11
+ Review a UI component on paper before you build it: its interface, how it is
12
+ assembled from primitives you already have, and its callstack. You write a single
13
+ Markdown design doc; the reviewer reads it in the terminal and annotates the exact
14
+ lines. The review does not block: you submit, keep working with the user, and
15
+ cueloop delivers the Message when the reviewer is done.
16
+
17
+ Write the doc as plain Markdown with exactly these three sections, in order. Keep
18
+ everything line-addressable text, since the reviewer anchors comments to lines and
19
+ words. Prefer fenced code blocks and indented trees over prose. Do not use Markdown
20
+ tables; the reviewer renders one as a single block, so write comparisons as a list.
21
+
22
+ ## 1. API
23
+
24
+ The prop/type surface, as a fenced `ts` block: the real interface a caller sees.
25
+ Extract it from the component's types, or write the proposed one. Include every
26
+ prop, its type, whether it is optional, and a one-line intent where it is not
27
+ obvious.
28
+
29
+ ## 2. Composition
30
+
31
+ How the component is assembled, as a **JSX anatomy tree** in a fenced `tsx` block,
32
+ following the react-aria / Radix "Anatomy" convention. Write the real element tree,
33
+ nesting by indentation, and put a trailing `{/* ... */}` comment on a node to name
34
+ the primitive it reuses (or mark it a slot). It reads as code, so the reviewer
35
+ annotates actual JSX lines. When there is more than one way to build it, list the
36
+ options and your recommendation as a list, not a table:
37
+
38
+ ```tsx
39
+ <ComboBox> {/* generic over T */}
40
+ <Label />
41
+ <Group>
42
+ <Input /> {/* reuse: Input */}
43
+ <Button /> {/* toggle the popover */}
44
+ </Group>
45
+ <Popover> {/* reuse: Popover, focus-trap + esc */}
46
+ <ListBox>
47
+ <ListBoxItem /> {/* active / selected */}
48
+ </ListBox>
49
+ </Popover>
50
+ </ComboBox>
51
+ ```
52
+
53
+ Options considered:
54
+ - **A, reuse the shared Popover**: focus-trap and escape-to-close come for free; least new code.
55
+ - **B, a bespoke popover**: full control of placement, but it re-solves focus management.
56
+
57
+ Recommendation: A. Reuse the Popover and keep the ComboBox to input + listbox wiring.
58
+
59
+ ## 3. Callstack
60
+
61
+ The call and data flow through the component, as an indented tree in a fenced block:
62
+ entry point at the top, each call nested one level deeper, down to the store or
63
+ output. Designing this flow up front is the point of the review. It shows how a
64
+ user action threads through the layers before any code exists.
65
+
66
+ ```
67
+ main.ts
68
+ Command.runWith(rootCommand)
69
+ cli.ts alias command handler
70
+ parseLinkSlug("gh")
71
+ parseDestinationUrl("https://example.com/acme")
72
+ LinkManagerClient.alias({ slug, destination })
73
+ HttpApiClient client.operator.createAlias({ params, payload })
74
+ PUT {baseUrl}/api/links/gh
75
+ Access middleware
76
+ ProvideOperatorIdentity middleware
77
+ OperatorHandlers.createAlias
78
+ LinkCatalog.getLink(slug)
79
+ LinkCatalog.createAlias({ slug, destination, operator })
80
+ LinkCatalogStore.insertAlias
81
+ RedirectIndexService.putDestination
82
+ CliOutput.link(link)
83
+ ```
84
+
85
+ ## Submit and respond
86
+
87
+ Write the doc to one Markdown file and submit it through the harness's cueloop
88
+ `prototype` workflow when available. Otherwise, run
89
+ `cueloop session create --type prototype --content-file <design.md>` and give
90
+ the user the returned Thread ID. On the CLI path, collect the Message with
91
+ `cueloop session wait <id> --timeout-ms 60000`, repeating while pending.
92
+
93
+ On approval, proceed with the component. When changes are requested, apply
94
+ every edited line and annotation to the design doc, then revise the same
95
+ Thread with `cueloop session submit-revision <id> --content-file <design.md>`
96
+ on the CLI path.
97
+
98
+ Reviewing a rendered pixel mockup instead of a design doc is an opt-in
99
+ experimental mode, set by the `[experimental]` config section. It needs a
100
+ graphics-capable terminal and an installed browser.
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: cueloop-refine
3
+ description: Analyze past cueloop Threads and propose recurring feedback writebacks through a plan Thread. Use when the user asks to learn from past reviews or run refine.
4
+ ---
5
+
6
+ # cueloop refine
7
+
8
+ Use the harness's cueloop `refine` workflow when available. Otherwise, run
9
+ `cueloop refine` and read the report path in its JSON output to analyze the
10
+ stored Thread corpus.
11
+ Read its report and group annotations into named patterns. A pattern needs at
12
+ least three members; keep one-offs in a long-tail list. Rank patterns by how
13
+ often they occur on changes-requested Messages.
14
+
15
+ Draft one proposed writeback per pattern. Include its evidence, target file,
16
+ and exact text. Route repo-specific lessons to that repo's `AGENTS.md` or a
17
+ project skill; route global preferences to the appropriate global instruction
18
+ or memory. Submit the proposals as a plan Thread through the same workflow,
19
+ or write them to a file and run
20
+ `cueloop session create --type plan --content-file <proposals.md>`. On the CLI
21
+ path, collect the Message with `cueloop session wait <id> --timeout-ms 60000`.
22
+
23
+ Do not edit the targets before approval. Corpus analysis does not mutate source
24
+ Threads; only approved writebacks change instructions or memory.
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: cueloop-reply
3
+ description: Submit the previous reply to a cueloop Thread for human review. Use when the user asks to annotate or revise your last message.
4
+ ---
5
+
6
+ # cueloop reply
7
+
8
+ Submit your previous reply verbatim as Markdown through the harness's cueloop
9
+ `reply` workflow when available. Otherwise, write it to a file and run
10
+ `cueloop session create --type reply --content-file <reply.md>`. Give the user
11
+ the returned Thread ID. On the CLI path, collect the Message with
12
+ `cueloop session wait <id> --timeout-ms 60000`, repeating while pending.
13
+
14
+ If changes are requested, apply the edited wording and each annotation before
15
+ resubmitting the reply to the same Thread. On the CLI path, use
16
+ `cueloop session submit-revision <id> --content-file <reply.md>`. Use `plan` for a proposal
17
+ that has not yet been presented as a reply.
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: cueloop-review
3
+ description: Review a GitHub pull request in cueloop, record agent findings on the diff, and refine them with the user before any explicit GitHub post.
4
+ ---
5
+
6
+ # cueloop review
7
+
8
+ Use this workflow for `/cueloop:review <pull-request>`.
9
+
10
+ 1. Run `cueloop review-config`. Read `skill` and `workspace`.
11
+ 2. Read the pull request with `gh pr view <pull-request> --json number,title,body,url,baseRefOid,headRefOid`. Also read its existing review comments. Give them to the configured skill as deduplication context, but do not copy them into the cueloop Thread.
12
+ 3. Work at the exact PR head:
13
+ - `worktree`: create or reuse `~/.cueloop/worktrees/<owner>-<repo>/pr-<number>-<short-sha>`, fetch the head, and add it as a detached git worktree.
14
+ - `current`: compare `git rev-parse HEAD` with `headRefOid`. Stop if they differ.
15
+ 4. Write a short review brief with the PR title, a `## TL;DR` of two to four bullets, and the original body under `## PR description`.
16
+ 5. Run the configured review skill in that workspace. Give it the PR base SHA as its fixed point, the PR body as its spec source, and the existing review comments as deduplication context. For the built-in `code-review` skill, this context is complete: use `gh issue view` for issue references and do not require repository-specific issue-tracker setup. The built-in skill is vendored verbatim from [mattpocock/skills](https://github.com/mattpocock/skills/tree/c55ee46073ed923f86ce59a5eb3b6d895095d1b7/skills/engineering/code-review).
17
+ 6. Create the Thread from that workspace:
18
+ `cueloop review <pull-request> --head-sha <headRefOid> --no-tui --brief-file <brief-file>`
19
+ 7. Record each actionable finding with `cueloop review-comment <thread-id>`. Give it:
20
+ - `--path`, `--line`, and `--side LEFT|RIGHT`
21
+ - `--severity p0|p1|p2`
22
+ - `--title`
23
+ - `--body` or `--body-file`
24
+ - optional `--suggestion-file` and `--prompt-file`
25
+ 8. Open the Thread with `cueloop review-open <thread-id>`. Keep this turn open and run `cueloop session wait <thread-id> --timeout-ms 60000`. After each wait, run `cueloop session get <thread-id>` and inspect `history.entries` for Message IDs you have not handled. Act on each new Message, including a `comment` Message that leaves the Thread pending. Repeat the wait while the status is pending. Use replies to refine findings in the same Thread. Do not end the turn while waiting for a CLI-created review: it has no harness binding to wake the agent.
26
+
27
+ The Thread Message is an instruction to the agent. If it directs you to post findings, post the selected unresolved agent findings. If it directs you to approve or request changes, use that event. Do not ask for the same authorization again in the agent conversation. Resolving the Thread does not itself post to GitHub; the agent must run:
28
+
29
+ `cueloop review-post <thread-id> --comments C1,C3 --event comment|approve|request-changes [--body-file <draft>]`
30
+
31
+ Omit `--comments` to post every unresolved agent finding. Human comments and replies stay local. Default to `--event comment` unless the Message asks to approve or request changes. The Message's text is private instructions for the agent, not the GitHub review body. Draft a separate, author-facing review body with `--body-file` only when needed; approval with inline findings can leave it empty.
32
+
33
+ If import or posting fails, run `gh auth status`.