2026-10-11 16:38 UTC

dmitry-markin claims his released Silta โ€” a self-hosted family assistant on Matrix running on Claude Code, in daily use by family and friends since 7 September 2026 โ€” stays the same assistant across context limits through supervisor-triggered, self-authored handoff-and-compaction summaries (memory notes plus assistant-written compaction in its own voice plus verbatim recent messages); adoption of this deliberate-handoff pattern by other long-running assistant builders, or demonstrated continuity failures in real use, would establish or refute self-authored compaction handoffs as a practical agent-memory pattern for long-lived harness sessions.

state: seedheat: lowuncertainty: mediumconvergesscott: mediumagent-memory agent-harnesses context-compactiondmitry-markin

What is this?

Silta is a self-hosted family AI assistant built on Claude Code that runs over Matrix (the chat protocol), released publicly via Show HN with a README claiming daily use by family and friends since 7 September 2026 and continuity of the same assistant persona across Claude Code context limits. Its distinctive mechanism, per the case's first-party artifacts, is supervisor-triggered handoffs that combine durable memory notes, a compaction summary the assistant writes in its own voice, and verbatim recent messages. The supplied web snippets contain no independent third-party coverage of Silta or Dmitry Markin, so the continuity claim rests on the first-party artifacts alone; what the snippets do establish is the surrounding field โ€” a crowded 2026 genre of Claude Code personal assistants converging on markdown-file memory (SOUL.md/USER.md + auto-written notes, five-layer memory stacks, Managed Agents with tool-backed memory stores) โ€” and two Anthropic platform moves that impinge directly on Silta's niche: 1M-token default context for Opus 4.6 in Claude Code ('far less compaction', auto-compaction now ~170K unless raised) and a new native Claude Code memory capability.

Why it matters to Scott

Silta independently implements Scott's own dev concept of agent-authored context compaction โ€” supervisor-triggered handoff combining an assistant-written checkpoint in its own voice, durable memory notes and a verbatim recent-message tail, i.e. the same composition as his pointer-backed transcript compression โ€” and extends it from task continuity to persona continuity for a long-lived family companion, giving dated third-party receipts for the Long-Running Agents / Handover Notes line and a field-tested composition to compare against ask's deliberately lossy --compact. Worth watching against the grounding's platform moves (1M-token default Opus context and native Claude Code memory), which bear directly on whether hand-rolled handoff patterns like this stay necessary.
dev:concept.agent-authored-context-compactionip:framework.long-running-agentsip:source.handover-notes-for-robots-ebookdev:concept.pointer-backed-transcript-compressionip:concept.barbell-supervisiondev:technology.claude-codedev:project.askdev:project.openclawradar:concept.context-compactionradar:concept.agent-memoryradar:concept.long-running-agentsradar:concept.persistent-agentsradar:concept.personal-agentsradar:concept.self-hostingradar:concept.claude-coderadar:docs-first-agent-continuity-protocolradar:futureos-context-compaction-recallradar:spomin-live-kv-compaction
queries asked of Scott's wikis
  • agent memory across context limits compaction handoff
  • self-authored summaries assistant voice continuity long-lived agent
  • supervisor-triggered compaction long-running harness session
  • agent-maintained wiki memory notes assistant-written
  • self-hosted Matrix bot personal agent
  • Claude Code native memory vs hand-rolled memory pattern

Measured heat

now 0 pts/hpeak 6 pts/hcomments 0/hpeers p14momentum: steady2 platformsage 244h
points/hour across evidence ยท reading as of 2026-10-12 02:59:37.977291+11:00 ยท deterministic, not a model opinion

How the heat travelled

10-01 12:24 (minted)โญ origin echo-reconstructed"Family AI assistant that runs on Claude Code and speaks Matrix. Keeps its memory and the thread of a conversation across context limits, so
dmitry-markin on github (echo) ยท attributed from hn.story.49920621 ยท published time unknown
โ€”
10-01 12:11first on hacker news ยท published ยท lag ?Show HN: Silta: family assistant on Matrix with continuity across context limits
dmitry-markin
โ€”
10-01 12:11amplified on hacker news ๐Ÿ‘‘hn.story.49920621
dmitry-markin
peak 4 ยท 0 comments ยท 98% of case engagement
10-01 12:21our radar first saw it ยท lag ?discovery anchor: hn.story.49920621โ€”
pace: p8 vs 1188 stories at the 168h mark (now 244h old) โ€” behind addom-local-coding-harness (0.5x)

