* docs: changelog and blog post for v0.10.0
* fix(changelog): batch a release's commits and summarize them in parallel
The 0.10.0 range summarized to 37 entries, against 65 for the 145-commit release
before it: whole user-facing fixes were unlisted.
Measured on that range, holding model and prompt fixed, one call over the whole
release produces 120 entries against 152 for five batches — 40 commits get an
entry only when batched, against 8 only when not. The input was never the
constraint: a 245-commit release is ~8500 tokens of commit subjects in total, so
every arrangement fits the context window many times over. What batching bounds
is how many commits the model weighs at once before it starts summarizing them
away.
* Commits are batched by token count and the batches summarized concurrently,
followed by a dedup pass that merges the same change described twice across a
batch boundary. The dedup result is re-ordered by the release's own commit
order and filtered to commit_ids that were in the input, so a dropped or
invented id cannot reorder the changelog or point a reader at a commit that
isn't there.
* max_completion_tokens=16000 was a *shared* budget on a reasoning model —
reasoning bills against it, so a long commit list spends most of it before the
first entry is emitted. Worth 8 entries on its own (37 -> 45). Raised to 100000.
* The grouping rule read as licence to merge unrelated fixes that touch the same
area, and "focus on user-facing changes" as licence to drop anything whose
commit title sounds internal. Both are now scoped; this was the largest single
effect (45 -> 126).
Default model is now gpt-5.6-terra.
feat(coding-agents): add ZCode as a supported harness (#4240)
Adds ZCode (Z.ai's GLM coding agent) to the shared coding-agents package, so its
users get the same knowledge-page, reflect and configuration experience as every
other supported agent instead of the standalone hindsight-zcode integration.
Three hook registrations, a stdio MCP server and the companion skill, all in
ZCode's own CLI config and home (~/.zcode) — never the user's real Claude Code
settings, even though ZCode embeds the Claude Code agent runtime and speaks its
hook protocol. Config hooks ship disabled, so the installer flips hooks.enabled;
uninstall removes the block again when nothing else is registered there.
The one genuinely new mechanism is a per-session TURN JOURNAL (core/turn-journal.ts).
Every other hook harness hands its Stop hook a file holding the whole conversation,
which is what the incremental write-back needs: retainLiveSession re-reads the full
transcript and the retain cursor sends only the turns added since the last write.
ZCode has no such file — Stop carries the reply plus a temp, assistant-only
transcript it deletes as the hook returns, and no user prompt at all. So the plugin
keeps the conversation itself: the prompt hook appends the user turn, the Stop hook
appends the reply, and retain then reads it exactly as any host transcript. Nothing
downstream changes.
Two host quirks worth knowing, both verified against the runtime rather than assumed:
- hook budgets are `timeoutMs` MILLISECONDS (30000/30000/60000), like qwen-code and
unlike everything else; the declared timeoutUnit makes that checkable.
- registrations use ZCode's "process" argv shape, not a command string — it spawns
hooks without a shell, so `node "…/zcode-hook.js"` would be looked up verbatim as
one executable name and never run.
`--import-conversations` is deliberately unsupported and says why: ZCode persists no
session transcripts, so there is no history on disk to backfill from.
Verified against real ZCode 0.16.5: all three hooks fire with correct bank
derivation, the journal captures the user/assistant pair, `zcode skills list` finds
the companion skill, and all 8 hindsight MCP tools reach the model. A Docker E2E
(e2e/Dockerfile.zcode) asserts injection AND retention end to end against the
published tarball — fuller than grok-build, factory-droid and qwen-code, which are
retention-only. Its entry script merges the stub provider into the config rather
than rendering it, because that file is the same one the installer owns.
Guard tests, since the sibling that forgets is the one nobody tests: a family-wide
check that journalPrompt and retain.journal are declared together, and that a journal
harness parses neither a host transcript path nor a Stop-event reply — both would be
applied on top of the journal, and ZCode's own payload carries last_assistant_message.
Adds Factory Droid as a supported harness: three hook entry points on Droid's
Claude-shaped protocol, a transcript reader for its JSONL sessions, installer
wiring for ~/.factory (hooks.json, mcp.json, skills/), and the control-plane logo.
Also lands, on top of the original contribution:
- One harness roster for the docs site. The gallery card and the sidebar preview
kept separate hand-maintained lists and both had drifted — dcode, opencode2, pi
and prime-agent were each missing from one of them. Both now derive from
src/lib/coding-agent-harnesses.ts, bound by a test to the registry that decides
what `install <harness>` accepts, so a new harness cannot ship without its logo
or its README entry.
- A Docker E2E for the harness. Droid needs no Factory account for it: with a BYOK
customModels entry it runs fully offline against the stub model.
- A fix to the E2E runner, which drove the container with spawnSync and so starved
the stub model living in the same process. That silently broke dcode, qwen-code
and dsh; qwen-code's E2E passes again with it.
Verified end to end against a real Droid session (recall injected, session
retained) and with full CI on ci/4011-factory-droid: 109/109 jobs green.
* blog: Enterprise Features in Hindsight Cloud
An overview of the enterprise capabilities Hindsight Cloud offers, with
each entry stating the failure it prevents rather than only what it does:
- Single sign-on over OIDC or SAML, with domain verification, provisioning
on first sign-in, and no password fallback once a domain is routed.
- Organization-wide MFA enforcement across TOTP, WebAuthn, SMS and email,
gated on the session having cleared a factor rather than merely having
one enrolled.
- Idle session timeout.
- Owner, Admin and Member roles.
- API key expiry and per-bank scoping, plus scoped child keys as the
isolation primitive for multi-tenant applications.
- Audit logging, opt-in per bank.
- Memory Defense on the retain path, and the Enterprise detector set.
- Bring your own cloud, with PrivateLink on AWS.
Describes capabilities only. No compliance or certification claims, no
regional hosting claims, and no implementation detail or internal
identifiers.
Cover is w03 (aperture): layers closing around a memory graph.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
* blog: apply review feedback on enterprise features
Four corrections from review:
- MFA factors were wrong. The post listed authenticator apps, WebAuthn
passkeys, SMS and email. Cloud offers two: an authenticator app (TOTP)
and an emailed one-time code. The four-factor list was the underlying
identity provider's capability, not what Cloud exposes.
- Idle session timeout is now enabled for every organization, so it moves
from Enterprise to all plans.
- Webhooks were missing entirely. Added as an Enterprise section: events
on completed retains and consolidations, HMAC-signed payloads,
asynchronous delivery with retries and per-delivery history, and Memory
Defense violation alerts that can be routed to a SIEM.
- On-premise deployment was missing. Added alongside bring-your-own-cloud,
for the case where data cannot leave your own hardware rather than just
your own cloud account.
The at-a-glance table, description, and FAQ are updated to match.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
* blog: describe private connectivity as provider-neutral
The previous wording put the infrastructure template and private
connectivity behind "on AWS that includes...", which reads as though those
are AWS-only capabilities. They are not tied to one provider.
Both are now described as part of the bring-your-own-cloud deployment
generally: the deployment ships the templates you apply in your own
account, and traffic uses whichever private-endpoint mechanism your
provider offers. The FAQ answer is updated the same way.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
* blog: drop the infrastructure-template paragraph from bring your own cloud
Leaves the section on the two claims that matter: the deployment goes into
your own cloud account, and private connectivity keeps traffic off the
public internet.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
* blog: date the enterprise features post 2026-09-03
The post was drafted on 09-01 and changed substantially after that across
four rounds of review: MFA factors corrected, idle session timeout moved to
all plans, webhooks added, on-premise added, and private connectivity
described as provider-neutral. Dating it to publish day rather than draft
day, before it goes live rather than after.
Filename, frontmatter date and slug move together. The 09-01 cross-link to
the June-August roundup is unchanged and correct.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* blog: Four New Coding Agents, and Four Ways to Fail Silently
Covers coding-agents 0.5.0, which adds pi, Qwen Code, DeepAgents Dcode and
opencode 2, bringing the package to 16 harnesses.
The angle is that three of the four integrations, wired the obvious way,
failed without producing an error:
- opencode 2 rewrote the plugin contract, and handing either host the
other's export loads a plugin that registers nothing and reports no
error. Both CLIs also read the same config file, which v1 rejects
outright if it contains v2's plugins key.
- Qwen Code speaks Claude Code's hook protocol field for field, but its
timeouts are milliseconds, so the usual values register 30ms hooks. It
looks fine in testing because orphaned processes still finish.
- Dcode's last_assistant_message is a Python repr, so encrypted reasoning
payload was retained as the assistant turn and re-appended every turn.
- pi and Prime Agent shared one package.json key, so the host it did not
name loaded the other's bundle under the wrong harness.
Screenshots are the install output and the three new hosts at startup.
Captions describe what each frame actually shows and do not claim to show
memory injection, which these captures do not.
Cover is c03: the four harness marks converging on one memory core.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
* blog: reframe around the agents, not the integration work
The first draft read as a bug-fix changelog: four sections, each about a
trap we hit wiring a host. That is inward-facing, and it buries what a
reader actually wants to know.
Rewritten around three things:
- How a coding agent works, and what it loses on every session reset. The
mechanical part is rederivable from the code; the last mile is a
decision that was never in the code at all.
- What memory adds to that loop: cold seed at session start, recall per
prompt, native tools during, write-back at the end.
- Sixteen agents sharing one bank per repository, so switching agents
costs nothing. This is the strongest point in the release and the first
draft did not make it at all.
Each new agent now gets described for what it is rather than for how it
broke. Qwen Code's QWEN.md convention and Dcode's headless mode are used
to make the memory argument concrete, which also gives the screenshots
something to support.
The integration difficulties are kept as one short closing aside with a
single example, rather than the spine of the post.
Title changed to match. Adds a comparison table for the four agents.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* blog: What's New in Hindsight Cloud — June-August Updates
Resumes the "What's New in Hindsight Cloud" series, which last ran on
2026-05-19. Covers thirteen releases (v0.7.0 through v0.9.2): the
client-managed knowledge base, cron-scheduled mental model refreshes,
per-bank recall pipeline controls, the refreshed design system,
Constellation, and bank-to-bank transfers.
Every feature was verified to be an ancestor of the v0.9.2 tag, and each
capability was checked against what Hindsight Cloud actually offers today,
so the post describes only what a Cloud customer can use. Where a capability
is available through the API rather than the console, the post says so.
Cover is r02 (cream editorial).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
* blog: title the cover "What's New in Hindsight Cloud"
Matches the post title and the series name, rather than referring to the
console generically.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
* blog: apply review feedback and re-verify every claim
Review feedback:
- Drop reversible curation. It is not in the console.
- Cloud offers document export, not import. Rewrote the transfer section
as export only and said so explicitly.
- Drop recall pipeline controls.
- Fact-check the rest for both API and console exposure.
The audit found two more claims that are not in the console and removed
them: the API version in the sidebar, and refresh operations recording
what they changed.
Re-verified as present and kept: knowledge base tree, page editor,
page-level search, refresh triggers and staleness badges; the mental model
refresh-trigger selector, cron schedule preview and next-refresh display;
Constellation animation, inline detail and fullscreen; document tag
filtering, entity timelines and in-flight retain badges; background
document export with the optional-observations toggle; operation progress;
observation scopes; and per-bank audit log. Dry-run refresh and dry-run
extraction are labelled as API-side because that is where they exist.
Cover updated to match the revised feature list. Three cross-links added
and verified.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
* blog: add the enterprise features shipped in this window
Adds four sections covering enterprise work that landed since the last
roundup:
- Single sign-on and MFA: bring-your-own IdP over OIDC or SAML, email
domain claiming with DNS verification, provisioning on first sign-in,
organization-wide MFA enforcement across TOTP/WebAuthn/SMS/email, and
an idle session timeout for orgs with session-management obligations.
- Audit logging: a queryable trail of retain, recall and reflect, opt-in
per bank rather than all-or-nothing.
- Memory Defense Enterprise: prompt injection guard, size anomaly,
protected document tags, the broad pattern catalog, base64 decoding,
and LLM screening.
- Bring your own cloud: deployment into a customer AWS, GCP or Azure
account, with PrivateLink from the application VPC on AWS.
Described at the capability level only. Implementation details, internal
identifiers and customer names are deliberately excluded.
Cover and closing CTA updated to match.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
* blog: drop the enterprise CTA from the closing section
The "Try it" section goes back to the signup link alone, matching the
rest of the series. Enterprise gating is still stated inline where it
matters, in the SSO/MFA and audit logging sections.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
* blog: drop the bring-your-own-cloud section
BYOC is not new, so presenting it as part of this window's updates
overstates it. Removed the section along with its table-of-contents
entry and the mentions in the intro and description.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adds pi (@earendil-works/pi-coding-agent) as a harness and extracts createPiExtension(harness),
the extension adapter pi and its fork Prime Agent share. Supersedes #3775.
The `pi` key is removed from package.json: both hosts read that same key, so it could only ever
name one bundle, and the host it did not name loaded the other's and reported the wrong harness.
`hindsight-coding-agents install pi|prime-agent` is now the only route for both.
Also makes the companion skill self-update for every host that installs one — the paths now live
once in core/skill-dirs.ts, which both the installer and skill-sync read.
Co-authored-by: Sebastian Otaegui <feniix@gmail.com>
* feat(coding-agents): add qwen-code as a hook harness
Qwen Code speaks Claude Code's hook protocol field for field -- same stdin
envelope (session_id / transcript_path / cwd / hook_event_name), same
hookSpecificOutput.additionalContext + systemMessage output, same exit
semantics, and a settings.json shape byte-for-byte what cmdHook() already
emits. So HOOK_HARNESSES["qwen-code"] is claude-code's spec with three deltas,
none of which is visible from the diff:
1. TIMEOUTS ARE MILLISECONDS. Qwen passes a command hook's `timeout` straight
to setTimeout ("Timeout in milliseconds, default 60000" -- its own bundled
docs/features/hooks.md). Every other harness here is seconds, so the
installed values are 30000/30000/60000. Writing 30/60 would register 30ms
hooks, and that misconfiguration LOOKS fine in testing: Qwen spawns without
detached:true and kills only the direct child, so the orphaned work still
completes. HookHarnessSpec therefore declares `timeoutUnit`, and the
lifecycle tests normalise through it -- changing 30_000 to 30, or dropping
the unit, now fails a test instead of shipping dead hooks. The prompt budget
must also clear core/hook.ts's HOOK_REFLECT_CAP_MS (25_000).
2. parse reads `submitted_prompt`, not `prompt`. UserPromptSubmit also fires on
tool-result continuations, where `prompt` holds model-bound tool output;
keying on it would recall ~20x per user turn against tool results.
`submitted_prompt` is attached only when the turn is both the first and a
genuine userQuery. Accepted cost: it is the interactive TUI's projection, so
headless (`qwen -p`), serve, SDK and ACP sessions seed and retain but never
recall. The E2E declares injectsIntoModel: false for exactly that reason --
a different reason from grok-build's passive hook.
3. type:"user" is NOT a user turn. `provenance` is the discriminator: across a
22-transcript corpus, synthetic records (notification 285, cron 21,
goal_runtime 1) outnumber real_user ones (69) by 4.4:1. transcript-qwen.ts
gates on it, rejecting a present-but-malformed value outright rather than
falling through to a subtype heuristic, and requiring a positive subagent
marker (agentId/isSidechain) before accepting an absent one -- subagent
transcripts use a third envelope with neither provenance nor subtype.
Qwen also echoes injected context back into its own transcript, wrapped in
<qwen:user-prompt-submit-context> with the inner tags HTML-escaped, so the
shared stripInjectedMemory (which matches raw tags) cannot see it. The reader
removes it using the two forms of pairing evidence Qwen's contract defines:
systemPayload.hookContext present -> use systemPayload.displayText, the host's
own pre-hook projection, with no tag matching at all; otherwise a COMPLETE
tagged context in the FINAL part after at least one other part. It deliberately
does NOT match the tag as a substring -- the contract is explicit that the tag
is "a provenance marker, not ... a general trust boundary" and that consumers
"must not infer that arbitrary tag-like user text is hook provenance", so a
prompt merely quoting the tag is preserved intact.
Also here:
- registry.test.ts gains the REVERSE parity check. The existing one is
directional (installer -> registry), so a harness present in the registry but
missing from INSTALLERS passes it while `install <name>` returns "unknown
harness". That is exactly how this change was briefly broken.
- readQwenTranscript catches lazy-read faults. readJsonlTail guards
statSync/openSync, but the generator reads at iteration, and runRetainHook
calls the reader outside buildRetain's catch -- so a directory passed as
transcript_path (which passes both guards, then throws EISDIR on the first
readSync) rejected the whole Stop hook. NOTE: the underlying gap is in the
shared jsonl.ts and affects every harness; it deserves its own fix rather
than riding along here.
- Logo asset from homarr-labs/dashboard-icons (Apache-2.0, svg/qwen.svg).
Tests: 675 pass. Note HINDSIGHT_BANK_ID must be unset in the environment, or
config.test.ts's "missing files yield defaults" fails on the leaked value.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WkVVSuv7j1FwTtVpkzzmWR
* chore(coding-agents): regenerate docs artifacts and apply prettier
Address the two CI-blocking review items on #3769:
- Regenerate the two artifacts derived from the README's new Qwen Code
section: hindsight-docs/docs-integrations/coding-agents.md (via
sync-coding-agents-doc.mjs) and the docs-skill copy (via
generate-docs-skill.sh).
- Run prettier over the package with 3.7.4 -- the version CI's root
`npm ci` pins -- covering the four files the review names, plus
package.json, where it restores the literal ellipsis in `description`
that the branch had accidentally left as a unicode escape sequence.
Verified: sync-coding-agents-doc.mjs --check, build-skill.mjs --check,
and prettier --check all pass; 675 tests pass.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qx1ByUMo3SJhXP7MBxEQ1g
* fix(coding-agents): close the qwen-code harness parity gaps
Rebased onto main (the branch was 98 commits behind and conflicted with the
dcode harness) and closed the sites a new hook harness must also appear in,
found by sweeping every place an existing harness is registered:
- `SKILL_DIRS` (core/skill-sync.ts) did not map qwen-code, so the skill the
installer copies into ~/.qwen/skills would have been installed once and then
never refreshed by `npm update -g`. Verified ~/.qwen/skills is Qwen's real
user-level skills root (Storage.getUserSkillsDirs, SKILL_PROVIDER_CONFIG_DIRS
= [".qwen", ".agents"]). Added a family-wide guard asserting SKILL_DIRS covers
every `installSkill` call site, with the five pre-existing gaps (copilot-cli,
grok-build, cline-cli, dsh, prime-agent) listed explicitly so a new harness
cannot silently join them.
- The docs site had no qwen-code icon, so the README's own logo would 404, and
the harness was absent from both coding-agent logo rosters.
- package-lock.json did not carry the three new bins.
Two comments asserted things that are not true of qwen-code 0.22.3 and are
corrected against its source: the hook runner spawns `detached` and calls
`terminateHookProcessTree` on timeout, so a milliseconds/seconds mix-up loses
the retain outright rather than orphaning it; and headless `qwen -p` DOES carry
`submitted_prompt` — the E2E is retention-only because the stub model echoes
only the first 20 000 characters of the request, which Qwen's system prompt
alone exceeds.
Verified end to end against a local API: installed the published tarball into a
container, ran `qwen -p`, and confirmed session_start / reflect_ok / pages_ok /
retain_ok, a document tagged `harness:qwen-code`, and zero injected-memory
leakage in the retained text.
Claude-Session: https://claude.ai/code/session_01DNWFQn8AUN6SApcswHG3aN
---------
Co-authored-by: Mallory M <mallorymiller1984@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Registers `dcode` (LangChain's deepagents-code) as a native Agent Plugin: root `plugin.json`
contributing the shared skill, the Hooks V2 SessionStart/UserPromptSubmit/Stop lifecycle, and the
`hindsight_*` MCP server, installed through Dcode's own marketplace/plugin manager.
Includes fixes found by running it against deepagents-code 0.1.65:
- Decode `last_assistant_message`. Dcode's transcript lags the Stop event, so that field is
load-bearing, but it is computed as `str(content)` — a Python repr whenever the provider returns
content blocks. It was retaining ~1.8KB of encrypted reasoning payload as the assistant turn, and
never comparing equal to the transcript's clean text, so an already-flushed reply was appended
again every turn. Guarded family-wide: any harness surfacing the field must declare a decoder.
- Annotate the six read-only MCP tools with `readOnlyHint`. Dcode rejects unannotated MCP calls in
headless mode, which made recall and the knowledge-page tools unusable under `dcode -n`.
- Parity: local history import (attributed via `dcode threads list --json`, since the transcripts
carry no cwd), a Docker E2E adapter and image, the harness icon on the docs site as well as the
control plane, and a clean uninstall that also retires the marketplace it registered.
- Document that Dcode cannot host the codebase survey: `hindsight_ingest_document` writes, so its
headless runtime gates it by design; it falls back to another agent's CLI like eight other
harnesses.
Supersedes #3887.
Co-authored-by: Paritoshdagar <paritoshdagar@gmail.com>
Claude-Session: https://claude.ai/code/session_01DNWFQn8AUN6SApcswHG3aN
* blog: Cross-Encoder Reranking — The Last Stage of Agent Memory Recall
Deep dive on the reranking stage: cross-encoder vs bi-encoder, conditional
score normalization, the multiplicative recency/temporal/proof-count boosts,
the RRF-passthrough seeding fix, the candidate budget, and the reranker
failover chain.
All claims verified against the v0.9.2 tree, so nothing here documents an
unreleased setting.
Cover image is a placeholder pending final art.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
* blog: final cover for the cross-encoder reranking post
Replaces the placeholder with c01 (navy funnel): 300 fused candidates
narrowing to a reranked shortlist.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AE4NCnCKXUzNDF3N9FaQja
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* blog: How We Made Retain's Peak Memory Flat, from 4 MB to 90 MB Documents
* blog: use isometric before/after cover with v0.9.2 badge
* blog: emphasize v0.9.2 on the isometric retain cover
* blog: drop redundant v0.9.2 badge from retain cover
* blog: Your Agent Can Now Manage Its Own Knowledge Base Over MCP
* blog: use teal-indigo gradient cover matching the Knowledge Pages series
* blog: use the versioned knowledge-page graphic on the gradient cover
* docs: changelog and blog post for v0.9.2
* docs: rework the 0.9.2 blog post and flag the last_refreshed_at break
- drop the 'largest reliability release' framing and the movie-style section
titles; plain, specific headings for a point release
- Recall: name the actual field and shape, one bullet per change
- replace the correctness section with Mental Models, covering the delta
markdown corruption, retracted-fact unsay, the last_refreshed_at semantics,
refresh pacing/dedupe and the new refresh outcome
- retitle 'Built for Many Banks' -> 'Running Many Banks'
- add 'Retain on Large Documents' for #3763
- promote last_refreshed_at to Breaking Changes in the changelog, where its
commit already labelled it
* docs: keep last_refreshed_at a bug fix, not a breaking change
* docs: concrete opener and specific section titles for the 0.9.2 post
- open on the actual defects (welded table, 6000 refreshes/day) instead of
framing the release as four things the engine decided by itself
- every section title now names what changed rather than the area it touched
- drop the 15-of-16-constructs statistic from the markdown-corruption bullet
* docs: lead the 0.9.2 post with features, not bug fixes
Rebuild the post around what 0.9.2 adds: knowledge-base MCP tools, the
caller-supplied recall window, the mental-model refresh floor and typed refresh
outcome, the Copilot provider and asymmetric embedding prefixes, and the two new
operator ceilings (retain memory budget, vector-index row threshold).
The mental-model corruption, retracted-fact and last_refreshed_at narratives are
gone; fixes now collapse into one closing line pointing at the changelog, which
carries all 44 of them.
* docs: regenerate the 0.9.2 changelog on the rebased main
Picks up #3763, #3764, #3770 and #3783, which landed after the first run.
Re-adds eight entries the summarizer dropped again: the Copilot provider and
knowledge-base MCP tools (both headlined in the blog post), bank-list
pagination, worker tracing, last_refreshed_at, the maintenance DDL deadlock,
Vertex AI multi-region, and the Windows daemon windows.
Also notes the sub-batch split streaming in the retain section of the post.
* docs: add the 0.9.2 release infographic to the blog post
* docs: sync the skill openapi.json to 0.9.2
release.sh regenerates the docs skill before bumping the OpenAPI version, so
the skill's copy lags the release commit by one version.
* blog: Knowledge Graphs vs. Vector Search for Agent Memory
* blog: use teal split-panel cover for KG-vs-vector post
* blog: address BM25 objection (exact match is keyword's job, not the graph's)
* blog: Give DeepSeek Harness a Memory of Your Codebase
* blog(deepseek-harness): swap cover for editorial diff-panel design
Replaces the plain gradient lockup with the editorial template used across
recent covers: DeepSeek whale x Hindsight lockup, a bold headline
("One command. DeepSeek Harness never forgets your repo."), and a
project-memory diff panel showing the repo conventions the integration
retains (uses pgm not npm, Conventional Commits, tie-break rule).
Adds `dsh` as a persistent-plugin harness: a native Cordis plugin that binds
DeepSeek Harness's typed lifecycle events to the shared RuntimeCore.
agent/session-start -> seedIfCold (cold check + background seed)
agent/pre-step -> onPrompt (recall) + the injection as a
`{kind:'plugin', form:'recall'}` message
agent/turn-stopping -> onSessionIdle (write-back of the completed exchange)
ctx.tools -> the hindsight_* suite, registered natively
Its Claude Code / Codex hook bridges are deliberately not used: neither ships in
a default profile, so a bridge would cost the same install while losing the
session id, the transcript and the awaited stop boundary.
dsh is the first host where ONE process serves SEVERAL repositories — its Web UI
opens each session in whatever directory the user picks — so the bank, client and
seed are resolved per session workspace and the core is constructed with that
workspace root, which is what binds the tools' git checks to the right repo.
The plugin imports nothing from dsh: host shapes are structurally typed and tool
definitions are built in the registry's own shape, so there is no dsh package for
pnpm to resolve inside a profile and no version to keep in step.
Also here:
- backfill reads dsh session logs. They are a CONCATENATION of zstd frames, and
both of Node's decoders stop after the first one — a plain decompress returns
only the header line — so core/zstd-frames.ts walks the frame structure and
decodes each frame (RFC 8878 §3.1).
- transcript normalization keeps only `source.kind === 'user'` messages: dsh
delivers plugin context (its runtime snapshots, the skill catalog, our own
recalled memory) as user-role messages on the same surface.
- describeError: Node's fetch reports every transport failure as the bare string
"fetch failed" and hides the reason on `cause`, which made an unreachable
apiUrl an investigation instead of a log line.
- vitest pins HINDSIGHT_CONFIG at a path with no file; loadConfig otherwise
resolved the developer's real ~/.hindsight/coding-agent.json, so a machine with
a token configured failed assertions a clean machine passed.
Verified against @deepseek-ai/dsh 0.1.0-rc.6: recall reaches the model, all 8
tools reach the model and dispatch, sessions are retained, and the Docker E2E
(e2e/Dockerfile.dsh, driven through the stub model like the other credential-less
harnesses) runs the whole lifecycle in a container.
* fix(changelog-gen): exclude integration/plugin commits and MDX-escape summaries
Two fixes to the core changelog generator:
- Drop any commit that touches hindsight-integrations/ (not just commits that
touch *only* that path), so integration/plugin PRs that also touch shared
docs/CI/scripts stop leaking into the core changelog. Guard the core-changelog
LLM prompt with an explicit skip rule too (not applied to an integration's own
changelog).
- Escape < and > in summary prose so an HTML/JSX-like token (e.g. <think>) is
rendered as text instead of failing MDX compilation of the changelog page.
* docs: changelog and blog post for v0.9.1
* blog: Knowledge Pages — a self-healing wiki for your Hermes agent
* blog(knowledge-pages): use g05d lockup cover (Hermes x white Hindsight mark)
* blog(knowledge-pages): feature tour with real Control Plane screenshots + Hermes value framing
* blog(knowledge-pages): retitle to 'Turn Your Hermes Agent's Memory Into a Living Knowledge Base'
* blog: pivot to Coding Agents — 'Claude Code Now Builds and Reads Its Own Knowledge Base'
Adds @vectorize-io/hindsight-eliza, an elizaOS plugin that gives agents
long-term memory backed by Hindsight:
- HINDSIGHT_MEMORY provider recalls relevant memories into the prompt
before each model call.
- HINDSIGHT_RETAIN evaluator retains conversation messages after each
turn (fire-and-forget; agent replies optional).
- Bank defaults to the message entityId for per-user isolation; both
sides fail safe so a Hindsight outage never blocks the agent.
Targets @elizaos/core ^1.7.2 (current npm latest, not the 2.x beta on
main). Includes tests, CI job, release-script + changelog-generator
entries, and docs gallery entry + page.
* feat(coding-agents): add Prime Agent as a supported harness
Adds Prime Agent (PrimeIntellect) as a plugin harness in
@vectorize-io/hindsight-coding-agents, giving it the shared reflect-and-inject
core (auto-seed, knowledge pages, attribution, per-repo bank naming) like
opencode/cline. A Prime Agent extension entry (src/prime-agent.ts) wires
before_agent_start -> recall + system-prompt injection and agent_end ->
transcript write-back onto RuntimeCore, and registers the hindsight_* knowledge
tools natively via pi.registerTool (Zod raw shape -> JSON Schema; Prime Agent
forwards it to the model provider). Installer registers the built extension in
~/.prime/agent/settings.json; registry lists it for backfill. Includes a
transcript normalizer, unit tests for the hooks/tool adapter/converter/installer,
a README entry, and the synced docs page.
Supersedes the standalone @vectorize-io/hindsight-prime-agent package.
* fix(coding-agents): register Prime Agent in the control plane, wire its E2E, pass the workspace
Follow-ups from review, on top of a rebase onto main (the branch was 66 commits
behind and predates the append write-back, bounded transcript reads, the retain
stamp and both 0.2.x releases).
Control-plane registry. CLAUDE.md requires a new harness to land its logo entry
in the same change, and this one didn't: documents retained by Prime Agent carry
metadata.harness = "prime-agent" and a harness:prime-agent tag, which the
documents list resolves a logo from, so every one of them rendered as bare
metadata. Verified against a real local run before fixing. Neither guardrail
catches this — the parity test's EMITTED_HARNESSES is a hand-maintained list, and
it lives in the control plane, so `detect-changes` never runs it for a
coding-agents-only PR. Added to the registry, the icon copied into
public/img/harness, and the id added to that list so it is covered from now on.
The mark is dark line art, so invertOnDark like the other monochrome ones.
E2E. Every other harness has a Docker E2E entry; this one had none. Added
Dockerfile.prime-agent and a setup entry, so it joins the roster that installs
the CLI, seeds a bank with a decision the prompt never mentions, and requires the
agent to carry it back out. It skips cleanly without credentials, like the rest.
Prime Agent ships no npm package — the upstream repo is a private monorepo — so
the image uses the vendor installer and puts ~/.local/bin on PATH.
createRuntime passed four arguments to RuntimeCore, dropping the workspace
directory added in #3346. Harmless today because repoPath is process.cwd(), but
{gitProject} and {project} in retainTags/retainMetadata would silently resolve
against the wrong directory the moment those diverge; plugin-entry and cline both
pass it explicitly.
Regenerated the docs skill mirror, which verify-generated-files was failing on.
---------
Co-authored-by: Nicolò Boschi <boschi1997@gmail.com>
* blog: Best Open-Source Agent Memory Systems (Self-Hosted, 2026)
A fair, benchmark-grounded comparison of the self-hostable open-source agent
memory systems (Hindsight, Mem0, Graphiti/Zep, Letta, Cognee): comparison
table, per-system profiles, "what self-hosted really costs", FAQ, and a
"when to pick each" guide. Every stat/claim verified against live sources
(GitHub stars, licenses, Zep CE deprecation, benchmarks). Swiss-type cover.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* blog(oss-memory): refresh GitHub star counts to current
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* blog: guest post — writenode, continuity over retrieval (by Josh Groves)
Community guest post by Josh Groves (@Xp3rtMag1c1an), maker of writenode, on
building an AI note-taking Chrome extension on Hindsight: per-user memory
banks, a mode classifier, Node Gravity, and the SOURCE NODE chat. Adds the
post, four product screenshots, a co-brand cover, and an authors.yml entry.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* blog(writenode): add benfrank241 as co-author
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* blog(writenode): update date to 2026-08-10
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: draft blog posts for v0.9.0 (release + coding-agents)
* docs: 0.9.0 changelog + consolidate coding-agents launch post
* docs: update launch post to the shipped coding-agents harness list
* docs(blog): add per-agent wall time to the 0.9.0 benchmark table
The table reported corrections and cost but not how long a task took, which is
the number a reader feels. Computed from the same runs as the other columns —
outputs/sdebench/{hindsight,vanilla}-{claude,codex,opencode}-{1,2,3} on the
benchmark repo's main, meta.wall_s averaged per task across the three runs of
each arm:
Claude Code 84.7s -> 75.1s (-11%)
opencode 174.2s -> 163.3s (-6%)
Codex CLI 53.6s -> 48.6s (-9%)
Verified against the published columns before trusting the source: the same
files reproduce corrections 0.85/0.36, 1.20/0.80, 1.34/0.47 and costs -24%,
-13%, -52% exactly.
The prose claim is deliberately the weaker one — every memory run beat its
agent's vanilla AVERAGE, which holds for all nine. 'Faster than every vanilla
run' does not: opencode's slowest memory run (171s) is slower than its fastest
vanilla run (163s), and Codex ties at 51s.
* docs: regen 0.9.0 changelog and expand release blog for new features
* docs: refresh 0.9.0 changelog (99 commits)
* docs: date the 0.9.0 posts (launch 08-06, release 08-07) and unset draft
* docs(blog): embed 0.9.0 launch video, add coding-agent logos cover, cross-link posts
* docs(blog): drop cover image from the 0.9.0 release post (keep it on the launch post)
* docs(blog): fix coding-agents install to npx, link the Coding Agents docs page
* docs: regenerate 0.9.0 changelog against the release tag; sync docs-skill mirror
* docs: launch the Coding Agents page and mark the per-agent plugins superseded
Hold until the Coding Agents plugin is announced — merging this makes the page
public and tells existing users their plugin is legacy, so it should land with
the announcement rather than before it.
Two halves:
- Launch. Undoes the deliberate hide: the page drops `unlisted`, its entry
returns to integrations.json (which drives both the gallery and the sidebar),
and coding-agents leaves the EXCLUDED set in check-integrations.mjs, so the
released-tag check guards it like every other integration.
- Supersede. The six overlapping integrations — claude-code, codex, opencode,
cursor-cli, cline, copilot-cli — get an admonition in the style already used
on the Hermes page: what replaces them, the install command for their harness,
and a link to the migration section. Pages and packages keep working; nothing
is deleted and no registry deprecation is published, so existing links and
installs are unaffected.
Each notice states plainly that memory does not move — the old plugins scope a
bank per agent per project where this one uses a bank per repo — and points at
`--import-conversations` for Claude Code and Codex, the two whose transcripts
record enough to attribute a session to a repo. The other four say so instead of
implying an import exists.
* docs: group the integrations sidebars into coding agents / frameworks / apps
Both sidebars driven by integrations.json rendered one flat run of 59 entries.
Split them into three groups so a coding agent is distinguishable from an SDK.
The existing `category` field couldn't drive this on its own: its `tool` bucket
mixed CLI agents and editors with chat apps, note-taking and voice platforms.
The 19 coding agents move to a new `coding-agent` category; `framework` is
unchanged, and `tool`/`mcp` become the catch-all group.
Grouping lives in src/lib/integration-groups.ts, kept free of the @site alias and
of any JSON import so both consumers can use it — the theme swizzle (webpack) and
sidebars-integrations.ts (evaluated at config load). An unrecognised category
falls into the last group rather than disappearing from the sidebar.
* docs: regenerate the docs-skill mirror for the supersede admonitions
scripts/generate-docs-skill.sh mirrors docs-integrations/ into skills/; the
launch commit edited seven pages without re-running it, so the mirror still
described the per-agent plugins as current.
* docs: spell out the migration path for Claude Code and Codex
Both pages said memory "does not move automatically", which is now only half
true: the server endpoint IS carried over (~/.hindsight/claude-code.json and
~/.hindsight/codex.json, same keys), so nobody is silently switched to Cloud.
Each page now states what moves — the endpoint automatically, conversations via
--import-conversations — and what does not: the recall/retain settings, missions
and bank-naming options. It also says why conversations come from local
transcripts rather than the old bank: that bank defaulted to a single static
bank shared by every project, whose documents record only a session id, so
attributing them to a repo requires the local transcripts regardless.
These are the only two superseded plugins with an endpoint to carry; the other
four pages already say their history can't be imported and are unchanged.
* feat(claude-code,codex): deprecation notice in the old plugins' sessions
Folded in from #3205 so the launch lands as one change: the docs that announce
the Coding Agents plugin and the in-session notice that points existing users at
them ship together, rather than one arriving without the other.
Both plugins keep working, but they are deprecated — development has moved to
@vectorize-io/hindsight-coding-agents. A changelog entry reaches nobody who
installed a year ago, so the SessionStart hook says it, via systemMessage (the
channel Claude Code shows the USER; additionalContext would only reach the
model). Codex accepts the same hook output shape, so one design serves both.
Emitted before the existing early returns: neither the memory settings nor
whether the server is reachable changes the fact that the plugin is deprecated.
Shown every session, with `"upgradeNotice": false` as the permanent opt-out —
stated in the message itself, which is what makes that frequency acceptable.
With no rate limit there is no state file and none of its failure modes; what
remains is a config check that returns None rather than raising, because a
promotional message must never be why a session breaks.
* docs: per-harness install sections, featured hub cards, browsable sidebar
Page
- One subsection per harness with its logo and a copyable install command,
replacing the table: the command is what a reader came for, and a table cell
is not copyable.
- Title is just "Coding Agents"; the old keyword-stuffed title read as spam in
the sidebar and breadcrumbs.
- "Ingestion internals (no CLI)" is dropped from the docs page via the existing
DROP_SECTIONS mechanism, staying in the README where the contributor-facing
audience is.
Integrations Hub
- A Featured grid pins Coding Agents, Vercel AI SDK and OpenClaw above the
rest, and only on the unfiltered view — pinned cards above non-matching
search results would read as noise.
- The Coding Agents card draws all ten supported harness logos. "One install,
every agent" is the whole pitch and a single icon cannot carry it.
- Logos come from the control plane's harness set, which is already keyed by the
exact harness ids the plugin uses, so the two stay consistent by construction.
Sidebar
- Groups are open but show six entries each, with the tail behind a nested
"Show all N". Fully expanded, 59 entries were a wall; fully collapsed hid that
the list was worth opening.
- The umbrella Coding Agents entry leads its group instead of sorting under "C",
since it is the entry point to every other agent in that list.
* fix(docs): point the page's harness logos at this build, not production
The README must use absolute URLs so the logos render on npm and GitHub, but the
docs page inherited them verbatim — pinning every image to hindsight.vectorize.io,
where /img/harness/* does not exist yet. Logos were broken locally and in
previews, and would only start working after a deploy.
The sync script now rewrites our own absolute asset URLs to site-relative, next
to the repo-relative-link rewrite it already does for the same reason: two
audiences needing different URLs from one source.
* docs: curate the sidebar previews, harness logos for coding agents
The coding-agent group now previews HARNESSES, not pages: ten logos that all
link to the Coding Agents page. Listing ten integration pages there presented
one plugin as ten separate integrations, which is the opposite of its pitch —
and the logos make the group recognisable at a glance. Every individual page
moves behind "Show all", which is also what keeps it associated with the
sidebar.
The other groups get hand-picked previews instead of the first six
alphabetically — the first names in a sorted list are an accident of spelling,
not a description of the group:
Frameworks & SDKs — LangGraph/LangChain, Vercel AI SDK, Vercel Chat, Eve, CrewAI
Apps & tools — ChatGPT, Hermes, OpenClaw, Obsidian
Hermes, NemoClaw, OpenClaw and Paperclip move from framework to tool.
The overflow label counts what opening it actually reveals: "Show 21 more" where
some entries are already previewed above, "Show all 19" for coding agents, whose
overflow really is every page.
* docs: inline sidebar preview, full list on the integration pages
The two sidebars do different jobs, so they now show different things.
Main docs sidebar — a preview: three groups rendered INLINE and
non-collapsible, nothing behind a disclosure. Ten harness logos for coding
agents, five frameworks, four apps, then an "All integrations" link to the
gallery, which offers search and filters a sidebar cannot.
Integration pages — the full list again: flat, alphabetical, every entry. Once
you are on one of these pages you are comparing and hopping between them, so
hiding two thirds behind "Show N more" worked against the reader. Listing each
page directly is also what associates it with this sidebar.
* docs: promote the sidebar groups, separate Featured, brand the umbrella card
Sidebar: the "Integrations" placeholder is replaced BY its contents instead of
filled, so the three groups sit at the same level as the rest of the navigation.
The wrapper was two levels of nesting to say one thing, and it indented every
entry beneath it.
Hub: a divider and an "All integrations" heading separate the pinned Featured
cards from the full list, which otherwise read as one uninterrupted run.
The Coding Agents card carries the Hindsight mark rather than the GitHub logo —
it is our own package, and the GitHub icon said nothing about it.
* docs: install with npx, no global install
Every example across the README, the seven integration pages, the companion
skill and the generated docs now runs the installer with npx. Nothing here asks
anyone to keep a package installed whose only job is to wire other tools up.
The paragraph telling people to install globally — and warning that npx was
refused — is replaced by what actually happens: install copies what it needs
into ~/.hindsight/coding-agents and points each agent's wiring there, so it does
not matter where it ran from, and updating is the same command again.
Depends on #3241, which makes that staging real; until it ships in 0.0.6 the
published installer still refuses to run from an npx cache.
* docs: move the superseded pages into a Legacy section, out of the gallery
The six per-agent pages the Coding Agents plugin replaces — Claude Code, Codex,
Cursor CLI, Copilot CLI, opencode, Cline — move to a `legacy` category.
They keep their pages and their migration banners: people still run these
plugins and still arrive from old links, so removing the pages would break both.
What changes is where they are offered. The gallery is where someone comes to
CHOOSE an integration, and offering one we are actively migrating them off
points them at a dead end — so legacy entries are filtered out of it, including
the hero banner, whose hardcoded list still advertised Claude Code and now
advertises the plugin that replaced it.
In the sidebar they sit in a collapsed "Legacy" section at the end instead of
mixed in alphabetically, so the main list is only what we would recommend today.
Docusaurus expands that section automatically when you are on one of the pages.
Grouping keys off an explicit `harnessPreview` flag now: "no previewIds" used to
imply the coding-agent group, which the Legacy group would also have matched.
* blog: Per-User Memory for AI Products — Multi-Tenant Patterns
A patterns guide for SaaS/AI-product builders on isolated per-user memory: the
hard-boundary vs soft-partition decision (banks vs tags), reading across
private/org/global scopes without a cross-bank query, a CI cross-tenant
leakage test, GDPR deletion, and scaling to many tenants on one store.
Editorial deep-dive cover.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* blog(per-user-multi-tenant): swap cover to dark comparison-card template
Reuse the context-window-is-not-memory template (dark, teal-accent title +
comparison cards). Positive framing: "Every user gets their own bank" with
BANKS (isolate a tenant) + TAGS (partition a bank).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The previous cover read as a context-free "10 things to look for." New cover
keeps the editorial template but leads with the subject ("Evaluating / agent
memory") and moves the listicle framing into a "THE 10-POINT CHECKLIST"
eyebrow, so the topic is clear at a glance.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* blog: How to Actually Evaluate an Agent-Memory System
A buyer's-guide / evaluation-framework post: the write→store→manage→read
lifecycle, the dimensions that matter (retrieval beyond similarity, entity
resolution, conflict updates, freshness, test-time learning), the production
dimensions most guides skip (data ownership, PII/secret security, cost,
observability, multi-tenant scoping), how to read LongMemEval, and a
copy-paste checklist. Editorial deep-dive cover.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* blog: retitle to "The 10 Things to Look For", swap LongMemEval→BEAM
Reviewer feedback:
- Drop "(2026)" from the title (blog posts don't use a year; that's the
/articles convention).
- Retitle to the listicle framing "The 10 Things to Look For in an
Agent-Memory System"; number the dimensions table and checklist 1–10 so the
count is honest and consistent.
- Reframe the benchmark section around BEAM (10M-token tier) instead of
LongMemEval, kept loose — the takeaway is "build your own eval on your
domain." Remove LongMemEval-specific competitor scores.
- New editorial cover ("10 things / to look for", CHECKLIST tag).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* blog: drop unverified BEAM "next-best 40.6%" comparison
The agentmemorybenchmark.ai leaderboard only lists Hindsight at the 10M tier
(64.1%, verified). The 40.6% next-best figure isn't on that leaderboard, so
state only the verifiable number and leave the fuller comparison to the
beam-sota post.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: cover the reworked documents table in the 0.8.6 blog post
* docs: give the documents table its own section in the 0.8.6 blog post
* docs: add the documents table screencast to the 0.8.6 blog post
* docs: replace the 0.8.6 blog GIFs with 30fps MP4 video
* blog: Give GitHub Copilot CLI a memory of your codebase
Tutorial for hindsight-copilot-cli (published, v0.1.0): persistent memory
for GitHub Copilot CLI via hooks. Recall on sessionStart, retain on
agentStop/sessionEnd, subagents seeded with baseline project memory.
Grounded in the integration source; documents the once-per-session recall
limitation honestly.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* blog: co-brand Copilot cover with the official GitHub Copilot mark
Add the GitHub Copilot logo (top-left lockup + terminal title bar) so the
cover reads as a Copilot x Hindsight co-brand.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
* docs: changelog and blog post for v0.8.6
* docs: focus 0.8.6 blog post on new features
* docs: lead 0.8.6 blog with the entity timeline
* docs: use entity timeline gif in 0.8.6 blog post
* docs: drop embedded-engine bullet from 0.8.6 blog post
* chore(docs-skill): sync openapi version to 0.8.6
* blog: How to move your agent's memory off a vector database
Practical migration guide from Pinecone/Chroma to Hindsight: export the
text (not the vectors), map namespaces to banks, batch-retain, verify with
recall/reflect. Complements the existing "case against vector DBs" post
with the how-to. Grounded in the public SDK (create_bank, batch retain).
* blog: What people actually build with agent memory (use cases)
Overview post walking through the concrete patterns teams build on
Hindsight: coding agents, per-user products, support/account assistants,
voice, chat platforms, self-built framework agents, multi-agent shared
banks, and automations. One primitive (retain/recall/reflect over a
bank), scoped and surfaced differently.
* blog: recall vs reflect (the two ways to read agent memory)
Feature/decision piece contrasting Hindsight's two read operations:
recall (hybrid retrieval + rerank, no LLM, ranked facts, sub-second)
vs reflect (agentic loop with an LLM, hierarchical retrieval, synthesized
answer, response_schema, validated cited sources). Includes comparison
table, decision guide, and FAQ. Grounded in the recall/reflect engine
and API docs. Cover: recall vs reflect contrast panels.
* blog: use Inside retain() editorial theme for recall vs reflect cover
* blog: fact-check fixes to recall section
Adversarial verification against the recall engine found three
inaccuracies: recall runs 3 retrieval strategies always (semantic, BM25,
graph) with temporal conditional (not 4); no MMR/diversity pass is
implemented (docstring only); high budget defaults to 1000 not 600.
Softened 'local cross-encoder' since remote rerankers are configurable.
reflect claims all verified accurate.
* blog: fix API-doc link paths (/developer/api/... not /docs/...)
* docs: add TealTiger governance memory integration listing
Adds TealTiger to the integrations page as a community integration.
Governance-aware agent memory with importance-weighted retention.
Related: #2284
PyPI: https://pypi.org/project/tealtiger-hindsight/
* Delete hindsight-docs/docs-integrations/tealtiger.md
* Update TealTiger integration link to GitHub
* blog: persistent memory for Roo Code (task-based agent)
How-to for the Roo Code integration: one-command install that wires
Hindsight's MCP tools (recall/retain, auto-approved) plus a custom rules
file so Roo recalls context before each task and retains a summary after.
Covers project vs global scope, cloud/self-host, verification, cross-tool
bank sharing, and FAQ. Grounded in the integration doc + README; package
live on PyPI. Cover: Roo kangaroo mark + recall->task->retain loop.
* blog: rebuild Roo Code cover in iridescent-mesh template with Roo mark
* blog: drop MCP from Roo Code cover subtitle
* blog: Your 1M-Token Context Window Is Not Memory
Thought-leadership piece: a context window is working memory that resets
each session and degrades before it fills (lost-in-the-middle, Chroma
context rot), so a bigger window is not a memory system. Includes a
context-window-vs-memory comparison table and the one-question test.
Cited research linked; em-dash-free.
* blog: add Hindsight Cloud CTAs (embedded mid-article + Hindsight paragraph)
* blog: use Thinking Machines' Inkling as a Hindsight memory model (tutorial)
Clickbaity how-to: point Hindsight's internal LLM at Inkling via any
OpenAI-compatible endpoint (four env vars, NVIDIA free key). Includes
real test results: clean structured fact extraction, unprompted temporal
resolution (last week -> 2026-07-14), entity resolution, and a coherent
reflect, all out of the box. Honest caveats (not on leaderboard, 975B
hosted-only, latency; gpt-oss-20b still fastest for high-volume retain).
* blog: swap Inkling cover to Hermes split-duotone style with Thinking Machines wordmark
* blog: use Inkling's real brand graphic (ink blob) on the cover
* blog: name Thinking Machines in title and body (Inkling is Thinking Machines' model)
* blog: cover title now names Thinking Machines Lab
* blog: persistent memory for ZCode (Z.ai GLM coding agent)
Announcement/how-to for the ZCode integration: hooks-based (no MCP),
recall before each prompt + retain each turn, cross-tool shared bank with
Claude Code and Cursor, per-project isolation, cloud or self-hosted.
Grounded in the merged integration doc, README, and hook source. Cover:
emerald mesh + glassy tool panels with the ZCode mark.
* feat(zcode): add Hindsight long-term memory integration for ZCode
Adds a hooks-based, no-MCP integration for ZCode (Z.ai's GLM desktop
coding agent). ZCode embeds the Claude Code agent runtime and reads the
standard Claude Code hook schema from its own config namespace
(~/.zcode/cli/config.json), so `hindsight-zcode install` wires three
process hooks — SessionStart, UserPromptSubmit (recall), and Stop
(retain) — without touching the user's ~/.claude config and without an
MCP server.
Recall injects relevant memories as additionalContext before each
prompt; retain assembles each turn from the prompt (captured at
UserPromptSubmit) and the response (Stop payload) and stores it to
Hindsight. Verified end-to-end in ZCode 3.2.2: hooks fire, retain
persists to the cloud bank, and recall injects memory into the agent.
Includes the pip package + installer, hook scripts, tests, CI job,
release-integration wiring, changelog registration, docs page, and
gallery entry.
* feat(zcode): add self-serve marketplace + hooks-only plugin variant
Publishes the ZCode integration as a hooks-only Claude Code plugin
(hindsight-zcode) in the repo's plugin marketplace, so ZCode users can
install it via 'zcode plugins add-marketplace vectorize-io/hindsight'
without pip and without depending on Z.ai's marketplace.
The plugin reuses the pip package's hook scripts via CLAUDE_PLUGIN_ROOT
(no duplication) — settings.json resolves as a sibling of scripts/ in
both the pip and plugin layouts. Adds a plugin manifest, plugin-format
hooks.json (SessionStart/UserPromptSubmit/Stop — no SessionEnd),
marketplace entry, validation tests, and docs.
* fix(zcode): drop changelog link from docs page (page exists only after release)
The /changelog/integrations/zcode page is generated at release time, so
linking to it broke the Docusaurus build (build-docs + verify-generated-files).
Most unreleased integration pages omit this link; follow that convention.
* blog: The Fully Open Agent Memory Stack (Hermes + Hindsight)
Grounded technical piece: every layer of a Hermes + Hindsight stack is
open source and self-hostable (open-weights model via vLLM/llama.cpp,
MIT Hermes Agent, MIT Hindsight with local embeddings/reranker/LLM and
no external calls). Includes wiring, honest caveats (64K context,
auto-hook version gate, model license differences), and when it matters.
* blog: recommend gpt-oss-20b, add leaderboard + real M3 Max run
Address review: pivot the model recommendation from the Hermes model to
gpt-oss-20b (trendy, Apache-2.0, 128K, native tools, ~13GB) and explain
why a 'small' Kimi does not actually fit a laptop. Add a 'which model
for Hindsight' section citing the published model leaderboard (gpt-oss-20b
tops retain), and a 'does it fit on a laptop' section with real numbers
from running the full stack on an M3 Max (retain ~8s, recall ~0.6s).
Update cover model panel to gpt-oss-20b.
Add per-integration guides under hindsight-docs/guides/, each with a
hero cover image following the existing guide template.
33 setup guides ("Add <Tool> Memory with Hindsight") for integrations
that had none: aider, ag2, agent-framework, agno, autogen,
claude-agent-sdk, cline, composio, continue, cursor, cursor-cli, dify,
eliza, flowise, gemini-spark, github-copilot, google-adk, grok-build,
haystack, litellm, n8n, nemoclaw, obsidian, omo, openai-agents,
openhands, roo-code, superagent, vapi, windsurf, zapier, zcode, zed.
11 distinct-angle guides for integrations that already had a setup
guide (each cross-links the existing setup guide instead of repeating
install): agentcore (cross-session strategy), codex (per-repo bank
strategy), crewai (shared crew memory), langgraph (state vs long-term),
llamaindex (beyond RAG), opencode (team shared banks), paperclip
(shared across agents), pipecat (voice memory across calls), pydantic-ai
(type-safe async memory), smolagents (memory across runs), strands
(per-agent vs shared banks).
Each guide is grounded in the integration's docs-integrations page and
its README/source.
* blog: One Bank or Many? structuring agent memory
A field guide to bank strategy in Hindsight: a bank is a recall
boundary, when to use separate banks vs tags within one bank, the
dynamicBankId/granularity config, anti-patterns, and a decision
checklist. All claims grounded in the source.
* docs: add Omnigent integration page
Adds the Omnigent integration to the docs site:
- docs-integrations/omnigent.md — full integration guide (install, YAML
config, how runner-local dispatch works, bank scoping, config reference,
self-hosted, Remy example, harness table, further reading)
- src/data/integrations.json — registry entry (category: framework, official)
- static/img/icons/omnigent.png — placeholder icon (to be updated)
Tool names use the correct Omnigent source names: memory_recall/retain/reflect.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: fix broken links, real Omnigent logo, regen skill
- Remove changelog link (Omnigent has no released Hindsight package/changelog)
- Drop the not-yet-merged blog self-link; add Omnigent GitHub link instead
- Replace placeholder icon with the real Omnigent logo (from omnigent-ai/omnigent)
- Regenerate skills/hindsight-docs integration reference for omnigent
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs(omnigent): correct tool names to hindsight_* + fix harness table
- Revert memory_* -> hindsight_recall/retain/reflect: released omnigent v0.5.1
(and main, and the Remy example) use hindsight_* names. The memory_* rename
is on an unmerged branch (integration/hindsight-memory-tool), not released.
- Fix the harness table: Codex and OpenCode have official Hindsight integrations,
Pi has a community one (epimetheus); reframe around 'one central setup' rather
than implying those tools have no native support.
- Regenerate skills/hindsight-docs reference.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Blog: Omnigent as the universal Hindsight memory bridge
Tutorial-style post on adding persistent memory to Omnigent. Key angle:
Omnigent intercepts hindsight_recall/retain/reflect at the runner level, so
every wrapped harness (Claude Code, Codex, Cursor, Hermes, Pi) gets memory
through one setup, even those with no native Hindsight support. Covers
install, YAML spec, bank scoping, the Remy example, and cloud/self-hosted.
Grounded in omnigent-ai/omnigent source. Bridge-diagram cover.