Martian-Engineering/lossless-clawPublic

Lossless Claw — LCM (Lossless Context Management) plugin for OpenClaw

AI summary: A Lossless Context Management plugin for OpenClaw that preserves entire conversation histories using a DAG.

Stars
4.9K
+-1 today
Forks
453
Watchers
28
Open issues
179
Open PRs
65
Contributors
~100
Commits
652
Branches
207

TypeScriptMITCreated Feb 18, 2026Last push 5d agoLatest release v1.1.0+5 stars this week+8 this month

Quick answers

What is lossless-claw?
A Lossless Context Management plugin for OpenClaw that preserves entire conversation histories using a DAG.
What does lossless-claw do?
Lossless Claw fundamentally revolutionizes how the OpenClaw agent manages long-running conversations by entirely replacing standard, destructive sliding-window truncation. It implements a sophisticated Lossless Context Management (LCM) system that meticulously persists every single raw message in a local SQLite database. As conversations grow, it utilizes an LLM to proactively summarize older chunks, intelligently condensing these summaries into a hierarchical Directed Acyclic Graph (DAG). During active execution, it dynamically assembles the immediate context window by fusing these high-level historical nodes with the most recent raw messages, guaranteeing that critical details are never permanently lost.
Who is lossless-claw for?
Lossless Claw is intended for power users and developers who rely on OpenClaw for complex, long-running projects requiring deep historical memory. It requires an existing installation of OpenClaw and basic familiarity with CLI configurations.
How do I get started with lossless-claw?
Please refer to the OpenClaw plugin documentation to properly install and configure the LCM tools.
How popular is lossless-claw on GitHub?
Martian-Engineering/lossless-claw has 4,903 stars and 453 forks on GitHub, and gained 5 stars in the last 7 days.
What license does lossless-claw use?
Martian-Engineering/lossless-claw is released under the MIT license.

Star history

since Jul 28, 2026
02K4KJul 2026Aug 2026Sep 2026Oct 2026
4.9K stars as of Oct 4, 2026. Measured daily since Jul 28, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
SepOctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 10 commits2026-02-19: 18 commits2026-02-20: 27 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 6 commits2026-02-24: 8 commits2026-02-25: 1 commit2026-02-26: 5 commits2026-02-27: 3 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 2 commits2026-03-07: 3 commits2026-03-08: 14 commits2026-03-09: 7 commits2026-03-10: 10 commits2026-03-11: 1 commit2026-03-12: 2 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 1 commit2026-03-16: 3 commits2026-03-17: 12 commits2026-03-18: 6 commits2026-03-19: 2 commits2026-03-20: 3 commits2026-03-21: 3 commits2026-03-22: 3 commits2026-03-23: 4 commits2026-03-24: 1 commit2026-03-25: 5 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 1 commit2026-03-29: 0 commits2026-03-30: 4 commits2026-03-31: 7 commits2026-04-01: 1 commit2026-04-02: 2 commits2026-04-03: 14 commits2026-04-04: 6 commits2026-04-05: 7 commits2026-04-06: 3 commits2026-04-07: 11 commits2026-04-08: 4 commits2026-04-09: 10 commits2026-04-10: 8 commits2026-04-11: 13 commits2026-04-12: 2 commits2026-04-13: 9 commits2026-04-14: 9 commits2026-04-15: 2 commits2026-04-16: 3 commits2026-04-17: 2 commits2026-04-18: 4 commits2026-04-19: 3 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 1 commit2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 4 commits2026-04-28: 10 commits2026-04-29: 1 commit2026-04-30: 1 commit2026-05-01: 1 commit2026-05-02: 1 commit2026-05-03: 7 commits2026-05-04: 4 commits2026-05-05: 1 commit2026-05-06: 1 commit2026-05-07: 1 commit2026-05-08: 4 commits2026-05-09: 1 commit2026-05-10: 1 commit2026-05-11: 11 commits2026-05-12: 1 commit2026-05-13: 1 commit2026-05-14: 1 commit2026-05-15: 2 commits2026-05-16: 2 commits2026-05-17: 0 commits2026-05-18: 10 commits2026-05-19: 5 commits2026-05-20: 4 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 3 commits2026-05-27: 1 commit2026-05-28: 1 commit2026-05-29: 6 commits2026-05-30: 1 commit2026-05-31: 18 commits2026-06-01: 7 commits2026-06-02: 2 commits2026-06-03: 4 commits2026-06-04: 3 commits2026-06-05: 7 commits2026-06-06: 4 commits2026-06-07: 8 commits2026-06-08: 2 commits2026-06-09: 0 commits2026-06-10: 9 commits2026-06-11: 8 commits2026-06-12: 1 commit2026-06-13: 0 commits2026-06-14: 6 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 6 commits2026-06-18: 1 commit2026-06-19: 1 commit2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 5 commits2026-06-26: 2 commits2026-06-27: 2 commits2026-06-28: 0 commits2026-06-29: 2 commits2026-06-30: 4 commits2026-07-01: 2 commits2026-07-02: 3 commits2026-07-03: 2 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 4 commits2026-07-08: 2 commits2026-07-09: 2 commits2026-07-10: 0 commits2026-07-11: 4 commits2026-07-12: 8 commits2026-07-13: 2 commits2026-07-14: 0 commits2026-07-15: 8 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 4 commits2026-07-19: 0 commits2026-07-20: 3 commits2026-07-21: 2 commits2026-07-22: 1 commit2026-07-23: 0 commits2026-07-24: 1 commit2026-07-25: 4 commits2026-07-26: 1 commit2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 8 commits2026-07-30: 2 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 1 commit2026-08-04: 5 commits2026-08-05: 0 commits2026-08-06: 2 commits2026-08-07: 3 commits2026-08-08: 2 commits2026-08-09: 0 commits2026-08-10: 6 commits2026-08-11: 2 commits2026-08-12: 0 commits2026-08-13: 0 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 5 commits2026-08-18: 10 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 1 commit2026-08-22: 4 commits2026-08-23: 0 commits2026-08-24: 7 commits2026-08-25: 4 commits2026-08-26: 0 commits2026-08-27: 12 commits2026-08-28: 3 commits2026-08-29: 0 commits2026-08-30: 1 commit2026-08-31: 1 commit2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 0 commits2026-09-09: 0 commits2026-09-10: 1 commit2026-09-11: 2 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 2 commits2026-09-15: 3 commits2026-09-16: 0 commits2026-09-17: 1 commit2026-09-18: 5 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 2 commits2026-09-23: 1 commit2026-09-24: 3 commits2026-09-25: 0 commits2026-09-26: 0 commits
627 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Very active

    627 commits in 52 weeks

  • Community-driven

    ~100 contributors

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

What lossless-claw does

