Give both agents the same question and shared SQLite database.
Same database. Same model. Different powers.
Both lanes share one browser-local SQLite database and the same model. The only difference is what the tool can return — and these four cases pick questions where that difference is structural: SQL hands back rows, silence, or a silently corrupted state; Remembero hands back a checkable proof, a named missing premise, or a refused contradiction.
Hermes emits a native function call before it can answer.
One tool returns raw SQL rows; Remembero returns bindings and proof.
The tool result goes back to the same local model for synthesis.
MODEL PROMPT:
Call the Query function exactly once with query "What is really blocking the Atlas review?".
Do not rename the function, invent another function, or write SQL or Datalog yourself.
After the tool result is returned, answer the question using only that evidence and cite its concrete values.
Question: What is really blocking the Atlas review?
TOOL SCHEMA:
{
"name": "Query",
"description": "Run the prepared read-only SQL query for the active case and return raw SQLite rows.",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"enum": [
"What is really blocking the Atlas review?"
]
}
},
"required": [
"query"
],
"additionalProperties": false
}
}- Model tool call · not run
- Not run yet
- Validated call
- Not validated
- Executed SQL
- Not executed
- Tool result
- Not executed
- Final answer prompt
- Not run yet
MODEL PROMPT:
Call the Query function exactly once with query "What is really blocking the Atlas review?".
Do not rename the function, invent another function, or write SQL or Datalog yourself.
After the tool result is returned, answer the question using only that evidence and cite its concrete values.
Question: What is really blocking the Atlas review?
TOOL SCHEMA:
{
"name": "Query",
"description": "Evaluate the prepared Remembero relation for the active case and return bindings plus proof from SQLite.",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"enum": [
"What is really blocking the Atlas review?"
]
}
},
"required": [
"query"
],
"additionalProperties": false
}
}- Model tool call · not run
- Not run yet
- Validated call
- Not validated
- Executed Datalog
- Not executed
- Tool result
- Not executed
- Final answer prompt
- Not run yet
- One in-memory SQLite database for both agents
- Startup probe: not verified
- Data Query adapter returns prepared, read-only SQL rows
- Remembero Query adapter uses datalog_query + datalog_explain
- No database snapshot is pasted into either model prompt
SELECT
(SELECT COUNT(*)
FROM sqlite_schema
WHERE type = 'table'
AND name IN (
'status',
'blocker',
'waits_on',
'prefers_meeting',
'pending_meeting',
'review_slot'
)) AS tableCount,
(SELECT COUNT(*) FROM status)
+ (SELECT COUNT(*) FROM blocker)
+ (SELECT COUNT(*) FROM waits_on)
+ (SELECT COUNT(*) FROM prefers_meeting)
+ (SELECT COUNT(*) FROM pending_meeting)
+ (SELECT COUNT(*) FROM review_slot) AS rowCount- Data-only final raw
- Not run yet
- Remembero final raw
- Not run yet
- Proof output appears after the recall run.
Data only
Question → model tool call → prepared SQL → raw rows
What is really blocking the Atlas review?
Run the comparison to see the baseline answer.
With Remembero
Question → model tool call → Datalog → bindings + proof
What is really blocking the Atlas review?
Run the comparison to execute recall, proof, and answer synthesis.
Model calls use a labeled simulator (SQLite data ready · WebLLM model not loaded); SQLite, SQL, Remembero evaluation, and proof execution are real and browser-local.
Add this loop to your agent harness →