Home / SGit × Ruflo, step by step

A video, step by step

SGit × Ruflo, step by step

What if an agent loses its workspace? Twelve steps, each with its frame, its command and output, and which parts ran.

SGit × Ruflo: one run, four ways in

Mondweep Chakravorty's video of an agent losing its workspace and getting its memory back: the run, the architecture, the gap, and a page to step through it yourself.

1 · The runWhat if an agent loses its workspace?Twelve steps: memory saved, project deleted, memory restored in a fresh process, three safeguards tested.
2 · The architectureWhen is the vault actually used?In three of twelve steps, on one machine, inside the adapter: what that proves and what it does not.
3 · The gapThe policy guards the door; the command line uses the windowThe ABP checks the adapter's tools; Ruflo's own command line reaches the same memory file without it.
you are here
4 · Step through itSGit × Ruflo, step by stepEvery step with its frame, command, output and diagram, linked to its moment in the video.Watch the video ↗Step through it
The video's opening slide: What if an agent loses its workspace?▶ Watch the video, 1:45 ↗

Mondweep Chakravorty's video replays a real terminal run in twelve steps. Ruflo stores two facts. An adapter governed by an Agent Behaviour Policy saves Ruflo's memory as an encrypted checkpoint of SGit objects. The original project is deleted. A fresh process restores the checkpoint, and Ruflo reads both facts back exactly. Along the way three safeguards are tested, and all three hold. This page lets you step through it; the walkthrough article tells the same story in prose, the architecture article asks when the vault is actually used, and the third looks at the one path the policy does not see.

The run at a glance

1Pinned2Rules set3Stored4Refused, as expected5Checkpointed6Stopped, as expected7Deleted8Restored9Both facts back10Not found, as expected11Rejected, as expected12Summary

WorkedSafeguard refused it, as intendedSetup or summary

Not tested, and said so on screen: recall by meaning. Embeddings were switched off.

Six words you will see

Ruflo: rUv's open-source agent orchestration (MIT). Here only its memory commands and its memory file are used.
MCP: the Model Context Protocol, a standard way for an agent to call tools. Here, a local server with three tools.
ABP: an Agent Behaviour Policy. Here, four rows saying what may be done in the project, and what needs approval.
Checkpoint: a saved recovery copy of Ruflo's memory database.
SGit: an encrypted, versioned store. Here the checkpoint is kept as encrypted SGit objects on the same machine.
Fresh process: a brand-new server process, so nothing from before survives in its memory.
Reading options

The run, step by step