Lossless Claw fundamentally revolutionizes how the OpenClaw agent manages long-running conversations by entirely replacing standard, destructive sliding-window truncation. It implements a sophisticated Lossless Context Management (LCM) system that meticulously persists every single raw message in a local SQLite database. As conversations grow, it utilizes an LLM to proactively summarize older chunks, intelligently condensing these summaries into a hierarchical Directed Acyclic Graph (DAG). During active execution, it dynamically assembles the immediate context window by fusing these high-level historical nodes with the most recent raw messages, guaranteeing that critical details are never permanently lost.

Lossless Claw is intended for power users and developers who rely on OpenClaw for complex, long-running projects requiring deep historical memory. It requires an existing installation of OpenClaw and basic familiarity with CLI configurations.

  • DAG-based summarization: Condenses accumulating conversational summaries into a directed acyclic graph to maintain deep context within strict token limits.
  • SQLite persistence: Stores every raw message locally to ensure that original details can always be recovered and referenced by the agent.
  • Dynamic context assembly: Intelligently combines high-level graph nodes with immediate conversation history specifically tailored for each new query.
  • Agentic recall tools: Equips the underlying agent with specific commands (lcm_grep, lcm_describe) to actively search and expand compacted historical data.
  • Shell CLI management: Provides a dedicated CLI interface to safely inspect the database, review summaries, and configure parameters without breaking the UI.

Where teams use it

Infinite Context Conversations

Developers use the plugin to maintain weeks-long architectural discussions with the agent without ever worrying about it 'forgetting' decisions made on day one.

Granular History Recovery

When an agent needs a specific, forgotten API key from days ago, it uses the lcm_grep tool to drill down through the DAG and recover the exact raw message.

Token-Optimized Execution

Power users leverage the plugin to keep their API costs low, as the agent only sends highly condensed DAG nodes rather than the full raw history to the LLM.

Conversation Debugging

Researchers use the included CLI to inspect the generated summary graph, verifying exactly how the LLM is interpreting and condensing long-term context.

Getting started: Please refer to the OpenClaw plugin documentation to properly install and configure the LCM tools.

README

main branch

lossless-claw

Lossless Context Management plugin for OpenClaw, based on the LCM paper from Voltropy. Replaces OpenClaw's built-in sliding-window compaction with a DAG-based summarization system that preserves every message while keeping active context within model token limits.

Table of contents

What it does

Two ways to learn: read the below, or check out this super cool animated visualization.

When a conversation grows beyond the model's context window, OpenClaw (just like all of the other agents) normally truncates older messages. LCM instead:

  1. Persists every message in a SQLite database, organized by conversation
  2. Summarizes chunks of older messages into summaries using your configured LLM
  3. Condenses summaries into higher-level nodes as they accumulate, forming a DAG (directed acyclic graph)
  4. Assembles context each turn by combining summaries + recent raw messages
  5. Provides tools (lcm_grep, lcm_describe, lcm_expand) so agents can search and recall details from compacted history

Nothing is lost. Raw messages stay in the database. Summaries link back to their source messages. Agents can drill into any summary to recover the original detail.

It feels like talking to an agent that never forgets. Because it doesn't. In normal operation, you'll never need to think about compaction again.

Commands And Skill

The package installs an agent-oriented lcm shell CLI and includes a bundled lossless-claw skill plus plugin commands for supported OpenClaw chat/native command providers.

The shell CLI reads lcm.db without modifying conversation data. Its only write command sets one validated Lossless config value in openclaw.json:

lcm status
lcm conversations show --session-key 'agent:main:example'
lcm messages tail --conversation-id 42
lcm summaries list --conversation-id 42 --depth 0 --recency 7d
lcm config get freshTailCount
lcm config set freshTailCount 96

JSON is the default output. List commands use bounded keyset pagination. See Lossless Claw CLI for commands, filters, path precedence, output fields, config-write safety, and exit codes.

The native OpenClaw command surface provides in-session operations:

  • /lossless shows version, enablement/selection state, DB path and size, summary counts, and summary-health status
  • /lossless backup creates a timestamped backup of the current LCM SQLite database
  • /lossless doctor scans for broken or truncated summaries
  • /lossless doctor maintenance reports active actionable compaction debt separately from inactive historical debt, grouped by reason, without writing
  • /lossless doctor apply maintenance <conversation-id> confirm-inactive administratively closes one eligible inactive debt row after creating a SQLite backup
  • /lossless doctor apply repairs broken summaries in the current conversation after the normal safety preflight
  • /lossless doctor apply <conversation-id> confirm-offline repairs a specific conversation after its active channel path has been paused or moved away; targeted repair is restricted to authorized OpenClaw command senders and always requires the explicit offline confirmation
  • /lossless doctor clean shows read-only high-confidence junk diagnostics for archived subagents and cron sessions under every configured OpenClaw agent id, plus NULL-key orphaned subagent runs
  • /lossless status shows plugin, conversation, and maintenance state including deferred compaction debt
  • /lcm is the shorter alias for /lossless

Supported native command examples:

  • /lossless
  • /lossless backup
  • /lossless doctor
  • /lossless doctor maintenance
  • /lossless doctor apply maintenance 42 confirm-inactive
  • /lossless doctor apply 42 confirm-offline
  • /lossless doctor clean
  • /lcm

The package does not register these OpenClaw root subcommands:

  • openclaw lossless
  • openclaw lcm
  • openclaw /lossless
  • openclaw /lcm

The bundled skill focuses on configuration, diagnostics, architecture, and recall-tool usage. Its reference set lives under skills/lossless-claw/references/.

Deferred compaction debt on an active conversation is actionable maintenance pressure. Debt on an archived or otherwise inactive conversation is historical: normal stable-session maintenance cannot select that conversation, so /lossless doctor maintenance reports it separately and shows a bounded set of recent examples. Closing historical debt requires the exact confirm-inactive token and a successful file-backed SQLite backup. The close records an operator-ignored resolution on the maintenance row only; it does not run compaction and does not delete or rewrite conversations, messages, summaries, or context items. If that conversation later receives a genuine new debt request, the prior administrative resolution is cleared and the row becomes pending again.

Programmatic control

Lossless-claw also exposes an optional host-facing context-engine control contract for OpenClaw gateways that support context-engine capabilities and control dispatch. The contract is intentionally smaller than the native slash command surface:

  • status returns whether an LCM conversation is active and the current stored message count.
  • doctor returns a bounded, sanitized warning list for summary-health issues.

Programmatic control never returns transcript text, local database paths, backup paths, credentials, provider debug, or shell output.

This surface is capability-gated by the OpenClaw host. At the time of this change there is not yet a stable OpenClaw release with the required context-engine control endpoints; downstream users should treat it as unavailable unless their host advertises the matching capability, for example through the pending openclaw/openclaw#98060 contract or an equivalent downstream gateway.

Session Migration CLI

lossless-claw-migrate-sessions is a one-time shell CLI for backfilling OpenClaw JSONL session files into lcm.db after lossless-claw was disabled, missing, or installed after sessions already existed. It is not a background replay loop and it does not run summarization.

