memspine 0.2.2: the session behind the log on https://memspine.com/ Run on macOS arm64 against the binaries the installer serves, 2026-10-08. Server started with MEMSPINE_EMBEDDING_DIM=4. With no control database the bearer token is the tenant id. Request bodies are listed first, then every command with the output it printed. ==> turns.json <== { "events": [ { "kind": "turn", "ts": 1791364442000000, "text": "Ana: we adopted a greyhound called Pixel last weekend", "embedding": [ 0.9, 0.1, 0.0, 0.0 ] }, { "kind": "turn", "ts": 1791364471000000, "text": "Ana: she needs a vet, somewhere open on Saturdays", "embedding": [ 0.3, 0.8, 0.4, 0.0 ] }, { "kind": "tool_call", "ts": 1791364473000000, "text": "find_vets(city=Lisbon, open=saturday) -> Clinica Arroios, VetLuz", "properties": { "tool": "find_vets" } }, { "kind": "turn", "ts": 1791364510000000, "text": "Ana: book Clinica Arroios for this Saturday at ten", "embedding": [ 0.1, 0.8, 0.5, 0.0 ] }, { "kind": "tool_call", "ts": 1791364512000000, "text": "book_vet(Clinica Arroios, 2026-10-10 10:00) -> confirmed A-2291", "properties": { "tool": "book_vet" } } ] } ==> facts.json <== { "events": [ { "kind": "fact", "ts": 1791364513000000, "text": "Ana owns a greyhound named Pixel", "embedding": [ 1.0, 0.0, 0.0, 0.0 ], "properties": { "source_event_ids": [ "3aecb591-9b7c-4763-ab36-22244f55cb72" ] } }, { "kind": "fact", "ts": 1791364514000000, "text": "Ana prefers Saturday appointments", "embedding": [ 0.0, 0.3, 0.9, 0.0 ], "properties": { "source_event_ids": [ "3bb26eb3-ac60-4a09-b2e4-a4ba5b634133", "3d13a540-0ba1-4ec5-9a92-65b90c397360" ] } }, { "kind": "fact", "ts": 1791364515000000, "text": "Pixel has a vet appointment at Clinica Arroios on 2026-10-10 at 10:00, booking A-2291", "embedding": [ 0.4, 0.9, 0.3, 0.0 ], "properties": { "source_event_ids": [ "3d13a540-0ba1-4ec5-9a92-65b90c397360", "9d19093a-24d9-42af-8908-2be8d3e094da" ] } } ] } ==> turn.json <== {"kind": "turn", "ts": 1791366110000000, "text": "Ana: my number is 912 555 019, text me the day before", "embedding": [0.0, 0.1, 0.2, 0.9]} ==> fact.json <== {"kind": "fact", "ts": 1791366112000000, "text": "Text Ana the day before the vet appointment", "embedding": [0.0, 0.4, 0.4, 0.7], "properties": {"source_event_ids": ["af2d5cc8-2a80-583b-b7ed-941419d7a27f", "78548aa7-2759-47c4-92ac-f995f773725d"]}} ==> last.json <== {"kind": "turn", "ts": 1791366150000000, "text": "Ana: thanks, that is all for today", "embedding": [0.1, 0.1, 0.1, 0.1]} $ MEMSPINE_BIND=127.0.0.1:7777 MEMSPINE_EMBEDDING_DIM=4 MEMSPINE_DATA_DIR=./data \ memspine-server > memspine.log 2>&1 & $ curl -s localhost:7777/health; echo {"service":"memspine-server","status":"ok","version":"0.2.2"} $ curl -s localhost:7777/v1/memory/events -H "$K" -H "$J" -d @turns.json; echo {"event_ids":["75173310-8a48-40bc-8b49-8c2ab8c7dc0c","9509bd23-a670-42e0-bbe0-b87e994b0617","697ea0fa-fa50-4d51-9aa8-417263290f08","b8533f46-b491-4c20-a078-b0ca2e039926","740c7d03-9b97-4854-8799-6d66524cf3fe"]} $ curl -s localhost:7777/v1/memory/events -H "$K" -H "$J" -d @facts.json; echo {"event_ids":["d53b6b8b-5c0e-4785-982b-db4f145dd1d9","b41bdb35-2dcc-4452-af6e-2dba054958ce","3dce87e5-4b2c-4cc0-96bc-338ce95f158f"]} $ curl -s localhost:7777/v1/memory/event -H "$K" -H "$J" \ -H "Idempotency-Key: turn-0941" -d @turn.json; echo {"event_id":"af2d5cc8-2a80-583b-b7ed-941419d7a27f"} $ curl -s localhost:7777/v1/memory/event -H "$K" -H "$J" \ -H "Idempotency-Key: turn-0941" -d @turn.json; echo {"event_id":"af2d5cc8-2a80-583b-b7ed-941419d7a27f"} $ curl -s localhost:7777/v1/memory/event -H "$K" -H "$J" -d @fact.json; echo {"event_id":"c3d7a7af-d5dc-4a60-bc3c-2fe5d52e992d"} $ curl -s "localhost:7777/v1/memory/events?limit=20" -H "$K" \ | jq -r '.events[] | [(.ts/1e6|strftime("%H:%M:%S")), .kind, .event_id[0:8], .text] | @tsv' 09:41:52 fact c3d7a7af Text Ana the day before the vet appointment 09:41:50 turn af2d5cc8 Ana: my number is 912 555 019, text me the day before 09:15:15 fact 3dce87e5 Pixel has a vet appointment at Clinica Arroios on 2026-10-10 at 10:00, booking A-2291 09:15:14 fact b41bdb35 Ana prefers Saturday appointments 09:15:13 fact d53b6b8b Ana owns a greyhound named Pixel 09:15:12 tool_call 740c7d03 book_vet(Clinica Arroios, 2026-10-10 10:00) -> confirmed A-2291 09:15:10 turn b8533f46 Ana: book Clinica Arroios for this Saturday at ten 09:14:33 tool_call 697ea0fa find_vets(city=Lisbon, open=saturday) -> Clinica Arroios, VetLuz 09:14:31 turn 9509bd23 Ana: she needs a vet, somewhere open on Saturdays 09:14:02 turn 75173310 Ana: we adopted a greyhound called Pixel last weekend $ curl -s localhost:7777/v1/memory/event/$F8 -H "$K" | jq . { "event_id": "3dce87e5-4b2c-4cc0-96bc-338ce95f158f", "kind": "fact", "ts": 1791364515000000, "text": "Pixel has a vet appointment at Clinica Arroios on 2026-10-10 at 10:00, booking A-2291", "properties": { "source_event_ids": [ "b8533f46-b491-4c20-a078-b0ca2e039926", "740c7d03-9b97-4854-8799-6d66524cf3fe" ] } } $ curl -s localhost:7777/v1/memory/recall -H "$K" -H "$J" \ -d '{"embedding":[0.3,0.9,0.3,0.0],"k":10}' \ | jq -r '.hits[] | [(.score*1e4|round/1e4), .kind, .event_id[0:8], .text[0:44]] | @tsv' 0.9957 fact 3dce87e5 Pixel has a vet appointment at Clinica Arroi 0.9908 turn 9509bd23 Ana: she needs a vet, somewhere open on Satu 0.9535 turn b8533f46 Ana: book Clinica Arroios for this Saturday 0.5721 fact b41bdb35 Ana prefers Saturday appointments 0.536 fact c3d7a7af Text Ana the day before the vet appointment 0.3996 turn 75173310 Ana: we adopted a greyhound called Pixel las 0.3015 fact d53b6b8b Ana owns a greyhound named Pixel 0.1626 turn af2d5cc8 Ana: my number is 912 555 019, text me the d $ curl -s localhost:7777/v1/memory/recall -H "$K" -H "$J" \ -d '{"text":"when is the vet appointment for Pixel","k":10}' \ | jq -r '.hits[] | [(.score*1e4|round/1e4), .kind, .event_id[0:8], .text[0:44]] | @tsv' 4.6866 fact c3d7a7af Text Ana the day before the vet appointment 3.1517 turn af2d5cc8 Ana: my number is 912 555 019, text me the d 2.5925 fact 3dce87e5 Pixel has a vet appointment at Clinica Arroi 2.0447 turn b8533f46 Ana: book Clinica Arroios for this Saturday 1.3526 fact d53b6b8b Ana owns a greyhound named Pixel 1.1752 turn 75173310 Ana: we adopted a greyhound called Pixel las 0.9173 turn 9509bd23 Ana: she needs a vet, somewhere open on Satu 0.8109 tool_call 740c7d03 book_vet(Clinica Arroios, 2026-10-10 10:00) $ curl -s localhost:7777/v1/memory/recall -H "$K" -H "$J" \ -d '{"text":"when is the vet appointment for Pixel", "embedding":[0.3,0.9,0.3,0.0],"k":10}' \ | jq -r '.hits[] | [(.score*1e4|round/1e4), .kind, .event_id[0:8], .text[0:44]] | @tsv' 0.0243 fact 3dce87e5 Pixel has a vet appointment at Clinica Arroi 0.0236 fact c3d7a7af Text Ana the day before the vet appointment 0.0228 turn af2d5cc8 Ana: my number is 912 555 019, text me the d 0.0161 turn 9509bd23 Ana: she needs a vet, somewhere open on Satu 0.0159 turn b8533f46 Ana: book Clinica Arroios for this Saturday 0.0156 fact b41bdb35 Ana prefers Saturday appointments 0.0152 turn 75173310 Ana: we adopted a greyhound called Pixel las 0.0149 fact d53b6b8b Ana owns a greyhound named Pixel $ curl -s localhost:7777/v1/memory/recall -H "$K" -H "$J" \ -d '{"text":"vet appointment booking","k":2}' \ | jq -r '.hits[] | [(.score*1e4|round/1e4), .kind, .event_id[0:8], .text[0:44]] | @tsv' 3.2165 fact 3dce87e5 Pixel has a vet appointment at Clinica Arroi 2.5492 fact c3d7a7af Text Ana the day before the vet appointment $ curl -s localhost:7777/v1/memory/recall -H "$K" -H "$J" \ -d '{"text":"vet appointment booking","k":2,"hops":1}' \ | jq -r '.hits[] | [.kind, .event_id[0:8], (.via // "-")[0:8], .text[0:52]] | @tsv' fact 3dce87e5 - Pixel has a vet appointment at Clinica Arroios on 20 fact c3d7a7af - Text Ana the day before the vet appointment turn b8533f46 3dce87e5 Ana: book Clinica Arroios for this Saturday at ten tool_call 740c7d03 3dce87e5 book_vet(Clinica Arroios, 2026-10-10 10:00) -> confi $ curl -s localhost:7777/v1/memory/cypher -H "$K" -H "$J" -d '{"query": "MATCH (f:Event)-[:SOURCE_FROM]->(s:Event) WHERE f.kind = $kind RETURN f.text, s.kind, s.text", "params":{"kind":"fact"}}' | jq -c '.rows[]' ["Ana owns a greyhound named Pixel","turn","Ana: we adopted a greyhound called Pixel last weekend"] ["Ana prefers Saturday appointments","turn","Ana: she needs a vet, somewhere open on Saturdays"] ["Ana prefers Saturday appointments","turn","Ana: book Clinica Arroios for this Saturday at ten"] ["Pixel has a vet appointment at Clinica Arroios on 2026-10-10 at 10:00, booking A-2291","tool_call","book_vet(Clinica Arroios, 2026-10-10 10:00) -> confirmed A-2291"] ["Pixel has a vet appointment at Clinica Arroios on 2026-10-10 at 10:00, booking A-2291","turn","Ana: book Clinica Arroios for this Saturday at ten"] ["Text Ana the day before the vet appointment","fact","Pixel has a vet appointment at Clinica Arroios on 2026-10-10 at 10:00, booking A-2291"] ["Text Ana the day before the vet appointment","turn","Ana: my number is 912 555 019, text me the day before"] $ curl -s localhost:7777/v1/memory/cypher -H "$K" -H "$J" \ -d '{"query":"MATCH (a:Event), (b:Event) RETURN count(*)"}'; echo {"error":"invalid_request","detail":"the query matches two patterns that share no variable, which pairs every row of one with every row of the other. Connect them through a shared variable"} $ curl -s localhost:7777/v1/memory/event -H "$K" -H "$J" -d @last.json; echo {"event_id":"1eb38657-2649-47e6-b082-bf90e6da5c72"} $ kill -9 $(lsof -tiTCP:7777 -sTCP:LISTEN); sleep 0.3; curl -s -m 2 localhost:7777/health; echo "curl exit $?" curl exit 7 $ MEMSPINE_BIND=127.0.0.1:7777 MEMSPINE_EMBEDDING_DIM=4 MEMSPINE_DATA_DIR=./data \ memspine-server > memspine.log 2>&1 & $ curl -s localhost:7777/v1/memory/event/$E11 -H "$K"; echo {"event_id":"1eb38657-2649-47e6-b082-bf90e6da5c72","kind":"turn","ts":1791366150000000,"text":"Ana: thanks, that is all for today","properties":{}} $ grep -rl "912 555 019" data data/00000000-0000-0000-0000-000000000042/events.ffs.qlog $ curl -s -X DELETE "localhost:7777/v1/memory/event/$E9?purge=true" -H "$K"; echo {"deleted":true,"purged":true} $ grep -rl "912 555 019" data; echo "grep exit $?" grep exit 1 $ curl -s -o /dev/null -w "%{http_code}\n" localhost:7777/v1/memory/event/$E9 -H "$K" 404 $ curl -s localhost:7777/v1/memory/event/$F10 -H "$K" | jq -c '.properties' {"source_event_ids":["af2d5cc8-2a80-583b-b7ed-941419d7a27f","3dce87e5-4b2c-4cc0-96bc-338ce95f158f"]} $ curl -s localhost:7777/v1/memory/cypher -H "$K" -H "$J" -d '{"query": "MATCH (f:Event)-[:SOURCE_FROM]->(s:Event) WHERE f.event_id = $id RETURN s.kind, s.text", "params":{"id":"'$F10'"}}' | jq -c '.rows[]' ["fact","Pixel has a vet appointment at Clinica Arroios on 2026-10-10 at 10:00, booking A-2291"] $ curl -s "localhost:7777/v1/memory/events?limit=20" -H "$K" \ | jq -r '.events[] | [(.ts/1e6|strftime("%H:%M:%S")), .kind, .event_id[0:8], .text] | @tsv' 09:42:30 turn 1eb38657 Ana: thanks, that is all for today 09:41:52 fact c3d7a7af Text Ana the day before the vet appointment 09:15:15 fact 3dce87e5 Pixel has a vet appointment at Clinica Arroios on 2026-10-10 at 10:00, booking A-2291 09:15:14 fact b41bdb35 Ana prefers Saturday appointments 09:15:13 fact d53b6b8b Ana owns a greyhound named Pixel 09:15:12 tool_call 740c7d03 book_vet(Clinica Arroios, 2026-10-10 10:00) -> confirmed A-2291 09:15:10 turn b8533f46 Ana: book Clinica Arroios for this Saturday at ten 09:14:33 tool_call 697ea0fa find_vets(city=Lisbon, open=saturday) -> Clinica Arroios, VetLuz 09:14:31 turn 9509bd23 Ana: she needs a vet, somewhere open on Saturdays 09:14:02 turn 75173310 Ana: we adopted a greyhound called Pixel last weekend $ curl -si localhost:7777/v1/whoami -H "$K" | grep -i -e "^HTTP" -e trace-id; echo HTTP/1.1 200 OK x-memspine-trace-id: b6915a4c-7510-43e3-937e-ed70467be546 $ ls data/00000000-0000-0000-0000-000000000042/ && du -sh data events.ffs.edgedata.gx1 events.ffs.edgedata.manifest events.ffs.nodedata.gx1 events.ffs.nodedata.manifest events.ffs.nodeloc events.ffs.propidx.gx1 events.ffs.propidx.manifest events.ffs.qlog events.ffs.reldata.gx1 events.ffs.reldata.manifest events.ffs.spine lock meta.json 176K data