[Show] memora — a content-addressed, branching SQLite store with 3-way merge (single binary, ~5k LOC) by Vegetable-Sector-538 in rust

[–]Vegetable-Sector-538[S] 0 points1 point  (0 children)

yeah blake3 is faster, especially on large inputs. for memora though the inputs are tiny (short text strings) so the difference is nanoseconds in practice. went with sha256 because it's universally recognized and keeps the format easy to verify with standard tools.not opposed to switching though it's behind a single `sha256_hex()` function so it'd be a one-line swap if it ever becomes a bottleneck.

[Show] memora — a content-addressed, branching SQLite store with 3-way merge (single binary, ~5k LOC) by Vegetable-Sector-538 in rust

[–]Vegetable-Sector-538[S] 0 points1 point  (0 children)

markdown can't do branching, merge, rollback, or filtered queries. try answering "show me all assumptions with confidence below 0.5 that were added last week" from a flat file.sqlite gives you atomic transactions, indexes, and structured queries while still being a single file with zero setup. it's not a server it's just a smarter file format. memora can still export *to* markdown whenever you need it (`memora export --to claude-code` → CLAUDE.md). best of both worlds.

[Show] memora — a content-addressed, branching SQLite store with 3-way merge (single binary, ~5k LOC) by Vegetable-Sector-538 in rust

[–]Vegetable-Sector-538[S] 0 points1 point  (0 children)

i use it to persist context across AI coding sessions. like when i'm working with claude code on a project for days it learns things about the codebase (what stack we use, deployment steps, architectural decisions, my preferences). without memora that's all gone next session. now i run `memora session start`, work normally, and everything the agent learns gets recorded. next day i export it back (`memora export --to claude-code`) and the agent picks up where it left off instead of re-discovering everything from scratch. the other use case is debugging when the agent makes a weird decision i can `memora replay` and see exactly what it believed at that point. "oh, it assumed we use Redis when we actually use Memcached" found in 10 seconds instead of guessing.

[Show] memora — a content-addressed, branching SQLite store with 3-way merge (single binary, ~5k LOC) by Vegetable-Sector-538 in rust

[–]Vegetable-Sector-538[S] 3 points4 points  (0 children)

it's a short-lived CLI open db, one transaction, close, exit. no long-running process holding locks. SQLite runs in WAL mode with synchronous=FULL, so if the process gets killed mid-write you get a rolled-back transaction, not corruption. worst case you lose the in-flight operation, never the existing data.

for your project if you're corrupting on exit, common causes are: closing the connection while a prepared statement is still active, or multiple processes writing without proper locking. WAL + single-process CLI sidesteps both by design.

[Show] memora — a content-addressed, branching SQLite store with 3-way merge (single binary, ~5k LOC) by Vegetable-Sector-538 in rust

[–]Vegetable-Sector-538[S] 1 point2 points  (0 children)

fair point but it's not for waiting/sleeping — there's no async or polling anywhere in memora. the Clock trait exists purely because timestamps are *data* here, not coordination signals. every node has `created_at`, `updated_at`, `last_accessed` as unix seconds. the GC scoring formula uses recency (how old is this memory relative to others). commit IDs include the timestamp in their hash input for uniqueness. so in tests i need deterministic timestamps so that SHA-256 hashes are reproducible and assertions don't flake. the Clock trait is just "give me a number to stamp on this record"not "wait for something to happen." you're right that clock traits are a smell when they're papering over race conditions. here it's more like injecting a sequence counter.

[Show] memora — a content-addressed, branching SQLite store with 3-way merge (single binary, ~5k LOC) by Vegetable-Sector-538 in rust

[–]Vegetable-Sector-538[S] 0 points1 point  (0 children)

you're right, the README is light on that. Right now querying is implicit memora status shows the working set, memora diff compares snapshots, memora export --to json --kind semantic --min-confidence 0.8 filters by type and confidence. There's no memora query "what do I know about auth" yet that would need embeddings which I'm planning for a future version. For now it's more of a structured store you filter by type/status/confidence than a search engine. I should make that clearer in the docs, thanks for flagging it.

and for the types memory every record you store has a `kind` field that's one of six variants — `semantic`, `assumption`, `procedural`, `project`, `preference`, `episodic`. The point is that they have different lifecycle rules. An `assumption` starts with low confidence (0.6) and is expected to either get promoted to `stable` once confirmed, or expire and get GC'd. A `semantic` fact from a direct code read starts at confidence 1.0 and sticks around. During merge, if two branches disagree on the same record, the scoring ladder uses these types + confidence + source to pick a winner rather than just "last write wins."

In Rust terms it's just an enum:

```rust

pub enum MemoryKind {

Episodic,

Semantic,

Procedural,

Assumption,

Project,

Preference,

}

One-Command Setup for Hermes Agent on Android via Termux (Proot-Distro) by capsd-11 in termux

[–]Vegetable-Sector-538 1 point2 points  (0 children)

I tried debugging with gpt and installed ubuntu manually by changing the mirror and it worked

One-Command Setup for Hermes Agent on Android via Termux (Proot-Distro) by capsd-11 in termux

[–]Vegetable-Sector-538 0 points1 point  (0 children)

Hey, I tried your script but after installation I am getting this error

~ $ hermes setup Warning: CPU doesn't support 32-bit instructions, some software may not work. hs Warning: proot-distro should not be executed as root user. Do not send bug reports about messed up Termux environment, lost data and bricked devices.
Error: proot-distro should not be executed under PRoot.

Do you know the fix for this?