Run it in dry-run mode first:

npx --package @martian-engineering/lossless-claw@latest lossless-claw-migrate-sessions --state-dir ~/.openclaw

Apply the import only after reviewing the dry-run output:

npx --package @martian-engineering/lossless-claw@latest lossless-claw-migrate-sessions --state-dir ~/.openclaw --apply

The command defaults to ${OPENCLAW_STATE_DIR:-~/.openclaw} and ${OPENCLAW_STATE_DIR:-~/.openclaw}/lcm.db. --apply creates a timestamped SQLite backup before writing when the database already exists. Use --file <path> or repeatable --sessions-dir <path> for targeted imports, --since <iso-date> or --limit <n> to narrow a batch, and --json for machine-readable output.

Quick start

Prerequisites

  • OpenClaw with plugin context engine support
  • Node.js 22+
  • An LLM provider configured in OpenClaw (used for summarization)

Compatibility: lossless-claw requires OpenClaw 2026.9.2 or newer, the first stable release with native plugin session panels. The Context explorer requires Settings → Labs → Custom plugin UI. If you cannot upgrade, keep your earlier compatible Lossless release and use lcm-tui to inspect context. See Context explorer.

On OpenClaw hosts that advertise the durable context-engine turn contract, LosslessClaw declares current-turn transcript fencing and commits each accepted turn through an atomic idempotency ledger. Older supported hosts continue to use the existing afterTurn compatibility path.

Upgrade compatibility: Lossless Claw 1.x accepts transcriptGcEnabled and autoRotateSessionFiles so 0.15 configs continue to load. It ignores both settings and warns at startup. Remove them after upgrading; OpenClaw owns active transcript storage and session-file rotation.

Install the plugin

Lossless Claw 1.0 stable releases use npm's latest channel. The beta channel remains available for prerelease testing.

Use OpenClaw's plugin installer (recommended):

openclaw plugins install @martian-engineering/lossless-claw@latest

If you're running from a local OpenClaw checkout, use:

pnpm openclaw plugins install @martian-engineering/lossless-claw@latest

Use exact versions only for rollback or reproducible canary testing. OpenClaw records an exact install spec such as @martian-engineering/[email protected] as a pinned update track, so OpenClaw plugin update sync will keep that version until you move back to the stable track:

openclaw plugins update @martian-engineering/lossless-claw@latest

For local plugin development, build your working copy first, then link it instead of copying files:

cd /path/to/lossless-claw
pnpm build

openclaw plugins install --link /path/to/lossless-claw
# or from a local OpenClaw checkout:
# pnpm openclaw plugins install --link /path/to/lossless-claw

Re-run pnpm build after local source changes so the linked plugin's dist/ output stays current.

The install command records the plugin, enables it, and applies compatible slot selection (including contextEngine when applicable).

Note: If your OpenClaw config uses plugins.allow, allowlist the plugin id lossless-claw plus any other active plugins you rely on. Do not add command tokens or aliases like lossless or /lcm to plugins.allow; that setting only accepts plugin ids. In some setups, narrowing the allowlist can prevent plugin-backed integrations from loading, even if lossless-claw itself is installed correctly. Restart the gateway after plugin config changes.

Configure OpenClaw

Ensure the context engine slot points at lossless-claw and explicitly allow its conversation prompt hook:

{
  "plugins": {
    "slots": {
      "contextEngine": "lossless-claw"
    },
    "entries": {
      "lossless-claw": {
        "hooks": {
          "allowConversationAccess": true
        }
      }
    }
  }
}

OpenClaw builds that protect before_prompt_build as a conversation-access hook require this grant. Without it, the context engine still loads, but OpenClaw blocks Lossless's static recall-policy prompt hook and logs the missing setting. The grant belongs beside config, not inside it.

Restart OpenClaw after configuration changes.

Configuration

LCM is configured through a combination of plugin config and environment variables. Environment variables take precedence for backward compatibility.

Plugin config

Add a lossless-claw entry under plugins.entries in your OpenClaw config:

{
  "plugins": {
    "entries": {
      "lossless-claw": {
        "enabled": true,
        "hooks": {
          "allowConversationAccess": true
        },
        "llm": {
          "allowModelOverride": true,
          "allowedModels": ["openai/gpt-5.4-mini"]
        },
        "config": {
          "freshTailCount": 64,
          "leafChunkTokens": 80000,
          "newSessionRetainDepth": 2,
          "contextThreshold": 0.75,
          "contextThresholdOverrides": [
            {
              "name": "large-context-models",
              "match": { "modelContextWindowMin": 900000 },
              "contextThreshold": 0.15
            },
            {
              "name": "telegram-sessions",
              "match": { "sessionPattern": "agent:*:telegram:**" },
              "contextThreshold": 0.3
            }
          ],
          "incrementalMaxDepth": 1,
          "cacheAwareCompaction": {
            "enabled": true,
            "cacheTTLSeconds": 300
          },
          "ignoreSessionPatterns": [
            "agent:*:cron:**",
            "agent:*:**:active-memory:**",
            "agent:*:dreaming-narrative-**"
          ],
          "proactiveThresholdCompactionMode": "deferred",
          "summaryModel": "openai/gpt-5.4-mini",
          "expansionModel": "openai/gpt-5.4-mini",
          "delegationTimeoutMs": 300000,
          "summaryTimeoutMs": 60000,
          "summaryCallWindowMs": 600000,
          "summaryMaxCallsPerWindow": 24,
          "summarySpendBackoffMs": 1800000
        }
      }
    }
  }
}

The ignoreSessionPatterns entries in this example are storage exclusions. Matching cron, active-memory, and OpenClaw memory-core dreaming narrative sessions do not create LCM conversation rows or store messages in LCM.

leafChunkTokens controls how many source tokens can accumulate in a leaf compaction chunk before summarization is triggered. The default is 20000, but quota-limited summary providers may benefit from a larger value to reduce compaction frequency. summaryModel and summaryProvider let you request a cheaper or faster compaction model through OpenClaw's api.runtime.llm.complete capability; OpenClaw still owns provider dispatch and auth. Explicit summary model requests require llm.allowModelOverride and matching llm.allowedModels policy entries for lossless-claw. expansionModel does the same for lcm_expand_query sub-agent calls (drilling into summaries to recover detail). delegationTimeoutMs controls how long lcm_expand_query waits for that delegated sub-agent to finish before returning a timeout error; it defaults to 120000 (120s). summaryTimeoutMs controls the per-call timeout for model-backed LCM summarization; it defaults to 60000 (60s). summaryMaxCallsPerWindow, summaryCallWindowMs, and summarySpendBackoffMs bound repeated non-auth summarization spend per session. When unset, the model settings still fall back to OpenClaw's configured default model/provider. See Expansion model override requirements for the required subagent trust policy when using expansionModel.