Each picture is the video's frame just before the slide changes, so the terminal output is complete. Tap one to enlarge it. Times link to that moment in the video.

  1. A real, pinned runtime Pinned

    Video 0:09–0:14 · run clock 00:04

    Step 1 of 12, the video's frame: A real, pinned runtime

    Ruflo reports its version, and the run prints the exact SGit source commit and the adapter it uses: an ABP-governed local MCP server, version 0.2.

    Ruflo: –ABP: Named onlyVault: Not yet
    Command and output
    $ ruflo --version
    ruflo v3.56.10; exit 0; SGit source 559752641bc520986fb0851b4a43875b6ad0d4ad; Adapter: ABP-governed local MCP, version 0.2
    Step 1: the terminal panel
    How the parts fit

    Ruflo reports its version. The run also prints which SGit source commit and which adapter version it uses.

    Step 1: which parts ran. Solid arrows are on screen; dashed are inferred.

    Only Ruflo’s command-line tool runs. SGit and the adapter are named, not called.

    Shown on screen: ruflo --version returns v3.56.10; the SGit commit and adapter version are printed.

    Inferred: The adapter embeds that SGit commit; the screen only prints the two lines together.

  2. Define the mandate Rules set

    Video 0:14–0:21 · run clock 00:11

    Step 2 of 12, the video's frame: Define the mandate

    Four Agent Behaviour Policy rows, all limited to the project. Writing, reading and history are allowed; deleting memory needs a human’s approval. Anything unsupported or ambiguous fails closed.

    Ruflo: –ABP: Rows loadedVault: Not yet
    Command and output
    $ show reviewed ABP capability rows
    write.memory.project yes; read.memory.project yes; read.record.history yes; delete.memory.project approval; all scope ['project']. No raw rule overrides; unsupported or ambiguous policies fail closed.
    Step 2: the terminal panel
    How the parts fit

    Four ABP rows are loaded and shown. Each says what the agent may do, scoped to the project.

    Step 2: which parts ran. Solid arrows are on screen; dashed are inferred.

    The ABP lives with the adapter, not with Ruflo. From here on it guards the adapter’s three tools.

    Shown on screen: The four rows and the line “No raw rule overrides. Unsupported or ambiguous policies fail closed.”

    Inferred: Where the ABP file is kept and how it is compiled. A hash of it (abp_sha256) and of the compiled policy (policy_sha256) appear in step 5.

  3. Store two facts through Ruflo Stored

    Video 0:21–0:32 · run clock 00:39-00:46

    Step 3 of 12, the video's frame: Store two facts through Ruflo

    Two synthetic facts go into Ruflo’s memory, with embeddings switched off: Kestrel vehicles may charge only between 01:00 and 04:00 UTC, and Kestrel checkpoints are kept for seven days.

    Ruflo: Writes memory.dbABP: Not on pathVault: Not involved
    Command and output
    $ ruflo memory store --key <key> --value <fact> --no-embedding --path memory.db
    charging-window = 'Kestrel vehicles may charge only between 01:00 and 04:00 UTC.'; retention-policy = 'Kestrel checkpoints are retained for seven days.' (48 bytes, namespace project, Vector No); [OK] Data stored successfully; exit 0
    Step 3: the terminal panel
    How the parts fit

    Ruflo’s command-line tool writes the two facts straight into its SQLite memory file.

    Step 3: which parts ran. Solid arrows are on screen; dashed are inferred.

    This write does not pass through the ABP. The memory file is ordinary, unencrypted SQLite at this point.

    Shown on screen: ruflo memory store with --no-embedding --path memory.db; [OK] Data stored; Vector: No; the model name is logged.

  4. Try something outside its permission Refused, as expected

    Video 0:32–0:38 · run clock 00:52

    Step 4 of 12, the video's frame: Try something outside its permission

    The agent asks for a checkpoint of a namespace it has no rights to. It’s refused before anything is written.

    Ruflo: –ABP: DeniedVault: Nothing written
    Command and output
    $ MCP checkpoint(namespace="forbidden")
    isError true; PermissionError: operation failed; check configuration, policy and integrity; checkpoint_files 0
    Step 4: the terminal panel
    How the parts fit

    The agent asks the adapter to checkpoint a namespace it has no rights to.

    Step 4: which parts ran. Solid arrows are on screen; dashed are inferred.

    The ABP stops the request before SGit is called, so nothing reaches the vault.

    Shown on screen: isError true, PermissionError, checkpoint_files 0.

    Inferred: That the gate, not SGit, refused it. The zero files written is consistent with that.

  5. Save an encrypted recovery point Checkpointed

    Video 0:38–0:45 · run clock 00:59

    Step 5 of 12, the video's frame: Save an encrypted recovery point

    A consistent copy of the memory database is saved as encrypted SGit objects. The checkpoint records three fingerprints: the database, the ABP and the policy. Private keys stay in a separate directory.

    Ruflo: File copiedABP: AllowedVault: Written
    Command and output
    $ MCP checkpoint(namespace="project")
    status checkpointed; id 2fa35d1b71ce4361b458c8a64f6ec668; backend sqlite-backup; database_sha256 10ab6c56…d66a0b; abp_sha256 aad790d1…183b30a; policy_sha256 3c0c94f7…890265955. Only encrypted SGit bare objects enter the checkpoint store; private keys stay in a separate private directory.
    Step 5: the terminal panel
    How the parts fit

    This is where the vault is created. The adapter copies Ruflo’s memory file, fingerprints it, and SGit stores it encrypted.

    Step 5: which parts ran. Solid arrows are on screen; dashed are inferred.

    What goes into the vault: one consistent copy of Ruflo’s memory database, sealed with fingerprints of the data and of the rules in force. Where: a checkpoint folder on the same machine. Keys sit in a different folder.

    Shown on screen: status checkpointed, backend sqlite-backup, the three SHA-256 values, “Only encrypted SGit bare objects enter the checkpoint store. Private keys remain in a separate private directory.”

    Inferred: The exact order of backup, hashing and encryption, and that the store has sgit’s usual bare layout. No push to a server appears.

  6. Approval means stop Stopped, as expected

    Video 0:45–0:51 · run clock 01:05

    Step 6 of 12, the video's frame: Approval means stop

    Closing the run would delete memory, which needs approval. None is given, so it stops and the checkpoint is kept.

    Ruflo: –ABP: StoppedVault: Protected
    Command and output
    $ MCP close_run(checkpoint_id)
    isError true; PermissionError; checkpoint_retained true
    Step 6: the terminal panel
    How the parts fit

    Closing the run would delete memory. That ABP row needs approval, and none is given.

    Step 6: which parts ran. Solid arrows are on screen; dashed are inferred.

    The vault is what the ABP is protecting here. It is not touched.

    Shown on screen: isError true, PermissionError, checkpoint_retained true.

    Inferred: That close_run maps to the delete.memory.project row. The slide says deletion requires approval.

  7. Remove the original workspace Deleted

    Video 0:51–0:58 · run clock 01:12

    Step 7 of 12, the video's frame: Remove the original workspace

    The disposable test project and its database are really deleted. Only the encrypted checkpoint remains.

    Ruflo: Daemon stoppedABP: –Vault: Survives
    Command and output
    $ stop source daemon; remove disposable source project; assert database absent
    Worker daemon was not running; exit 0; source_project_exists false; original_database_exists false
    Step 7: the terminal panel
    How the parts fit

    The test deletes the source project, including Ruflo’s memory file.

    Step 7: which parts ran. Solid arrows are on screen; dashed are inferred.

    The vault and keys survive because they live in folders outside the project.

    Shown on screen: Worker daemon was not running; source_project_exists false; original_database_exists false.

    Inferred: The store and key folders sit outside the deleted project. Step 8 confirms they were still there.

  8. Restore in a fresh process Restored

    Video 0:58–1:04 · run clock 01:19

    Step 8 of 12, the video's frame: Restore in a fresh process

    A brand-new MCP server restores the checkpoint into a new workspace. The database fingerprint is identical to the one saved in step 5.

    Ruflo: –ABP: AllowedVault: Read
    Command and output
    $ new MCP server → restore(checkpoint_id, workspace="fresh-runner")
    status restored; new_workspace fresh-runner; database_sha256 10ab6c56…d66a0b (same as step 5); matches_checkpoint true
    Step 8: the terminal panel
    How the parts fit

    A brand-new adapter process restores the checkpoint into a new workspace.

    Step 8: which parts ran. Solid arrows are on screen; dashed are inferred.

    This is the vault being read. The restored database is byte-for-byte the one saved in step 5.

    Shown on screen: status restored, new_workspace fresh-runner, database_sha256 identical to step 5, matches_checkpoint true.

    Inferred: That the keys come from the private folder, and the decrypt-then-verify order.

  9. Ask Ruflo what it remembers Both facts back

    Video 1:04–1:14 · run clock 01:28

    Step 9 of 12, the video's frame: Ask Ruflo what it remembers

    Ruflo itself, not the adapter, reads the recovered database. Both facts come back word for word.

    Ruflo: Reads memory.sqliteABP: Not on pathVault: Not touched
    Command and output
    $ ruflo memory retrieve --key <key> --namespace project --path memory.sqlite --value-only
    both facts returned verbatim; exit 0 twice; PASS: both values match the CLI-written facts exactly
    Step 9: the terminal panel
    How the parts fit

    Ruflo’s own tool reads the restored file. Both facts come back word for word.

    Step 9: which parts ran. Solid arrows are on screen; dashed are inferred.

    Ruflo reads a plain copy that came out of the vault. Neither the vault nor the ABP is on this path.

    Shown on screen: Both values printed; PASS, exact match; exit 0.

  10. A missing fact stays missing Not found, as expected

    Video 1:14–1:20 · run clock 01:34

    Step 10 of 12, the video's frame: A missing fact stays missing

    A key that was never stored is reported as missing, so the restore didn’t invent anything.

    Ruflo: Lookup failsABP: Not on pathVault: Not touched
    Command and output
    $ ruflo memory retrieve --key never-stored --namespace project --path memory.sqlite
    [WARN] Key not found: never-stored; exit 1
    Step 10: the terminal panel
    How the parts fit

    A key that was never stored is looked up in the restored file.

    Step 10: which parts ran. Solid arrows are on screen; dashed are inferred.

    A control on the restored data: nothing was added on the way through the vault.

    Shown on screen: [WARN] Key not found: never-stored; exit 1.

  11. Change the saved copy, try again Rejected, as expected

    Video 1:20–1:26 · run clock 01:40

    Step 11 of 12, the video's frame: Change the saved copy, try again

    One encrypted checkpoint object is altered. The restore detects it and no workspace is created.

    Ruflo: –ABP: AllowedVault: Read, rejected
    Command and output
    $ alter one checkpoint object; MCP restore(..., workspace="tampered")
    isError true; ValueError: operation failed; check configuration, policy and integrity; tampered_workspace_created false
    Step 11: the terminal panel
    How the parts fit

    One encrypted object in the vault is altered, then a restore is attempted.

    Step 11: which parts ran. Solid arrows are on screen; dashed are inferred.

    The ABP allows the restore; the vault’s own integrity check is what refuses it.

    Shown on screen: isError true, ValueError, tampered_workspace_created false.

    Inferred: That SGit’s check (authenticated encryption or object hashes) caught it, rather than the adapter comparing fingerprints. Both would produce this output.

  12. What this run proves Summary

    Video 1:26–1:35 · run clock 01:49

    Step 12 of 12, the video's frame: What this run proves

    The acceptance summary: exact recall passed, all three safeguards held, and recall by meaning is explicitly marked as not validated.

    Ruflo: Recall checkedABP: 2 resultsVault: 2 results
    Command and output
    $ acceptance summary
    ruflo_cli_exact_recall PASS 2/2; abp_denial PASS; approval_required_deletion BLOCKED, checkpoint retained; source_project_removed true; fresh_process_restore PASS; tampered_restore BLOCKED; semantic_recall NOT VALIDATED (--no-embedding). Previous keyword-recovery test PASS; previous embedding-enabled test: no stored vectors, semantic quality not validated.
    Step 12: the terminal panel
    How the parts fit

    Each result in the acceptance summary, traced to the component that produced it.

    Step 12: which parts ran. Solid arrows are on screen; dashed are inferred.

    Two results belong to the ABP, two to the vault, one to Ruflo, and one was deliberately left untested.

    Shown on screen: The acceptance summary JSON.

    Inferred: Which component each line belongs to.

