nc://advisor

v0.1.0Pinned
ThomSharktools/nodecode-advisor: A second model reviews each turn's work and posts tagged advice, holding concerns until they recur. - a rewrite of ljubomirj/hermes-advisor-plugin (MIT), credited to ljubomirjf1278a6· 9 Nov1 commit
test1 filecell.lisp10.2 KBreview.lisp15.1 KB

nodecode-advisor

Advisor: a second model reviews each turn's work and posts tagged advice. A Nodecode rewrite of ljubomirj/hermes-advisor-plugin by ljubomirj.

The primary agent does the work; the advisor checks it. After a completed turn the transcript goes to a second model, which answers in one of three tags:

Tag Meaning Delivery
[NIT] Non-urgent cleanup, a missed opportunity Posted at once
[CONCERN] Wrong direction, fragile approach, missing constraint Held until a later review raises it again
[BLOCKER] Fundamentally unsound path Held until a later review raises it again

Holding is the point: a one-off remark never interrupts the work. A concern is posted only when a second review reaches for the same point again, and a held note the next review is silent about is dropped as resolved. A review with nothing to say says nothing to flag, and a review that leaked machine output (a tool call, a bare JSON blob) is dropped rather than delivered.

The advisor reviews; it never acts. It has no tools, edits no files and changes no session state. It reads the turn's transcript and the project's WATCHDOG.md, if there is one, and answers prose.

Get it

Tell the agent "add the advisor cell", or run:

nodecode add nc://advisor

Set it up

The section is off until auto says otherwise; one review is one model call, so the switch is the operator's.

{
  "advisor": {
    "auto": true,          // review every completed turn
    "model": "",           // empty: the auxiliary model (/models picks it)
    "provider": "",        // with model, a reviewer on a provider of its own
    "clip": 500,           // characters kept per tool call or result
    "max_note_chars": 1200,
    "watchdog": ""         // a file of project review guidance
  }
}

No key of its own: the review is one side call on the model Nodecode already has configured, so it is billed to that provider and nothing else leaves the machine it would not otherwise. Set model and provider to send the review to a second model — the point of the cell is a different angle, and a different model is the cheapest way to get one. (In a session, /models picks the auxiliary target for every side call; advisor.model overrides it for this cell alone.)

Use it

/advisor                       on or off, the model, how many notes are held
/advisor on                     review every completed turn
/advisor off                    stop; /advisor review and the tool still work
/advisor review [focus]         review the session's newest turn now
/advisor model NAME            the reviewer's model, this run
/advisor provider NAME         the reviewer's provider, this run
/advisor clear                  drop the held notes and start over
/advisor test SEVERITY NOTE    deliver a test note: nit, concern or blocker

Advice that is ready stands as a notice under the cell's key: every shell shows it, and the agent reads it in the notices block of its next request. /advisor clear is the reset when a held note has gone stale — the off then on of the original plugin.

The model has one verb of its own, advisor_review: pass it a transcript (the ask, the steps, the tool calls and results, the answer) and it answers the same tagged advice. Use it before committing to a large refactor, or when the answer is not obviously the one that was asked for. Notes are held per session, so a concern raised twice is delivered the second time.

(help :advisor) carries the same manual into the conversation.

What changed from the plugin

The Hermes hooks are gone and the mechanism is a cell's: a :FRAME observer sees a turn reach a terminal fact, one worker thread reviews it, and the advice is a standing notice instead of an injected user message. The full list is in NOTICE. /advisor's verbs, the severity model, the hold-and-reconfirm rule and the reviewer's instruction are the original's.

Tests

.github/test-cell.sh tools/nodecode-advisor

Offline: the reviewer is a scripted answer and the transcript a literal, so the held-and-reconfirmed rule, the tool, the command, the queued turn and the clipping are all asserted without a provider.

Add nc://advisor

  1. 1

    Install Nodecode

    Once per machine.

    $ curl -fsSL https://nodecode.ai/install.sh | sh
  2. 2

    Add the cell

    Pinned at f1278a6.

    $ nodecode add nc://advisor

    Or tell the agent add the advisor cell.