Environment variables

Variable Default Description
LCM_ENABLED true Enable/disable the plugin
LCM_DATABASE_PATH ~/.openclaw/lcm.db Path to the SQLite database
LCM_IGNORE_SESSION_PATTERNS "" Comma-separated glob patterns for session keys to exclude from LCM storage
LCM_STATELESS_SESSION_PATTERNS "" Comma-separated glob patterns for session keys that may read from LCM but never write to it
LCM_SKIP_STATELESS_SESSIONS true Enable stateless-session write skipping for matching session keys
LCM_CONTEXT_THRESHOLD 0.75 Fraction of context window that triggers compaction (0.0–1.0)
LCM_FRESH_TAIL_COUNT 64 Number of recent messages protected from compaction
LCM_NEW_SESSION_RETAIN_DEPTH 2 Context retained after /new (-1 keeps all context, 2 keeps d2+)
LCM_LEAF_MIN_FANOUT 8 Minimum raw messages per leaf summary
LCM_CONDENSED_MIN_FANOUT 4 Minimum summaries per condensed node
LCM_CONDENSED_MIN_FANOUT_HARD 2 Relaxed fanout for forced compaction sweeps
LCM_INCREMENTAL_MAX_DEPTH 1 How deep incremental compaction goes (0 = leaf only, 1 = one condensed pass, -1 = unlimited)
LCM_LEAF_CHUNK_TOKENS 20000 Max source tokens per leaf compaction chunk
LCM_LEAF_TARGET_TOKENS 2400 Target token count for leaf summaries
LCM_CONDENSED_TARGET_TOKENS 2000 Target token count for condensed summaries
LCM_MAX_EXPAND_TOKENS 4000 Token cap for sub-agent expansion queries
LCM_LARGE_FILE_TOKEN_THRESHOLD 25000 File blocks above this size are intercepted and stored separately
LCM_LARGE_FILE_SUMMARY_PROVIDER "" Provider override for large-file summarization
LCM_LARGE_FILE_SUMMARY_MODEL "" Model override for large-file summarization
LCM_SUMMARY_MODEL "" Model override for compaction summarization; falls back to OpenClaw's default model when unset
LCM_SUMMARY_PROVIDER "" Provider override for compaction summarization; falls back to OPENCLAW_PROVIDER or the provider embedded in the model ref
LCM_SUMMARY_BASE_URL (from OpenClaw / provider default) Base URL override for summarization API calls
LCM_EXPANSION_MODEL (from OpenClaw) Model override for lcm_expand_query sub-agent (e.g. openai/gpt-5.4-mini)
LCM_EXPANSION_PROVIDER (from OpenClaw) Provider override for lcm_expand_query sub-agent
LCM_DELEGATION_TIMEOUT_MS 120000 Max time to wait for delegated lcm_expand_query sub-agent completion
LCM_SUMMARY_TIMEOUT_MS 60000 Max time to wait for a single model-backed LCM summarizer call
LCM_SUMMARY_CALL_WINDOW_MS 600000 Rolling window used by the per-session summarization spend guard
LCM_SUMMARY_MAX_CALLS_PER_WINDOW 24 Max model-backed summarization calls per session/window before spend backoff opens
LCM_SUMMARY_SPEND_BACKOFF_MS 1800000 Cooldown after the summarization spend guard opens
LCM_PRUNE_HEARTBEAT_OK false Retroactively delete HEARTBEAT_OK turn cycles from LCM storage
LCM_PROACTIVE_THRESHOLD_COMPACTION_MODE deferred Choose whether proactive threshold compaction is deferred into maintenance debt or kept inline for legacy behavior
LCM_CACHE_TTL_SECONDS 300 Cache TTL used by cache-aware deferred compaction when provider/runtime telemetry does not supply a more specific retention window

Deferred proactive compaction is also the default. Set proactiveThresholdCompactionMode or LCM_PROACTIVE_THRESHOLD_COMPACTION_MODE to inline only if you need legacy foreground compaction behavior. In deferred mode, lossless-claw records one coalesced prompt-mutating debt item after the turn, leaves background maintain() to process only non-prompt-mutating work while Anthropic cache is still hot, and then consumes that debt pre-assembly once the cache is cold or the prompt is approaching overflow.

Expansion model override requirements

If you want lcm_expand_query to run on a dedicated model via expansionModel or LCM_EXPANSION_MODEL, OpenClaw must explicitly trust the plugin to request sub-agent model overrides.

For most setups, openai/gpt-5.4-mini is a better starting point than Anthropic Haiku because it is cheap, fast, and does not depend on Anthropic quota remaining.

Add a subagent policy under plugins.entries.lossless-claw and allowlist the canonical provider/model target you want the plugin to use:

{
  "models": {
    "openai/gpt-4.1-mini": {}
  },
  "plugins": {
    "entries": {
      "lossless-claw": {
        "enabled": true,
        "subagent": {
          "allowModelOverride": true,
          "allowedModels": ["openai/gpt-4.1-mini"]
        },
        "config": {
          "expansionModel": "openai/gpt-4.1-mini"
        }
      }
    }
  }
}
  • subagent.allowModelOverride is required for OpenClaw to honor plugin-requested per-run provider/model overrides.
  • subagent.allowedModels is optional but recommended. Use "*" only if you intentionally want to trust any target model.
  • The chosen expansion target must also be available in OpenClaw's normal model catalog. If it is not already configured elsewhere, add it under the top-level models map as shown above.
  • If you prefer splitting provider and model, set config.expansionProvider and use a bare config.expansionModel.
  • openclaw doctor --fix can add the required subagent policy for a configured expansionModel. If a host still rejects a stale or unavailable override, lcm_expand_query retries once without the override so recall does not fail hard.

Plugin config equivalents:

  • ignoreSessionPatterns
  • statelessSessionPatterns
  • skipStatelessSessions
  • newSessionRetainDepth
  • summaryModel
  • summaryProvider
  • delegationTimeoutMs
  • summaryTimeoutMs

Environment variables still win over plugin config when both are set.

Summary model priority

For compaction summarization, lossless-claw resolves the model in this order:

  1. LCM_SUMMARY_MODEL / LCM_SUMMARY_PROVIDER
  2. Plugin config summaryModel / summaryProvider
  3. OpenClaw's default compaction model/provider
  4. Runtime/session model/provider hints from OpenClaw

If summaryModel already includes a provider prefix such as anthropic/claude-sonnet-4-20250514, summaryProvider is ignored for that choice. Otherwise, the provider falls back to the matching override, then OPENCLAW_PROVIDER, then the provider inferred by the caller.

Summary calls are dispatched through OpenClaw's runtime LLM layer, so auth profiles, OAuth refresh, API keys, base URLs, and provider-specific request preparation remain host-owned. Run openclaw doctor --fix after adding explicit summary model overrides if you want OpenClaw to add the matching plugins.entries.lossless-claw.llm policy.

