Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ npx @vectorize-io/hindsight-coding-agents install all # every detected
npx @vectorize-io/hindsight-coding-agents install claude-code # or just one
```

Supports Claude Code, Codex CLI, Cursor CLI, GitHub Copilot CLI, opencode, Kilo CLI, Cline CLI, Antigravity CLI, Devin CLI, Prime Agent, Grok Build and DeepSeek Harness. Ingestion is automatic — there is no setup command. See the [coding agents integration](https://hindsight.vectorize.io/sdks/integrations/coding-agents).
Supports Claude Code, Codex CLI, Cursor CLI, GitHub Copilot CLI, opencode, Kilo CLI, Cline CLI, Antigravity CLI, Devin CLI, pi, Prime Agent, Grok Build and DeepSeek Harness. Ingestion is automatic — there is no setup command. See the [coding agents integration](https://hindsight.vectorize.io/sdks/integrations/coding-agents).

### MCP Server

Expand Down
5 changes: 5 additions & 0 deletions hindsight-control-plane/public/img/harness/pi.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 7 additions & 1 deletion hindsight-control-plane/src/lib/harness-logo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
* The ids below are exactly the ones that integration emits — see its
* `src/harness/hook-lifecycle.ts` (one HookSpec per hook-driven agent) and
* `src/harness/registry.ts` (the persistent-plugin agents, whose id is the
* `createPluginEntry(...)` argument of their entrypoint). Do not add entries for
* argument their entrypoint passes to the shared factory it builds on —
* `createPluginEntry(...)` for the opencode family, `createPiExtension(...)` for
* the pi family). Do not add entries for
* agents that cannot appear yet: an id nothing writes is a logo nothing renders.
* When that integration gains a harness, add it here in the same change — drop
* its icon in `public/img/harness/` (copied from
Expand Down Expand Up @@ -87,6 +89,10 @@ export const HARNESS_LOGO_REGISTRY: Record<string, HarnessLogoEntry> = {
"grok-build": { id: "grok-build", label: "Grok Build", src: "/img/harness/grok-build.svg" },
kilo: { id: "kilo", label: "Kilo CLI", src: "/img/harness/kilo.svg" },
opencode: { id: "opencode", label: "OpenCode", src: "/img/harness/opencode.png" },
// pi ships no brand mark of its own, so this is the letter the agent is named
// for, drawn in the same monochrome style as the Prime Agent mark below (the
// fork of pi) rather than a logo invented for it.
pi: { id: "pi", label: "pi", src: "/img/harness/pi.svg", invertOnDark: true },
"prime-agent": {
id: "prime-agent",
label: "Prime Agent",
Expand Down
6 changes: 4 additions & 2 deletions hindsight-control-plane/tests/lib/harness-logo.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,9 @@ describe("documentHarness", () => {
describe("resolveHarnessLogo", () => {
// The exact set hindsight-coding-agents emits: one per HookSpec in
// src/harness/hook-lifecycle.ts, plus the persistent-plugin harnesses whose id
// is their entrypoint's createPluginEntry(...) argument (opencode, kilo,
// cline-cli). The registry must cover these and nothing speculative.
// is their entrypoint's argument to the shared factory they use (opencode,
// kilo, cline-cli, pi, prime-agent). The registry must cover these and nothing
// speculative.
const EMITTED_HARNESSES = [
"antigravity-cli",
"claude-code",
Expand All @@ -50,6 +51,7 @@ describe("resolveHarnessLogo", () => {
"grok-build",
"kilo",
"opencode",
"pi",
"prime-agent",
];
// Ids the integration used to emit. Kept so documents already retained under
Expand Down
29 changes: 24 additions & 5 deletions hindsight-docs/docs-integrations/coding-agents.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: "One Hindsight memory plugin for coding agents — per-repo memory

Long-term project memory for **coding agents**, backed by [Hindsight](https://vectorize.io/hindsight).
One package, several agents: a shared reflect-and-inject core with a thin entry point per agent
(**opencode**, **Kilo CLI**, **Cline CLI**, **Prime Agent**, **DeepSeek Harness**, **Claude Code**, **Codex CLI**, **Antigravity CLI**, **Cursor CLI**, **GitHub Copilot CLI**, **Devin CLI**, **Grok Build**). Ingestion is fully
(**opencode**, **Kilo CLI**, **Cline CLI**, **pi**, **Prime Agent**, **DeepSeek Harness**, **Claude Code**, **Codex CLI**, **Antigravity CLI**, **Cursor CLI**, **GitHub Copilot CLI**, **Devin CLI**, **Grok Build**). Ingestion is fully
automatic — there is no setup command: a repo's git history and conversations flow into its memory
bank in the background as you work.

Expand Down Expand Up @@ -120,14 +120,32 @@ npx @vectorize-io/hindsight-coding-agents install cline-cli

A native plugin via `cline plugin install`, plus MCP and the companion skill.

#### <img src="/img/harness/pi.svg" alt="" width="20" height="20" /> pi

```bash
npx @vectorize-io/hindsight-coding-agents install pi
```

An extension entry in `~/.pi/agent/settings.json`, plus the companion skill in
`~/.pi/agent/skills` — native tools, no MCP needed. Use this command
rather than `pi install npm:@vectorize-io/hindsight-coding-agents`: pi and Prime Agent read the same
`pi` key of a package's `package.json`, which can only name one entry, and it names Prime Agent's —
so on the package route pi would report itself as `prime-agent`, taking that harness's config
section and stamping its documents with the wrong agent.

#### <img src="/img/harness/prime-agent.svg" alt="" width="20" height="20" /> Prime Agent

```bash
npx @vectorize-io/hindsight-coding-agents install prime-agent
```

An extension entry in `~/.prime/agent/settings.json` — native tools, no MCP needed — plus the
companion skill in `~/.prime/agent/skills`.
Prime Agent is a fork of pi, so it is wired the same way: an extension entry, here in
`~/.prime/agent/settings.json`, plus the companion skill in `~/.prime/agent/skills` — native tools,
no MCP needed. Installing both is fine and expected:
each host loads its own entry from its own settings file, and like every other pair of agents they
**share one bank per repo** (the default `coding-agent::{gitProject}`), so what you tell pi is there
when you open Prime Agent. Separate entries are what keeps each side attributable — its own
`harnesses.<name>` config section, and its own agent stamped on every document it retains.

#### <img src="/img/harness/dsh.svg" alt="" width="20" height="20" /> DeepSeek Harness

Expand Down Expand Up @@ -212,7 +230,8 @@ transcripts are needed either way; going through them directly is simply the sho
**How sessions are matched.** A conversation is imported only when the session itself records the
directory it ran in — never inferred from a file or folder name. Claude Code writes that directory
on its entries, Codex in its `session_meta` header and DeepSeek Harness in its session-log header,
so all three can be attributed exactly, including sessions started in a subdirectory of the repo. Guessing was tempting (Claude names its history
and pi and Prime Agent in their session header, so all five can be attributed exactly, including
sessions started in a subdirectory of the repo. Guessing was tempting (Claude names its history
folders after the project path) but unsafe: `/` and `.` both encode to `-`, so `repo-sub` is either
the subdirectory `repo/sub` or an unrelated sibling repo — and a wrong guess files someone else's
conversation into your bank. Sessions that record nothing are skipped and the count is reported.
Expand Down Expand Up @@ -320,7 +339,7 @@ what reads it:
| host | reads the file | an edit applies |
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -------------------------- |
| hook harnesses (Claude Code, Codex CLI, Cursor CLI, GitHub Copilot CLI, Grok Build, Antigravity CLI, Devin) | once per hook invocation — each hook is its own short-lived process | on your next prompt |
| persistent plugins (opencode, Kilo CLI, Cline CLI, Prime Agent, DeepSeek Harness) | once per workspace, when the host loads the plugin | after restarting the agent |
| persistent plugins (opencode, Kilo CLI, Cline CLI, pi, Prime Agent, DeepSeek Harness) | once per workspace, when the host loads the plugin | after restarting the agent |
| the MCP server behind the `hindsight_*` tools | once at startup | in your next session |

`apiToken` is the exception. Every host re-reads it when the server rejects a request, so enabling
Expand Down
5 changes: 5 additions & 0 deletions hindsight-docs/static/img/harness/pi.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
29 changes: 24 additions & 5 deletions hindsight-integrations/coding-agents/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Long-term project memory for **coding agents**, backed by [Hindsight](https://vectorize.io/hindsight).
One package, several agents: a shared reflect-and-inject core with a thin entry point per agent
(**opencode**, **Kilo CLI**, **Cline CLI**, **Prime Agent**, **DeepSeek Harness**, **Claude Code**, **Codex CLI**, **Antigravity CLI**, **Cursor CLI**, **GitHub Copilot CLI**, **Devin CLI**, **Grok Build**). Ingestion is fully
(**opencode**, **Kilo CLI**, **Cline CLI**, **pi**, **Prime Agent**, **DeepSeek Harness**, **Claude Code**, **Codex CLI**, **Antigravity CLI**, **Cursor CLI**, **GitHub Copilot CLI**, **Devin CLI**, **Grok Build**). Ingestion is fully
automatic — there is no setup command: a repo's git history and conversations flow into its memory
bank in the background as you work.

Expand Down Expand Up @@ -117,14 +117,32 @@ npx @vectorize-io/hindsight-coding-agents install cline-cli

A native plugin via `cline plugin install`, plus MCP and the companion skill.

#### <img src="https://hindsight.vectorize.io/img/harness/pi.svg" alt="" width="20" height="20" /> pi

```bash
npx @vectorize-io/hindsight-coding-agents install pi
```

An extension entry in `~/.pi/agent/settings.json`, plus the companion skill in
`~/.pi/agent/skills` — native tools, no MCP needed. Use this command
rather than `pi install npm:@vectorize-io/hindsight-coding-agents`: pi and Prime Agent read the same
`pi` key of a package's `package.json`, which can only name one entry, and it names Prime Agent's —
so on the package route pi would report itself as `prime-agent`, taking that harness's config
section and stamping its documents with the wrong agent.

#### <img src="https://hindsight.vectorize.io/img/harness/prime-agent.svg" alt="" width="20" height="20" /> Prime Agent

```bash
npx @vectorize-io/hindsight-coding-agents install prime-agent
```

An extension entry in `~/.prime/agent/settings.json` — native tools, no MCP needed — plus the
companion skill in `~/.prime/agent/skills`.
Prime Agent is a fork of pi, so it is wired the same way: an extension entry, here in
`~/.prime/agent/settings.json`, plus the companion skill in `~/.prime/agent/skills` — native tools,
no MCP needed. Installing both is fine and expected:
each host loads its own entry from its own settings file, and like every other pair of agents they
**share one bank per repo** (the default `coding-agent::{gitProject}`), so what you tell pi is there
when you open Prime Agent. Separate entries are what keeps each side attributable — its own
`harnesses.<name>` config section, and its own agent stamped on every document it retains.

#### <img src="https://hindsight.vectorize.io/img/harness/dsh.svg" alt="" width="20" height="20" /> DeepSeek Harness

Expand Down Expand Up @@ -209,7 +227,8 @@ transcripts are needed either way; going through them directly is simply the sho
**How sessions are matched.** A conversation is imported only when the session itself records the
directory it ran in — never inferred from a file or folder name. Claude Code writes that directory
on its entries, Codex in its `session_meta` header and DeepSeek Harness in its session-log header,
so all three can be attributed exactly, including sessions started in a subdirectory of the repo. Guessing was tempting (Claude names its history
and pi and Prime Agent in their session header, so all five can be attributed exactly, including
sessions started in a subdirectory of the repo. Guessing was tempting (Claude names its history
folders after the project path) but unsafe: `/` and `.` both encode to `-`, so `repo-sub` is either
the subdirectory `repo/sub` or an unrelated sibling repo — and a wrong guess files someone else's
conversation into your bank. Sessions that record nothing are skipped and the count is reported.
Expand Down Expand Up @@ -323,7 +342,7 @@ what reads it:
| host | reads the file | an edit applies |
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -------------------------- |
| hook harnesses (Claude Code, Codex CLI, Cursor CLI, GitHub Copilot CLI, Grok Build, Antigravity CLI, Devin) | once per hook invocation — each hook is its own short-lived process | on your next prompt |
| persistent plugins (opencode, Kilo CLI, Cline CLI, Prime Agent, DeepSeek Harness) | once per workspace, when the host loads the plugin | after restarting the agent |
| persistent plugins (opencode, Kilo CLI, Cline CLI, pi, Prime Agent, DeepSeek Harness) | once per workspace, when the host loads the plugin | after restarting the agent |
| the MCP server behind the `hindsight_*` tools | once at startup | in your next session |

`apiToken` is the exception. Every host re-reads it when the server rejects a request, so enabling
Expand Down
3 changes: 3 additions & 0 deletions hindsight-integrations/coding-agents/e2e/Dockerfile.pi
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
FROM hindsight-coding-agents-e2e-base
ARG VERSION=latest
RUN npm install --global "@earendil-works/pi-coding-agent@${VERSION}" && command -v pi
2 changes: 1 addition & 1 deletion hindsight-integrations/coding-agents/skill/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ what reads it:
| host | reads the file | an edit applies |
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -------------------------- |
| hook harnesses (Claude Code, Codex CLI, Cursor CLI, GitHub Copilot CLI, Grok Build, Antigravity CLI, Devin) | once per hook invocation — each hook is its own short-lived process | on your next prompt |
| persistent plugins (opencode, Kilo CLI, Cline CLI, Prime Agent, DeepSeek Harness) | once per workspace, when the host loads the plugin | after restarting the agent |
| persistent plugins (opencode, Kilo CLI, Cline CLI, pi, Prime Agent, DeepSeek Harness) | once per workspace, when the host loads the plugin | after restarting the agent |
| the MCP server behind the `hindsight_*` tools | once at startup | in your next session |

`apiToken` is the exception. Every host re-reads it when the server rejects a request, so enabling
Expand Down
Loading