Evidence (2) โ€” โญ canonical anchor

sourceobjectauthorscorecomments
๐ŸŸง hnShow HN: Silta: family assistant on Matrix with continuity across context limits
Retrieved article excerpt

Open article ยท Retrieved 2026-10-01T12:24:05.031232+00:00

# Silta

[crates.io](https://crates.io/crates/silta) [CI](https://github.com/dmitry-markin/silta/actions/workflows/ci.yml) [License Apache-2.0 OR MIT](https://github.com/dmitry-markin/silta#license)

Family AI assistant that runs on Claude Code and speaks Matrix. Keeps its memory and the thread of a conversation across context limits, so it always stays the same assistant.

[Chat in Element X](https://github.com/dmitry-markin/silta/blob/master/docs/images/chat-element-x.webp)
ย ย ย 
[PDF report](https://github.com/dmitry-markin/silta/blob/master/docs/images/pdf-report-phone.webp)

Silta is for the adults of a family: each person uses their own Claude account, and [Anthropic's consumer terms](https://www.anthropic.com/legal/consumer-terms) require users to be 18 or older and forbid sharing an account.

## Features

- Claude Code as the harness: one long-lived session per person, plus a shared session for the family rooms. Each person uses their own Claude subscription (via `claude setup-token`) or Anthropic API key.
- Remembers people, tasks, and conversation state across context limits and restarts (see [Context compaction and continuity](https://github.com/dmitry-markin/silta#context-compaction-and-continuity)).
- Direct & group Matrix rooms with read receipts, typing indicators, reactions, attachments, quoting, and threads.
- Web search & research, with results delivered as PDFs (including phone-sized rendering).
- Periodic & scheduled tasks.

## Security

- Claude Code's bubblewrap sandbox to protect the API token and the harness's own state from the agent. Outbound network requests go through a filtering proxy (pass-through by default), and Write/Edit deny rules keep the agent out of the harness configuration.
- A separate Linux user per session with systemd hardening isolates sessions from the VM and from each other. User namespaces are, unfortunately, allowed for the bubblewrap sandbox to work.
- Designed to run in a dedicated VM as a natural security boundary from the host.

## Privacy

Everything in the agent's context is sent to the model provider and is retained under its terms. What reaches the context, and what stays on the VM:

- Matrix IDs of the users and of the assistant are not intentionally forwarded to the agent (user names from the config are used instead to identify people), but can reach the context through side channels. Mentions in the rooms and error messages from Matrix SDK returned as tool call errors might carry real user IDs.
- The agent sees real room IDs, including the homeserver's server name for rooms older than version 12. The server's name and URL might still reach the context via tool call errors coming from Matrix SDK.
- Messages are decrypted by `siltad`. Claude Code keeps the full session transcript, the memory notes and downloaded attachments unencrypted on the VM's disk.
- No user or assistant messages reach the journal: only the sizes of messages and attachments are logged, never their content or filenames.

## Architecture overview

The component responsible for Matrix communications is `siltad`. It is the assistant's Matrix device: it logs into the assistant's account and holds end-to-end encryption keys for the rooms it joins.

User messages are delivered by `siltad` over a Unix socket to `silta-claude`, the Claude Code channel plugin that injects the messages into the session and provides MCP tools to the agent to interact with Matrix rooms.

Every Claude Code instance is run by `silta-session`, a session supervisor that manages the Claude Code session's lifecycle. There is one supervisor and session per person and one for the shared rooms.

```
Matrix clients โ—€โ”€โ”€โ”€โ”€โ”€โ–ถ Matrix homeserver
                               โ–ฒ
                               โ”‚  Matrix client-server API, E2EE
                               โ–ผ
                โ”Œโ”€ siltad โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ”‚ the assistant's Matrix     โ”‚
                โ”‚ device: login, keys, rooms โ”‚
                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                      โ–ฒ               โ–ฒ
                      โ”‚               โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   Unix sockets
                      โ”‚                             โ”‚
     โ”Œโ”€ silta-session โ”ผ Alice โ”    โ”Œโ”€ silta-session โ”ผ hub โ”€โ”€โ”  One supervisor per
     โ”‚ โ”Œโ”€ Claude Code โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”‚    โ”‚ โ”Œโ”€ Claude Code โ–ผโ”€โ”€โ”€โ”€โ”€โ” โ”‚  person and one for
     โ”‚ โ”‚   silta-claude     โ”‚ โ”‚    โ”‚ โ”‚   silta-claude     โ”‚ โ”‚  the shared rooms.
     โ”‚ โ”‚   channel plugin   โ”‚ โ”‚    โ”‚ โ”‚   channel plugin   โ”‚ โ”‚
     โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚    โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
     โ”‚ memory, workspace      โ”‚    โ”‚ memory, workspace      โ”‚
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```

## Context compaction and continuity

One of the goals of the project is delivering interaction with the assistant without noticeable session edges. This is implemented using three layers:

1. The assistant maintains memory notes and project files that are persisted across session compactions.
2. Once the session's context grows past the threshold (300k tokens by default) and no user messages have arrived for 4 hours (by default), the supervisor sends the agent a host line asking it to prepare for compaction: update the memory notes and write a `handoff.md` note about work in progress.
3. Once the agent ends its turn with the handoff written, the supervisor triggers a compaction designed for an assistant's session: who the assistant and the people are, the distant past as a high-level overview (memory and project files cover the gaps), a more detailed summary of recent work, and the last 100 to 120 messages verbatim. The summary is written by the assistant itself, in its own voice, not by a generic prompt.

This allows the assistant to continue from the point where it was before the compaction, fetching additional facts from memory as it needs them.

## Non-goals

1. Implementing yet another harness.
2. Giving the assistant access to personal services and files on the user's main PC. The idea is that it is a conversation partner that helps with everyday questions and decisions, conducts web research, and can monitor or research something on schedule.
3. Supporting other messengers or model providers. Silta speaks Matrix and runs on Claude Code. Both are design choices, not gaps.

## Project status

Used daily by the author, his family, and friends since 7 September 2026. Built with Claude Code and the assistant itself. Expect things to break (and get fixed). Please report bugs and propose features in [issues](https://github.com/dmitry-markin/silta/issues/new/choose), and ask questions in [Discussions](https://github.com/dmitry-markin/silta/discussions/categories/q-a).

The Claude Code version tested to work is 2.1.283. Newer versions may break the integration: check them first with `silta-contract-check` (see [Updating Claude Code: Installing an untested version](https://github.com/dmitry-markin/silta/blob/master/docs/deployment.md#installing-an-untested-version)) before using them with real sessions.

## Known issues

1. Claude Code evolves fast, breaking the integration. The contract checker catches a break before an update reaches the sessions, but only for what it checks.
2. A running `Monitor` task blocks the graceful stop, so the supervisor waits out its timeout and restarts the session before compaction. Session continuity is unaffected.
3. Support for third-party gateways (like OpenRouter) is implemented, but effectively dormant until Anthropic extends the Claude Code channels beta to them.
4. Some sites block web fetch requests coming from datacenter IPs, making the research less efficient. Such sites are in the minority, and this can be worked around by using a residential IP for the network egress of the VM or session's Linux user.
5. If a request is refused by the model provider's safety classifiers (relevant for cyber/bio topics), the session stays on the original model and will likely keep refusing, since the classifiers judge the whole context. It does not fall back to a weaker model, which would change the assistant without anyone noticing. Follow [the manual recovery procedure](https://github.com/dmitry-markin/silta/blob/master/docs/deployment.md#recovering-a-session-if-the-request-was-flagged) to resume such a session.

## Deployment

See [docs/deployment.md](https://github.com/dmitry-markin/silta/blob/master/docs/deployment.md).

## License

Licensed under either the Apache License 2.0 or the MIT license, at your option (`Apache-2.0 OR MIT`; see [LICENSE-APACHE](https://github.com/dmitry-markin/silta/blob/master/LICENSE-APACHE) and [LICENSE-MIT](https://github.com/dmitry-markin/silta/blob/master/LICENSE-MIT)).
Contributions are accepted under the same terms, without additional terms or conditions.
dmitry-markin40
๐ŸŸง echo.github โญ"Family AI assistant that runs on Claude Code and speaks Matrix. Keeps its memory and the thread of a conversation across context limits, sodmitry-markinโ€”โ€”

Interpretation history

Decision trace