Recommended starting configuration

LCM_FRESH_TAIL_COUNT=64
LCM_LEAF_CHUNK_TOKENS=20000
LCM_INCREMENTAL_MAX_DEPTH=1
LCM_CONTEXT_THRESHOLD=0.75
LCM_SUMMARY_MODEL=openai/gpt-5.4-mini
LCM_EXPANSION_MODEL=openai/gpt-5.4-mini
  • freshTailCount=64 protects the last 64 messages from compaction, expanding through the newest user when needed so its assistant/tool suffix cannot be separated from the active instruction.
  • leafChunkTokens=20000 limits how large each leaf compaction chunk can grow before LCM summarizes it. Increase this when your summary provider is quota-limited and frequent leaf compactions are exhausting that quota.
  • incrementalMaxDepth=1 runs one condensed pass after each leaf compaction by default. Set to 0 for leaf-only behavior, a larger positive integer for a deeper cap, or -1 for unlimited cascading.
  • contextThreshold=0.75 triggers compaction when context reaches 75% of the model's window, leaving headroom for the model's response.
  • contextThresholdOverrides optionally picks a different threshold for matching model ids, model context-window ranges, or session patterns. If no rule matches, LCM falls back to contextThreshold.

Session exclusion patterns

Session reset semantics

Lossless-claw distinguishes OpenClaw's two session-reset commands:

  • /new keeps the active conversation row and all stored summaries, but prunes context_items so the next turn rebuilds context from retained summaries instead of the fresh tail.
  • /reset archives the active conversation row and creates a new active row for the same stable sessionKey, giving the next turn a clean LCM conversation while preserving prior history.

Lossless-claw no longer rewrites active OpenClaw transcripts for GC or session rotation. SQLite-backed OpenClaw owns active transcript storage; Lossless keeps durable conversation, summary, and recall data in its own SQLite database. If you want an LCM database snapshot before maintenance, run /lossless backup.

newSessionRetainDepth (or LCM_NEW_SESSION_RETAIN_DEPTH) controls how much summary structure survives /new:

  • -1: keep all existing context items
  • 0: keep all summaries, drop only fresh-tail messages
  • 1: keep d1+ summaries
  • 2: keep d2+ summaries; recommended default
  • 3+: keep only deeper, more abstract summaries

Lossless-claw applies /new pruning through before_reset and uses session_end to catch transcript rollovers such as /reset, idle or daily session rotation, compaction session replacement, and deletions. User-facing confirmation text after /new or /reset must still be emitted by OpenClaw's command handlers.

Use ignoreSessionPatterns or LCM_IGNORE_SESSION_PATTERNS to keep low-value sessions completely out of LCM. Matching sessions do not create conversations, do not store messages, and do not participate in compaction or delegated expansion grants.

Cron scheduler keys (agent:<agent>:cron:<job>...) are isolated automatically when OpenClaw reuses the same sessionKey for a new runtime sessionId: lossless-claw archives the prior active run and creates a fresh LCM conversation for the new run. Leave cron sessions out of ignoreSessionPatterns when they need in-run LCM compaction.

Pattern rules:

  • * matches any characters except :
  • ** matches anything, including :
  • Patterns match the full session key

Examples:

  • agent:*:cron:** excludes cron sessions for any agent when you want to bypass LCM entirely
  • agent:*:**:active-memory:** excludes active-memory sessions under nested session-key prefixes; the ** segment is intentionally broad because it spans colon-separated session-key segments
  • agent:*:dreaming-narrative-** excludes OpenClaw memory-core dreaming narrative sessions; OpenClaw builds those keys with the dreaming-narrative- prefix (source)
  • agent:main:subagent:** excludes all main-agent subagent sessions
  • agent:ops:** excludes every session under the ops agent id

Treat these examples as storage exclusions. Matching sessions do not create LCM conversation rows or store messages in LCM, so use them only for lanes whose history can stay outside LCM.

Environment variable example:

LCM_IGNORE_SESSION_PATTERNS=agent:*:cron:**,agent:main:subagent:**

Plugin config example:

{
  "plugins": {
    "entries": {
      "lossless-claw": {
        "config": {
          "ignoreSessionPatterns": [
            "agent:*:cron:**",
            "agent:main:subagent:**"
          ]
        }
      }
    }
  }
}

Stateless session patterns

Use statelessSessionPatterns or LCM_STATELESS_SESSION_PATTERNS for sessions that should still be able to read from existing LCM context, but should never create or mutate LCM state themselves. This is useful for delegated or temporary sub-agent sessions that should benefit from retained context without polluting the database.

When skipStatelessSessions or LCM_SKIP_STATELESS_SESSIONS is enabled, matching sessions:

  • skip bootstrap imports
  • skip message persistence during ingest and after-turn hooks
  • skip compaction writes and delegated expansion grant writes
  • can still assemble context from already-persisted conversations when a matching conversation exists

Pattern rules are the same as ignoreSessionPatterns, and matching is done against the full session key.

Environment variable example:

LCM_STATELESS_SESSION_PATTERNS=agent:*:subagent:**,agent:ops:subagent:**
LCM_SKIP_STATELESS_SESSIONS=true

Plugin config example:

{
  "plugins": {
    "entries": {
      "lossless-claw": {
        "config": {
          "statelessSessionPatterns": [
            "agent:*:subagent:**",
            "agent:ops:subagent:**"
          ],
          "skipStatelessSessions": true
        }
      }
    }
  }
}

OpenClaw session reset settings

LCM preserves history through compaction, but it does not change OpenClaw's core session reset policy. If sessions are resetting sooner than you want, increase OpenClaw's session.reset.idleMinutes or use a channel/type-specific override.

{
  "session": {
    "reset": {
      "mode": "idle",
      "idleMinutes": 10080
    }
  }
}
  • session.reset.mode: "idle" keeps a session alive until the idle window expires.
  • session.reset.idleMinutes is the actual reset interval in minutes.
  • OpenClaw does not currently enforce a maximum idleMinutes; in source it is validated only as a positive integer.
  • If you also use daily reset mode, idleMinutes acts as a secondary guard and the session resets when either the daily boundary or the idle window is reached first.
  • Legacy session.idleMinutes still works, but OpenClaw prefers session.reset.idleMinutes.

Useful values:

  • 1440 = 1 day
  • 10080 = 7 days
  • 43200 = 30 days
  • 525600 = 365 days

For most long-lived LCM setups, a good starting point is:

{
  "session": {
    "reset": {
      "mode": "idle",
      "idleMinutes": 10080
    }
  }
}

Documentation

Development

# Build (bundles TypeScript to dist/index.js)
pnpm build

# Run tests
npx vitest

# Type check
npx tsc --noEmit

# Run a specific test file
npx vitest test/engine.test.ts

Project structure

