Skip to content

Releases: Neoo-Blue/commons-memory

v0.32.0: agents know who is asking, and Commons stays connected

Choose a tag to compare

@Neoo-Blue Neoo-Blue released this 15 Oct 19:31
  • Why. Muse ignored ten real requests from Commons' escalation ladder to cover another agent's schedule: the hub sent
    them with no sender, so they read as prompt injection. And a Claude Code session found no Commons tools at all: the
    MCP server had never been registered on that Mac, while the hooks kept working, so nothing looked broken.
  • Every message says where it came from. msg_recv, msg_history and daemon wake-ups give each message an origin:
    an agent name is verified when it signed in with its own key (a bare name without a key is marked unverified), and
    messages the hub writes come from commons with the part of the hub that wrote them and why ("the escalation ladder:
    stuck work reassigned", "release notes", "the vault"). Origin is set by the hub on every send, never taken from a
    caller, and an agent named "commons" is shown as an agent, not the hub.
  • Check anything relayed. New msg_get(id) re-reads a message over the agent's own connection, for text pasted into
    a prompt or forwarded by anyone. Only the sender and recipients can read it. Daemon wake-ups now name the messages
    and their origin instead of pasting their text, so a message's words arrive as data, not as the prompt.
  • Replies stay in their thread. An agent can only reply in a thread it is part of.
  • Escalations explain themselves. A reassigned subtask says why it moved and why to this agent.
  • One takeover per schedule. An hourly schedule missed for ten hours now gets one takeover, not ten.
  • Set once, stays connected. Every session start checks that Commons is still registered as Claude Code's MCP
    server and puts it back through Claude Code's own CLI if not (the session is told, and the tools load next session).
    The registration uses a headers helper (commons mcp-auth), so the key stays in your key file or secret manager and
    ~/.claude.json never holds it. commons setup registers Claude Code the same way.
  • For agents: messages carry origin and check; use msg_get(id) before acting on relayed text that asks for a
    credential, someone else's work, or a step that cannot be undone.

v0.31.2: tokens lead the Usage page; a limit on some models no longer stops the agent

Choose a tag to compare

@Neoo-Blue Neoo-Blue released this 15 Oct 18:58
  • Tokens first. The Usage page opens with tokens per day, stacked by agent, from each agent's own records, so Claude
    Code work on a subscription (no per-call spend) shows day by day. Spend moves beside the daily totals, and the agent
    filter lists agents that only have token records. The daily totals use the same token numbers as the chart.
  • Model-scoped limits. A limit on some of an agent's models no longer stops the whole agent: Fable's own weekly
    limit is a sub-limit of Claude's week (Claude keeps working on Opus), and when model groups split an agent
    (Antigravity's Gemini and Claude buckets) the roomiest group decides. Before this, a full Claude bucket on Antigravity
    would have held all of its work until the weekly reset.
  • For agents: nothing changes.

v0.31.1: window names keep their capitals

Choose a tag to compare

@Neoo-Blue Neoo-Blue released this 15 Oct 18:48
  • Fix. Antigravity's bucket read "Claude and gpt models"; it now reads "Claude and GPT models".
  • For agents: nothing changes.

v0.31.0: what Claude Code actually ran, and limits that match claude.ai

Choose a tag to compare

@Neoo-Blue Neoo-Blue released this 15 Oct 18:43
  • Why. The Usage page showed only what agents reported with report_usage, so a month of Claude Code work on the
    subscription was nearly invisible: no models, no effort, no tokens. The Claude card showed two windows where claude.ai
    shows three (Fable has its own weekly limit), lagged by up to 20 minutes without saying so, and had no forecast.
  • Models and effort. commons quota sync now reads each agent's own records on the machine it runs on: Claude Code
    transcripts (main sessions and subagents, each reply counted once, read incrementally) and the Grok and Antigravity
    bridge job records. It sends per-day totals by model, effort and project; the hub replaces rather than adds, so a
    re-send never double counts. The Usage page gets a Models and effort table: calls, input, output, thinking, cache
    reads and writes, and the top projects, per agent, model and effort. The agent's current model is set from what it
    actually ran.
  • Projects on the Usage page. "By project" rolls repo, worktree and test names up to the project the Projects page
    shows (commons-dev, commons-test and commons-live are one row: Commons). Calls with no project say what they are:
    Commons' own model calls.
  • Limits. A model's own weekly limit (Fable) is synced next to the session and weekly windows, even with an older
    quota-map.json; mapping keys may be patterns ("*:5h"), so Antigravity's Claude and GPT bucket comes along too.
    Each window shows a plain name ("Current session", "This week", "Fable this week"), when the provider was read, and,
    when the pace since the window opened would use it up first, when it runs out.
  • Fix. The Antigravity daemon passed an effort twice when the model id already carried one
    (claude-opus-5-5-medium) and the run was refused; the model's own effort now wins.
  • For agents: quota_report takes ledger (per-day totals) and current_model. Nothing else changes.

v0.30.4: a described project's own notes get checked too

Choose a tag to compare

@Neoo-Blue Neoo-Blue released this 14 Oct 22:34
  • Why. After the import was re-filed, soul-pool still held a few Poise and Commons decisions that had been captured
    live: the capture files a session by the folder it runs in, and work on other products happened from the soul-pool
    folder. Live notes were never candidates.
  • The owner's description wins over the folder. Once a project has a description, every note under it is checked
    against it, not only imported ones. Projects without one keep the old rule.
  • On the live hub. soul-pool went from 8,605 notes to about 2,600: 6,013 moved to Poise, 555 pool-agent notes came
    in from home and other buckets, and the pool agent's other names (pool-sim, billiards, billiards-bot) were grouped
    under it.
  • For agents: nothing changes.

v0.30.3: say what a project is, and the filing check listens

Choose a tag to compare

@Neoo-Blue Neoo-Blue released this 14 Oct 22:08
  • Why. soul-pool, the pool-playing agent, still showed Poise decisions: the filing check judged projects by sample
    note titles, and soul-pool's samples were the polluted imports themselves.
  • One line per project. Each project page takes a short description (click under the title): "the pool-playing
    agent". The filing check treats it as the owner's word on what belongs there, ahead of sample titles.
  • A way out. A note that clearly does not fit its project's description, and fits no other listed project, is
    proposed for Unsorted (a folder, not a project) instead of staying put.
  • For agents: nothing changes.

v0.30.2: infra("phrase") finds the guest

Choose a tag to compare

@Neoo-Blue Neoo-Blue released this 14 Oct 19:50
  • Fix. infra("phrase") answered with the cloudflared tunnel phrase-lxc instead of the guest "phrase (LXC 108)":
    a guest's name carries its id, so the bare name never matched. Guests now also answer to their plain name, and a loose
    match prefers systems, machines, guests and services over tunnels and URLs.
  • For agents: infra("<guest name>") works without the "(LXC n)" suffix.

v0.30.1: building the map from memory costs a quarter

Choose a tag to compare

@Neoo-Blue Neoo-Blue released this 14 Oct 19:43
  • Why. On the live hub the first estimate read 6,993 notes for about $24: the note filter matched any note with a
    URL, a port or the word "worker".
  • Fewer, better notes. Once live discovery has run, a note is read only when it names something discovery found (an
    IP, a guest, a service, a tunnel hostname) or clearly talks about infrastructure (LXC, Proxmox, NAS, Cloudflare, a
    mount path, a deploy script): 2,991 notes on the same hub.
  • Half price. With an Anthropic model the extraction goes through the Message Batches API, like the filing check.
    The same hub now estimates about $5.90.
  • For agents: nothing changes.

v0.30.0: an infrastructure map, for you and for every agent

Choose a tag to compare

@Neoo-Blue Neoo-Blue released this 14 Oct 19:36
  • Why. The owner: the knowledge base should know the structure of the code and the infrastructure, where everything
    resides and how it interacts, the project it belongs to and the credential it uses, "not only memorizing everything
    but categorizing and structuring it, clear for human observation and for AI", down to every LXC on the Proxmox host.
    The facts were in memory, spread over hundreds of notes (about 750 mention Plex alone), with nothing that answered
    "where does Radarr run and what does it mount" in one place.
  • One layered map. Places and machines, then guests (LXC, VM), then containers and services, then endpoints (URLs,
    ports, domains, tunnels), with storage and bind mounts, repos, systems (a product and its parts) and credentials. Each
    fact keeps its sources (discovered live, from memory, from the vault) and when it was last seen; what a collector stops
    reporting turns stale instead of lingering.
  • Discovered live, read-only. commons infra collect reads a Proxmox host (every LXC and VM with its IP, resources,
    mount points and status, the Docker containers inside each with images, published ports and bind mounts, the host's
    own services), plain Docker hosts, Tailscale and cloudflared, through one command allowlist that refuses anything that
    writes before a process starts. --submit sends it to the hub; commons infra install runs it every 6 hours.
  • From memory, cited. A small model (the librarian role, else the preset Haiku) reads the notes that mention hosts,
    ports, paths and domains and extracts stated facts, each citing its notes and anchored to the names discovery already
    found; a note's "LXC 106 (192.168.50.205)" joins the discovered arrstack by vmid and IP. The owner starts it from
    the dashboard, after an estimate (a batch of notes costs about $0.07); later runs read only new notes.
  • Vault links. Each vault credential attaches to the services its base URLs or name point at; the map shows the name,
    never the value.
  • For people. Knowledge > Infrastructure: an Overview of charts (each machine's capacity and every guest's memory,
    cores, services and ports; storage used against total; counts by kind), a zoomable map (machine, then its guests, then
    their containers, with the host's own services in their own row), the graph explorer on the same data (force and radial
    layouts, search, a node's neighbourhood at depth 1 to 3), an inventory, an Ask view showing exactly what an agent gets,
    and a drawer per thing: its chain, details, links (confirm or reject each one), the projects whose notes mention it,
    what else runs on the same host, evidence notes, "Show in graph", Hide and "Same as". Each project page gains a System tab.
  • For agents: infra() (now a core tool) gives the whole tree; infra("plex"), infra("LXC 106") or
    infra("192.168.50.205") gives one thing: what it runs on, its details, mounts, endpoints, links, credential names and
    sources. Ask it before guessing where something lives.
  • Notes filed under the wrong project, re-filed. The owner found Poise decisions on the soul-pool page: the
    claude-mem import had labelled about 2,200 Poise notes with soul-pool (it labels by the folder it ran in), and folder
    buckets like home (5,678 notes) and workspace (2,662) hold everything. "Check filing" on the Projects page sends
    imported and folder notes, never notes captured live, to a small model through the half-price batch API against a
    catalog of your real projects, after an estimate (about $3 for 20,000 notes). Proposals come back grouped ("1,704
    notes under soul-pool look like Poise, 1,650 sure") on the Projects page and on the affected project; move the sure
    ones or all with Undo, or keep them where they are. A similarity-only version was tried first and was too noisy on
    real data to trust.
  • Fixes. The test suite no longer touches the real home directory: a simulated session start had refreshed the
    Commons block in ~/.claude/CLAUDE.md; every test run now gets its own temporary home.
  • Identity, carefully. Two LXCs can both be named docker and every Docker host has 172.17.0.1, so nodes match on
    strong keys (vmid, primary IP, URL, collector key) and fall back to a bare name only when nothing stronger exists.

v0.29.0: projects, with everything about each one in one place

Choose a tag to compare

@Neoo-Blue Neoo-Blue released this 14 Oct 18:36
  • Why. The owner wanted "the whole thing about the Commons project in one place: memory, how it was worked, diffs,
    timeline, who did what", the same for every product, and a one-off job treated as a task, not a project. The hub had
    125 "projects", most of them folders an agent happened to run in (home, workspace) or one product split across
    names (commons-memory, commons-dev, commons-live), and no project page at all.
  • A Projects workspace. Each project opens one page: what is active now (running jobs, claimed work, open asks),
    counts, and tabs for a Timeline (decisions, handoffs, sessions, jobs and their steps, claimed work, board items and
    recorded changes, newest first, filterable by type and agent, paged), Work, Changes (commits and diffs), Memory
    (decisions and handoffs) and People (who did what). Every entry opens the matching drawer.
  • One product, several names. A project can include several raw names; Commons proposes groups by shared first
    word ("commons", "commons-dev", "commons-live") and you confirm with one tap, unticking what doesn't belong. Rename,
    ungroup, or mark a name as a task or "not a project" any time. Names like home and workspace are folders, not
    projects, by default. Grouping only changes what the dashboard shows together; agents keep their own project names.
  • Tasks. Names with little history (activity on one day, at most one session or job) and jobs filed under no project
    show under Tasks; make one a project or attach it to one.
  • For agents: nothing changes. Keep passing your repo or product name as project; the owner groups names on the
    dashboard.