Who does what, per step

Ruflo's command line, the ABP and the vault, step by step. The vault is written or read in three steps: 5, 8 and 11. When is the vault actually used? explains why that is the honest answer, not a criticism.

StepWhat happensRufloABPVault
1A real, pinned runtime–Named onlyNot yet
2Define the mandate–Rows loadedNot yet
3Store two facts through RufloWrites memory.dbNot on pathNot involved
4Try something outside its permission–DeniedNothing written
5Save an encrypted recovery pointFile copiedAllowedWritten
6Approval means stop–StoppedProtected
7Remove the original workspaceDaemon stopped–Survives
8Restore in a fresh process–AllowedRead
9Ask Ruflo what it remembersReads memory.sqliteNot on pathNot touched
10A missing fact stays missingLookup failsNot on pathNot touched
11Change the saved copy, try again–AllowedRead, rejected
12What this run provesRecall checked2 results2 results

How the parts fit

The component map: the test script, Ruflo, the ABP adapter with the SGit library, and the machine's disk
Blue is Ruflo, amber the ABP adapter, green SGit and the vault, grey plain files; dashed boxes were not used. Solid arrows are on screen; dashed are inferred.
Where the video's vault lives: on one machine, with no vault server used
Where the vault lives: one machine. Encryption happens there and the ciphertext stays there, so it survives the project being deleted, not the machine being lost.

The outcome

The video's outcome slide

On screen: both facts recovered exactly; unauthorised access blocked; unapproved deletion blocked; an altered checkpoint rejected. Still to validate, in the video's own words: recall by meaning, real-world value, and installation and ongoing reliability.

First published 17 October 2026: the video "SGit × Ruflo | Working Proof of Concept" by Mondweep Chakravorty, member of the #Ruflo-Federation (LinkedIn), published here with his agreement.

Analysis: Claude (Anthropic), 17 October 2026, for Dinis Cruz, from on-screen content only; the audio was not transcribed. The frames are his and are not covered by this site's CC BY 4.0 licence; the diagrams, the board and the text are this site's. Curation: AI-written analysis of a third-party video, every number traced to the video's timeline or a frame, with what is inferred labelled as inferred.

For an agent

This page is a walkthrough of a recorded run, not a live system. Every number on it comes from the video's timeline or a frame. Keep what is shown on screen apart from what is inferred, as the page does: the video shows no vault server, push or clone; Ruflo's hive-mind and its own policy engine were not used; recall by meaning was not tested. The frames belong to Mondweep Chakravorty. The three articles linked at the top tell the same run in prose.