index.ts                    # Plugin entry point and registration
src/
  engine.ts                 # LcmContextEngine — implements ContextEngine interface
  assembler.ts              # Context assembly (summaries + messages → model context)
  compaction.ts             # CompactionEngine — leaf passes, condensation, sweeps
  summarize.ts              # Depth-aware prompt generation and LLM summarization
  retrieval.ts              # RetrievalEngine — grep, describe, expand operations
  expansion.ts              # DAG expansion logic for lcm_expand_query
  expansion-auth.ts         # Delegation grants for sub-agent expansion
  expansion-policy.ts       # Depth/token policy for expansion
  large-files.ts            # File interception, storage, and exploration summaries
  transcript-repair.ts      # Tool-use/result pairing sanitization
  types.ts                  # Core type definitions (dependency injection contracts)
  openclaw-bridge.ts        # Bridge utilities
  db/
    config.ts               # LcmConfig resolution from env vars
    connection.ts           # SQLite connection management
    migration.ts            # Schema migrations
  store/
    conversation-store.ts   # Message persistence and retrieval
    summary-store.ts        # Summary DAG persistence and context item management
    fts5-sanitize.ts        # FTS5 query sanitization
  tools/
    lcm-grep-tool.ts        # lcm_grep tool implementation
    lcm-describe-tool.ts    # lcm_describe tool implementation
    lcm-expand-tool.ts      # lcm_expand tool (sub-agent only)
    lcm-expand-query-tool.ts # lcm_expand_query tool (main agent wrapper)
    lcm-conversation-scope.ts # Conversation scoping utilities
    common.ts               # Shared tool utilities
test/                       # Vitest test suite
specs/                      # Design specifications
openclaw.plugin.json        # Plugin manifest with config schema and UI hints
tui/                        # Interactive terminal UI (Go)
  main.go                   # Entry point and bubbletea app
  data.go                   # Data loading and SQLite queries
  dissolve.go               # Summary dissolution
  repair.go                 # Corrupted summary repair
  rewrite.go                # Summary re-summarization
  transplant.go             # Cross-conversation DAG copy
  prompts/                  # Depth-aware prompt templates
.goreleaser.yml             # GoReleaser config for TUI binary releases

Line endings

This repository codifies LF line endings through .gitattributes so diffs stay stable across macOS, Linux, and Windows development environments.

  • Git should store text files with LF endings in the repository.
  • The root * text=auto eol=lf rule normalizes newly added text files.
  • Common source, documentation, lockfile, template, and config extensions are listed explicitly so contributors and tooling see the expected policy.
  • Binary assets and SQLite/database files are marked binary to avoid unsafe newline conversion.
  • If your editor or operating system prefers CRLF locally, keep the repository rules authoritative and avoid committing CRLF-only rewrites.
  • After changing line-ending rules, prefer a focused normalization commit so future functional changes remain easy to review.

Security

Please report suspected vulnerabilities privately. See SECURITY.md for the supported disclosure process and response expectations.

License

MIT

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

47 total
  1. v1.1.0v1.1.0Sep 19, 2026

    ## 1.1.0 <!-- release-rollback-version: 1.0.0 --> ### OpenClaw host note OpenClaw 2026.9.2 and 2026.9.4 can duplicate the current user message in model context during bootstrap. This pre-existing host issue is fixed upstream in [OpenClaw #149690](https://github.com/openclaw/openclaw/pull/149690). A source build containing that fix passes a fresh two-turn gateway check with this Lossless release candidate. OpenClaw 2026.9.5 is the expected fixed release; confirm its stable publication before upgrading. Lossless 1.1.0 retains its OpenClaw 2026.9.2 minimum. ### Minor Changes - [#1185](https://github.com/Martian-Engineering/lossless-claw/pull/1185) [`c82b992`](https://github.com/Martian-Engineering/lossless-claw/commit/c82b992551d5c18a1a6d982be5c933733d88a342) Thanks [@jalehman](https://github.com/jalehman)! - Add a read-only Context explorer native session panel with active-summary metadata, token totals, summary text, and child-summary drill-down. Explicitly distinguish stored active context from the last model prompt. Require OpenClaw 2026.9.2+, the first stable release with native plugin UI; older hosts can keep their compatible Lossless release and use lcm-tui. - [#1

  2. v1.0.0v1.0.0Aug 31, 2026

    ## 1.0.0 <!-- release-rollback-version: 0.15.6 --> ### Major Changes - [#952](https://github.com/Martian-Engineering/lossless-claw/pull/952) [`d98a7dd`](https://github.com/Martian-Engineering/lossless-claw/commit/d98a7ddf189e4e62bdf998c9f706cd7108b9fc75) Thanks [@jalehman](https://github.com/jalehman)! - Remove Lossless-owned transcript GC and session-file rotation surfaces for the SQLite-backed OpenClaw runtime. Active transcript storage is now owned by OpenClaw; Lossless no longer exposes `/lossless rotate`, transcript GC config, or automatic session-file rotation config. Existing plugin configs must remove `transcriptGcEnabled` and `autoRotateSessionFiles` before upgrading because OpenClaw's manifest validation rejects removed config keys. ### Patch Changes - [#1114](https://github.com/Martian-Engineering/lossless-claw/pull/1114) [`4bcfc06`](https://github.com/Martian-Engineering/lossless-claw/commit/4bcfc069bed764ec29ecda2888cf714435e8129d) Thanks [@jalehman](https://github.com/jalehman)! - Move Lossless Claw 1.0 install, update, migration, and status repair commands to npm's stable `latest` channel. Installations that still follow `beta` receive repair guidance for the st

  3. v1.0.0-beta.7v1.0.0-beta.7Aug 27, 2026pre-release

    ## 1.0.0-beta.7 <!-- release-rollback-version: 0.15.6 --> ### Patch Changes - [#1126](https://github.com/Martian-Engineering/lossless-claw/pull/1126) [`479beb6`](https://github.com/Martian-Engineering/lossless-claw/commit/479beb6760dfc21960e13180514998e085f9cfa1) Thanks [@t3t5ujin](https://github.com/t3t5ujin)! - Deduplicate host-accepted turn messages against the covered transcript frontier before recording a durable advancement, preventing native runtimes from storing a second copy when transcript projection ingestion wins the race while preserving unflushed suffixes and ambiguous data. - [#1134](https://github.com/Martian-Engineering/lossless-claw/pull/1134) [`aa85938`](https://github.com/Martian-Engineering/lossless-claw/commit/aa859380faa6e68ec55255e5e257db95b3d1c541) Thanks [@jalehman](https://github.com/jalehman)! - Leave configured threshold headroom when OpenClaw forces overflow recovery, preventing a raw context-window budget from causing no-op compaction. - [#1106](https://github.com/Martian-Engineering/lossless-claw/pull/1106) [`fe891a4`](https://github.com/Martian-Engineering/lossless-claw/commit/fe891a41ea8f3482d4664e8666b0bd46dc26aa75) Thanks [@astra-openclaw](h

  4. v0.15.6v0.15.6Aug 27, 2026

    ## 0.15.6 <!-- release-rollback-version: 0.15.5 --> ### Patch Changes - [#1133](https://github.com/Martian-Engineering/lossless-claw/pull/1133) [`8b37ecb`](https://github.com/Martian-Engineering/lossless-claw/commit/8b37ecb188358d33bd00cd3438678257edd2e5fc) Thanks [@jalehman](https://github.com/jalehman)! - Leave configured threshold headroom when OpenClaw forces overflow recovery, preventing a raw context-window budget from causing no-op compaction. - [#1128](https://github.com/Martian-Engineering/lossless-claw/pull/1128) [`13e8405`](https://github.com/Martian-Engineering/lossless-claw/commit/13e8405e48f7774924155e6b2b8499ef2dedf2a0) Thanks [@PollyBot13](https://github.com/PollyBot13)! - Ignore top-level private OpenClaw metadata when estimating model-boundary tokens. - [#1135](https://github.com/Martian-Engineering/lossless-claw/pull/1135) [`34c5b73`](https://github.com/Martian-Engineering/lossless-claw/commit/34c5b73a2fee6c2a0868165b94f7d30d8325b24d) Thanks [@jalehman](https://github.com/jalehman)! - Remove the unsupported `contracts.sessionActions` manifest field while preserving the runtime `lcm-control` session action. ## Release Verification - Source: [a476847da4542e

  5. v1.0.0-beta.6v1.0.0-beta.6Aug 25, 2026pre-release

    ## 1.0.0-beta.6 <!-- release-rollback-version: 0.15.5 --> ### Patch Changes - [#1122](https://github.com/Martian-Engineering/lossless-claw/pull/1122) [`abbea93`](https://github.com/Martian-Engineering/lossless-claw/commit/abbea93fab76f30a0cc57a232594a53ca47584fc) Thanks [@jalehman](https://github.com/jalehman)! - Expose the four Lossless recall tools through OpenClaw's coding, messaging, and full tool profiles, and mark their read-only executions as replay-safe. ## Release Verification - Source: [4dfadc1f33f86794168dcc17ea7c5d648fc215b0](https://github.com/Martian-Engineering/lossless-claw/commit/4dfadc1f33f86794168dcc17ea7c5d648fc215b0) - Package: [@martian-engineering/[email protected]](https://www.npmjs.com/package/@martian-engineering/lossless-claw/v/1.0.0-beta.6) - Workflow: [32894966195](https://github.com/Martian-Engineering/lossless-claw/actions/runs/32894966195) - Rollback: install @martian-engineering/[email protected]. <!-- Release notes generated using configuration in .github/release.yml at v1.0.0-beta.6 --> **Full Changelog**: https://github.com/Martian-Engineering/lossless-claw/compare/v1.0.0-beta.5...v1.0.0-beta.6

