This address is a knowledge store: a graph of facts and documents that answers only
from what it holds, with every claim cited to the fact behind it. It belongs to
whoever gave you the link.
The store has no language model of its own - you are the model. It keeps the
facts, links them, finds contradictions, and builds the prompts; you do the model
work it hands you and talk to the person. Start with the handshake below, then
follow this page step by step.
93fd7a75-8082-8342-bf27-14050b62bff2**Claude, Grok, and any assistant with FactoGraph tools or actions, or a tool that
sends requests or opens any address**: nothing to set up. Skip this section, do the
handshake below, and greet the person with Step 0. Never show them setup steps.
ChatGPT or Gemini without FactoGraph tools (startStep, getStep, replyToPrompt):
this section replaces the handshake, Step 0 and the steps below for you. Your browsing
opens only addresses it was given, so the step addresses stay closed to you: do not
offer to store anything yourself. Storing needs the FactoGraph connector - a setup of a
minute, never an error.
ChatGPT (a paid plan, on chatgpt.com):
1. Settings, Apps & Connectors, Advanced settings: turn Developer mode on.
2. Back in Apps & Connectors, Create. Name: FactoGraph. MCP server URL:
https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/mcp. Authentication: No authentication. Tick that they trust it, Create.
3. In a new chat: +, More, Developer mode, and turn FactoGraph on.
Gemini (the web app, gemini.google.com - not the mobile apps):
1. Settings, Connected Apps.
2. Under Custom apps, Add a custom app, paste https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/mcp, Next, approve.
3. In a new chat, turn FactoGraph on.
Then say: the setup is done once; in a new chat they only turn FactoGraph on - no
link to paste. https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/mcp is this store's own connector and its key: they keep it
private. It reaches this one store; another store needs its own. If they already have
the FactoGraph connector for every store, it is enough: they give it this link in a
chat. Only
if ChatGPT's developer mode is not available to them, https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/setup has
another way, a FactoGraph GPT.
https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/facts?v=da39a3ee - you were given it here - and[F3](<link>).Before Step 0, find out once how you can reach this store. Do it quietly - it is
not something to show the person or ask them about - and stop at the first case
that works. The probes store nothing and delete nothing; they only show that your
requests arrive.
1. You have FactoGraph tools - MCP tools or actions named getManual, listFacts,
startStep, getStep, replyToPrompt. Use them; skip the rest of the handshake. When
they take store (the one FactoGraph connector for every store), pass this link,
https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2, as store to every one.
2. You can send HTTP requests - a POST with a JSON body, from an HTTP or fetch
tool, code you can run with network access, or an agent framework. This is the
default, and needs nothing from the person. Send both probes:
POST https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/handshake/add with body {"facts": ["Handshake test - this is never stored."]}POST https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/handshake/remove with body {"facts": ["F1"]}Both answer JSON with "handshake": "passed" and "mode": "api": run every step
by requests, as "How to run a step - by requests (API mode)" says below.
3. You cannot POST, but you can open addresses you put together yourself - a
browsing tool that opens any address. Encode each body above yourself - base64
of its UTF-8 bytes, URL-safe - put it after q= and open the address:
https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/handshake/add?q=<base64 of the add body>https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/handshake/remove?q=<base64 of the remove body>These addresses are on no page on purpose: steps must be opened the same way,
so opening one you put together is the test. Both pages say the handshake
passed in pages mode: run every step by opening addresses, as "How to run a
step - by opening addresses" says below. If your tool opens only addresses it
was given, that is case 4.
4. Nothing above worked - no tool for it, a refused or failed request, no page
or not the page the probe promised. Then you cannot store, add documents or
delete here, and must not pretend to. Open https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/setup: it tells you
how the person connects their assistant to this store - an MCP connector,
set up once - and what to tell them, step by step. Until
they have, answer from https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/facts only, when you can open it.
This page, alone: https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/handshake.
format=md) or as HTMLformat=html). Choose the one your browsing tool can read *with its links*: theformat=<md|html> onhttps://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2?format=md or https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2?format=html, and...?format=html&q=... on steps. Each page keeps your choice in the addresses itlink, the [F<n>](<link>) on the facts page, the Links list on a[F31](<link>) or[[1]](<link>), so the number itself opens the fact - never a bare [F31] or [1],proposal_id from propose andconfirmation, quoted as they wrote it. Never make one up. RunTell the person the store is connected and what it holds (the numbers above), and
that they can start right now - there is nothing to set up. Say they can tell you
facts, give you a document, ask questions, or have facts deleted, and that you will
show every fact for approval before it is stored. Never give them setup steps for
another assistant (a connector or a GPT): you already reach the store.
1. They state facts ("The pilot is due in December") - run propose with their
message. propose stores nothing. Show them the facts it found, numbered, and
every contradiction with what the store holds, both sides. Facts the store
already holds come back in already_stored, not as new ones - say so. Ask which
facts to store and, for each contradiction, which is true. Then stop and wait.
2. They approve - run add, once, with the approved facts, proposal_id and
confirmation (their reply). A fact that still contradicts one they have not
decided on is held back (held): ask them - the new one replaces the stored one,
both are true, or the stored one stays - and run what they chose. The store commits them
(refusing anything that still contradicts), reasons out what follows, scores
them into the store's spaces (relation layers) and reasons again along the new
links. Tell them what was stored, derived and linked.
3. They give a document (pasted text or a file you can read) - run documents
with its title and text. The store reads it into facts, works out its field,
designs and builds that field's spaces over it and reasons over it. Tell them.
4. They ask something - run ask with the question. Show answer_linked as it
is: each sentence is followed by [[n]](<link>), the fact it rests on. Keep those
links in place, and list sources_linked under it. If the store does not answer,
say so. If the answer contradicts a stored fact, the result says which - tell them.
5. They want a fact gone ("delete F3", "that is wrong, remove it") - run remove
with the fact's id, its [F<n>] number or its exact words. Nothing is deleted yet:
the result says what goes with it - the derived facts resting on it and its
relations in the spaces. Show them and ask to confirm; only then run remove
again with "confirm": true. The store deletes them and reasons again over the
facts they were linked with, keeping what still follows. Tell them.
6. A message that both states and asks: propose, approve, add, then ask.
Every step's result has "What to do now" (next): what to tell the person and
what to do next. Follow it. While a step runs, the store hands you prompts - model
work such as reading a message for facts, checking two facts for contradiction,
scoring a link, drafting an answer. Do each exactly as its instructions say and
send your answer as its reply; that is how the store thinks. There may
be several prompts per step.
When the handshake passed in API mode. Every request and answer is JSON; nothing
is base64-encoded. The same API as an OpenAPI description: https://api.factograph.app/api/gpt/openapi.json.
POST https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/steps/<step> with the step's JSON body (the bodies are"status": "waiting" - a prompt for you: do thesystem and messages, then POST https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/runs/<run_id>/reply/<call_id>{"reply": "<your answer>"} - the JSON object reply_schema asks for, as"running" - GET https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/runs/<run_id>?format=json until it is not."done" - do what next says; the details are in result. "failed" - error says why.GET https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/facts?format=json.When the handshake passed in pages mode - and the bodies every step takes, in
either mode. Everything is done by opening addresses; there is nothing to POST. What you send
goes in one parameter, q: base64 of UTF-8 text (URL-safe alphabet, padding
optional) - so quotes, newlines, & or # in it can never break the address.
What comes back is a page in your format: either a prompt for you - instructions,
messages, the reply's JSON schema and the exact address to open with your reply -
or the step's result, with "What to do now". Keep opening what each page
tells you to until you reach the result.
Start a step: https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/start/<step>?q=<base64 of the step's JSON body>:
{"text": "<the person's message>"} - for examplehttps://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/start/propose?q=eyJ0ZXh0IjogIlRoZSBwaWxvdCBtdXN0IGJlIGRlbGl2ZXJlZCBiZWZvcmUgRGVjZW1iZXIgMjAyNS4ifQ{"facts": ["..."], "proposal_id": "<from propose's result>", "confirmation": "<the person's reply, quoted>", "replace": ["<stored fact id>"], "keep_both": [["<new fact>", "<stored fact>"]], "conversation_id": "<from propose's result>"}replace and keep_both only when the person resolved a contradiction.{"title": "<title>", "text": "<the document text>"} - at most"part_of": "<document.document_id from the first part's result>", so the parts{"question": "<question>"} - for example https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/start/ask?q=eyJxdWVzdGlvbiI6ICJXaGF0IGRvZXMgdGhlIHN0b3JlIHNheSBhYm91dCBkZWFkbGluZXM_In0{"facts": ["<fact id, F<n> or its words>"]} to see what would go - for examplehttps://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/start/remove?q=eyJmYWN0cyI6IFsiRjMiXX0 - then the same with "confirm": true to delete.Opening the start address of add, documents or a confirmed remove again
shows the run it started - it never stores or deletes twice.
Answer a prompt: open .../runs/<run>/reply/<call>?q=<base64 of your reply> - the
reply's JSON object, or its text when the prompt has no schema. A step still
working: open https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/runs/<run id>; it shows the next prompt or the result.
Reading only, no steps: every fact, numbered: https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/facts?v=da39a3ee; the prompt for one
question with the facts that bear on it: https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/context?q=What%20does%20the%20store%20say%20about%20deadlines%3F; the whole
graph - facts, links, spaces, contradictions - as JSON: https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/graph.
A message is at most 5 sentences and 800
characters; give longer text as a document.
https://api.factograph.app/api/k/93fd7a75-8082-8342-bf27-14050b62bff2/graph) in replace. A fact that should not be there