Code frequency

additions and deletions
+54.8K-54.8KWeek of 2026-02-15: +45,472 linesWeek of 2026-02-15: -1,280 linesWeek of 2026-02-22: +4,069 linesWeek of 2026-02-22: -242 linesWeek of 2026-03-01: +233 linesWeek of 2026-03-01: -44 linesWeek of 2026-03-08: +5,270 linesWeek of 2026-03-08: -1,223 linesWeek of 2026-03-15: +9,085 linesWeek of 2026-03-15: -2,525 linesWeek of 2026-03-22: +4,168 linesWeek of 2026-03-22: -645 linesWeek of 2026-03-29: +10,315 linesWeek of 2026-03-29: -698 linesWeek of 2026-04-05: +15,991 linesWeek of 2026-04-05: -3,198 linesWeek of 2026-04-12: +9,384 linesWeek of 2026-04-12: -1,554 linesWeek of 2026-04-19: +1,088 linesWeek of 2026-04-19: -213 linesWeek of 2026-04-26: +4,090 linesWeek of 2026-04-26: -179 linesWeek of 2026-05-03: +6,564 linesWeek of 2026-05-03: -3,951 linesWeek of 2026-05-10: +12,443 linesWeek of 2026-05-10: -8,293 linesWeek of 2026-05-17: +11,670 linesWeek of 2026-05-17: -9,796 linesWeek of 2026-05-24: +2,652 linesWeek of 2026-05-24: -233 linesWeek of 2026-05-31: +13,054 linesWeek of 2026-05-31: -1,004 linesWeek of 2026-06-07: +54,754 linesWeek of 2026-06-07: -42,529 linesWeek of 2026-06-14: +5,129 linesWeek of 2026-06-14: -613 linesWeek of 2026-06-21: +6,292 linesWeek of 2026-06-21: -1,986 linesWeek of 2026-06-28: +5,015 linesWeek of 2026-06-28: -280 linesWeek of 2026-07-05: +9,672 linesWeek of 2026-07-05: -157 linesWeek of 2026-07-12: +7,889 linesWeek of 2026-07-12: -1,545 linesWeek of 2026-07-19: +1,772 linesWeek of 2026-07-19: -223 linesWeek of 2026-07-26: +3,225 linesWeek of 2026-07-26: -450 linesWeek of 2026-08-02: +18,710 linesWeek of 2026-08-02: -30,634 linesWeek of 2026-08-09: +1,621 linesWeek of 2026-08-09: -333 linesWeek of 2026-08-16: +4,923 linesWeek of 2026-08-16: -427 linesWeek of 2026-08-23: +2,040 linesWeek of 2026-08-23: -215 linesWeek of 2026-08-30: +297 linesWeek of 2026-08-30: -315 linesWeek of 2026-09-06: +1,022 linesWeek of 2026-09-06: -94 linesWeek of 2026-09-13: +10,470 linesWeek of 2026-09-13: -1,930 linesWeek of 2026-09-20: +2,714 linesWeek of 2026-09-20: -1,103 linesFeb 15, 2026Sep 20, 2026
+291.1K lines added, -117.9K removed over the last year.

Commits per week

last 52 weeks
560Week of 2025-09-27: 0 commitsWeek of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 55 commitsWeek of 2026-02-22: 23 commitsWeek of 2026-03-01: 5 commitsWeek of 2026-03-08: 34 commitsWeek of 2026-03-15: 30 commitsWeek of 2026-03-22: 14 commitsWeek of 2026-03-29: 34 commitsWeek of 2026-04-05: 56 commitsWeek of 2026-04-12: 31 commitsWeek of 2026-04-19: 4 commitsWeek of 2026-04-26: 18 commitsWeek of 2026-05-03: 19 commitsWeek of 2026-05-10: 19 commitsWeek of 2026-05-17: 19 commitsWeek of 2026-05-24: 12 commitsWeek of 2026-05-31: 45 commitsWeek of 2026-06-07: 28 commitsWeek of 2026-06-14: 14 commitsWeek of 2026-06-21: 9 commitsWeek of 2026-06-28: 13 commitsWeek of 2026-07-05: 12 commitsWeek of 2026-07-12: 22 commitsWeek of 2026-07-19: 11 commitsWeek of 2026-07-26: 11 commitsWeek of 2026-08-02: 13 commitsWeek of 2026-08-09: 8 commitsWeek of 2026-08-16: 20 commitsWeek of 2026-08-23: 26 commitsWeek of 2026-08-30: 2 commitsWeek of 2026-09-06: 3 commitsWeek of 2026-09-13: 11 commitsWeek of 2026-09-20: 6 commitsSep 27, 2025Sep 20, 2026
627 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 0 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 1 commitsSun 6:00 — 4 commitsSun 7:00 — 5 commitsSun 8:00 — 7 commitsSun 9:00 — 6 commitsSun 10:00 — 1 commitsSun 11:00 — 1 commitsSun 12:00 — 7 commitsSun 13:00 — 6 commitsSun 14:00 — 3 commitsSun 15:00 — 2 commitsSun 16:00 — 1 commitsSun 17:00 — 1 commitsSun 18:00 — 7 commitsSun 19:00 — 4 commitsSun 20:00 — 6 commitsSun 21:00 — 8 commitsSun 22:00 — 5 commitsSun 23:00 — 6 commitsMon 0:00 — 3 commitsMon 1:00 — 4 commitsMon 2:00 — 1 commitsMon 3:00 — 3 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 4 commitsMon 7:00 — 10 commitsMon 8:00 — 1 commitsMon 9:00 — 2 commitsMon 10:00 — 1 commitsMon 11:00 — 2 commitsMon 12:00 — 7 commitsMon 13:00 — 12 commitsMon 14:00 — 7 commitsMon 15:00 — 9 commitsMon 16:00 — 12 commitsMon 17:00 — 3 commitsMon 18:00 — 3 commitsMon 19:00 — 1 commitsMon 20:00 — 2 commitsMon 21:00 — 8 commitsMon 22:00 — 4 commitsMon 23:00 — 4 commitsTue 0:00 — 11 commitsTue 1:00 — 5 commitsTue 2:00 — 2 commitsTue 3:00 — 4 commitsTue 4:00 — 1 commitsTue 5:00 — 7 commitsTue 6:00 — 5 commitsTue 7:00 — 4 commitsTue 8:00 — 2 commitsTue 9:00 — 5 commitsTue 10:00 — 3 commitsTue 11:00 — 1 commitsTue 12:00 — 6 commitsTue 13:00 — 4 commitsTue 14:00 — 6 commitsTue 15:00 — 14 commitsTue 16:00 — 9 commitsTue 17:00 — 2 commitsTue 18:00 — 4 commitsTue 19:00 — 0 commitsTue 20:00 — 0 commitsTue 21:00 — 7 commitsTue 22:00 — 5 commitsTue 23:00 — 9 commitsWed 0:00 — 0 commitsWed 1:00 — 1 commitsWed 2:00 — 6 commitsWed 3:00 — 4 commitsWed 4:00 — 0 commitsWed 5:00 — 2 commitsWed 6:00 — 2 commitsWed 7:00 — 1 commitsWed 8:00 — 1 commitsWed 9:00 — 4 commitsWed 10:00 — 3 commitsWed 11:00 — 1 commitsWed 12:00 — 5 commitsWed 13:00 — 7 commitsWed 14:00 — 6 commitsWed 15:00 — 14 commitsWed 16:00 — 8 commitsWed 17:00 — 6 commitsWed 18:00 — 0 commitsWed 19:00 — 0 commitsWed 20:00 — 0 commitsWed 21:00 — 4 commitsWed 22:00 — 3 commitsWed 23:00 — 1 commitsThu 0:00 — 10 commitsThu 1:00 — 4 commitsThu 2:00 — 6 commitsThu 3:00 — 3 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 1 commitsThu 7:00 — 3 commitsThu 8:00 — 2 commitsThu 9:00 — 2 commitsThu 10:00 — 1 commitsThu 11:00 — 9 commitsThu 12:00 — 3 commitsThu 13:00 — 6 commitsThu 14:00 — 6 commitsThu 15:00 — 16 commitsThu 16:00 — 7 commitsThu 17:00 — 2 commitsThu 18:00 — 2 commitsThu 19:00 — 4 commitsThu 20:00 — 1 commitsThu 21:00 — 1 commitsThu 22:00 — 2 commitsThu 23:00 — 0 commitsFri 0:00 — 2 commitsFri 1:00 — 1 commitsFri 2:00 — 4 commitsFri 3:00 — 3 commitsFri 4:00 — 2 commitsFri 5:00 — 2 commitsFri 6:00 — 7 commitsFri 7:00 — 6 commitsFri 8:00 — 3 commitsFri 9:00 — 4 commitsFri 10:00 — 5 commitsFri 11:00 — 9 commitsFri 12:00 — 2 commitsFri 13:00 — 9 commitsFri 14:00 — 6 commitsFri 15:00 — 14 commitsFri 16:00 — 7 commitsFri 17:00 — 1 commitsFri 18:00 — 1 commitsFri 19:00 — 0 commitsFri 20:00 — 4 commitsFri 21:00 — 3 commitsFri 22:00 — 0 commitsFri 23:00 — 5 commitsSat 0:00 — 4 commitsSat 1:00 — 3 commitsSat 2:00 — 3 commitsSat 3:00 — 1 commitsSat 4:00 — 3 commitsSat 5:00 — 2 commitsSat 6:00 — 9 commitsSat 7:00 — 5 commitsSat 8:00 — 3 commitsSat 9:00 — 2 commitsSat 10:00 — 0 commitsSat 11:00 — 2 commitsSat 12:00 — 1 commitsSat 13:00 — 4 commitsSat 14:00 — 2 commitsSat 15:00 — 4 commitsSat 16:00 — 0 commitsSat 17:00 — 0 commitsSat 18:00 — 0 commitsSat 19:00 — 1 commitsSat 20:00 — 2 commitsSat 21:00 — 4 commitsSat 22:00 — 0 commitsSat 23:00 — 4 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Mar 15, 2026daily#20+220
  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    456.7K stars · TypeScript

  • openclaw/openclaw

    The AI that really does things. Any OS. Any Platform. The lobster way. 🦞

    391.3K stars · TypeScript

  • anomalyco/opencode

    The open source coding agent.

    211.7K stars · TypeScript

  • n8n-io/n8n

    Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

    206.7K stars · TypeScript

  • microsoft/vscode

    Visual Studio Code

    193.5K stars · TypeScript

  • firecrawl/firecrawl

    Supercharge your AI agents with data from the web and beyond. Building the library for superintelligence. 🔥

    188.6K stars · TypeScript