For agencies, consultants and operators
Everything you know about a client, in one place Claude can answer from.
brainiphy pulls a business's folders, CRM records, mail and documents into a single knowledge graph, wires that graph into Claude, and re-syncs it on a schedule. You stop re-explaining the account every week — and the answers keep matching what is actually true.
- 01One afternoon to set up an account. Then it maintains itself.
- 02The graph, the files and the credentials stay on your Mac. Nothing hosted, no account to create.
- 03Runs on the Claude subscription you already pay for — or your own key, or a local model.
$ curl -fsSL https://raw.githubusercontent.com/rvst312/brainiphy/main/install.sh | bashthen: brain new ~/clients/acme
Read the source — MIT, free, no account.
macOS only. Python 3.9 or newer. It is a command-line tool — there is no GUI and no hosted version.
Not the person who runs the terminal? We build it for your business and keep it in sync.
? where does the Acme renewal stand
Closed Won on 12 Aug — $48k on a 12-month term. Sarah (CFO) signed off after Proposal v3; invoice 1180 went out two days later.
Plate I — one client's graph: the records, the people, and how they connect.
Plate II — two sources were due, one was not. One connector had changes, so the graph rebuilt once.
The expensive answer is the one that is quietly six weeks old
Building the brain is the easy part. An afternoon gets you the notes folder, the Drive and the CRM indexed, connected and answering properly. It is a good afternoon.
Then a proposal lands in Drive. A deal moves to Closed Won. Someone renames the project halfway through. None of that fails loudly — there is no error and no alert, because nothing broke.
The brain just starts answering from last month, in exactly the same confident tone it used when it was right.
That is what kills these setups, and it costs more than a bad answer would. You check it twice, it is fine, you stop checking — and then you quote a stale number on a client call and spend the next week rebuilding the trust you spent a year earning.
Keeping it current is the problem brainiphy is actually for. Getting the data in is plumbing, and it already wrote that part.
The loop, in full
- 01Each source gets a connector — a small script that pulls records and writes them in one normalized format.
- 02Each source declares how often it should be checked. A CRM every hour, an archive folder once a day.
- 03
brain syncruns only what is due, and rebuilds the graph only if something actually ran. Quiet days cost nothing. - 04
brain schedulehands that loop to macOS via launchd, so you stop being the scheduler.
Where this shows up in the week
A knowledge graph is an abstraction. These are the four moments where it either earns its afternoon or it does not.
On a call
The client asks where something stands
You ask the brain and answer in the call, with the number and the date, instead of promising to check and following up on Thursday.
Week one
Someone new joins the account
They ask the brain the questions they would otherwise have asked you. Onboarding stops being a tax on your calendar.
At scale
You run eight accounts, not one
Each client is its own folder and its own schedule. The eighth costs the same to keep current as the first, because nobody is keeping it current by hand.
Renewal season
You need the whole history, today
The proposals, the calls, the invoices and how they connect are already assembled. Prep becomes reading, not archaeology.
None of that is new capability — you could always dig the answer out of Drive and the CRM yourself. What changes is the price of doing it: from twenty minutes and a context-switch, to a question.
The four things you are about to ask
- “Run it again next month. Do I get two of everything?”
- No — and this is the question that decides whether the thing is still worth anything in three months. Every record is keyed by its ID in the source system, so the second run overwrites the first in place. A deal that moved from Proposal to Closed Won is the same node with a new value, not a second node that contradicts the first.
- “Where does my client's API token end up?”
- In the macOS Keychain, referenced by name. Never written to a config file, never passed on a command line where it lands in your shell history, never pasted into a conversation with a model. That is also the honest reason the tool is macOS-only: the Keychain and launchd are what it is built on.
- “What does this add to what I already pay for?”
- The tool is free and MIT-licensed — no account, no seats, no hosted plan. Indexing documents needs a model, and if you have Claude Code installed it runs on the Pro or Max subscription you already pay for. You can point it at your own API key or a local model instead; that choice is the one that matters for the privacy question below.
- “My client runs something nobody has heard of.”
- Then someone writes a connector: one script, one function, returning a list of records. No plugin registry, no base class, no vendor waiting list. A new source is an afternoon of work — which is what makes odd, in-house systems worth connecting at all.
Plate III — four records changed upstream · four nodes updated · nothing duplicated
Where a client's truth actually lives
Cheapest option first. Most of a real account lands in the top two rows — a shared folder and a CRM — and you only pay for engineering on the systems nobody has met yet.
- a folder on this Mac
- mirrored — no connector to write
- a system with a preset
- generated for you, fill in the credential
- any REST API
- a connector: one request, one mapping
- a public URL
- added directly, nothing to authenticate
- anything else
- a custom script that returns records
SOURCE_SYSTEM = "hubspot"
def fetch_records() -> list[dict]:
token = get_secret("graphify-acme-hubspot")
req = urllib.request.Request(
"https://api.example.com/v3/records",
headers={"Authorization": f"Bearer {token}"},
)
with urllib.request.urlopen(req, timeout=30) as resp:
data = json.load(resp)
return [
{"id": r["id"], "title": r["name"], "body": r["notes"]}
for r in data["results"]
]That is the whole contract, for the one person on the team who will read it. Each record needs an id, a title and a body; any other key you return becomes queryable. The id is what keeps next month's run from duplicating this month's.
An afternoon per client, spread over a week
$ brain new ~/clients/acmeOne command walks the whole setup, says what each step is for, and generates everything it can generate. Point it at a folder on your Mac and that connector is written, registered and running before it asks the next question.
Every step is optional and re-runnable, which matters more than it sounds — you will start an account, get pulled into something else, and come back on Thursday. brain guide tells you where you stopped and what to run next.
It also ships as a Claude Code skill, so you can hand the playbook to the agent instead of driving it yourself.
- 01install graphify — done
- 02scaffold the project — done
- 03add data sources — done
- 04implement the custom connectors — done
- 05run the first sync — next
- 06connect it to Claude — pending
- 07keep it in sync — pending
Commands
The whole surface, for whoever on your team actually runs it. There are nine, and you use three of them after the first week.
- brain new <path>
- Walk the whole setup and generate everything it can.
- brain sync
- Run the connectors that are due. Rebuild only if something ran.
- brain schedule
- Hand the sync loop to launchd, or inspect what is scheduled.
- brain status
- Connectors, last sync times, node counts.
- brain guide
- Where this brain stands, and the exact command to run next.
- brain new-connector <name>
- Write a connector stub, wired to the registry.
- brain connect-claude
- Register the graph with Claude Code and Claude Desktop.
- brain secret set/get
- Store and read a credential in the macOS Keychain.
- brain init
- Scaffold config into a folder you already have.
Flags and detail live in the README.
What it will not do for you
- Run anywhere but macOS
- It is built on the Keychain and launchd. There is no Linux or Windows build, and there is not going to be one soon — so if the account lives on a Windows laptop, this is not your tool.
- Run without Python 3.9+
- Connectors are Python. If
python3 --versionsays 3.8, this is not going to work yet. - Give the client a screen to click
- It is a CLI, and it is for the person who runs the account, not for the client. Configuration is a YAML file, connectors are scripts, and the output is text.
- Install from Homebrew
- Not yet — it needs a tagged release. The curl installer is the supported route today.
Where your client's data actually goes
The CLI, the graph and the credentials stay on your machine. There is no brainiphy account, no brainiphy server, and nothing phones home — which is the short answer to the security questionnaire.
But indexing a document means sending its content to a language model. That is what turns a PDF into something the graph can answer from, and it is the one place data leaves your Mac. Say so before you point this at a client's files.
You choose which model: your Claude subscription through Claude Code, your own API key, or a local model. If a client's documents cannot go to a hosted provider, run a local one — nothing else about the tool changes.
Credentials are the exception with no asterisk. They live in the Keychain and are never sent anywhere except the API they authenticate against.
Before you install anything
There is a working graph on this site. Ask it something.
A whole invented company — ten departments, 123 records — with a chat that answers from them and shows you which records it read.
Set it up for one client. See whether it is still right in a month.
That is the only test that matters, it costs an afternoon to start running, and the tool is free either way.
$ curl -fsSL https://raw.githubusercontent.com/rvst312/brainiphy/main/install.sh | bashor read the source first — a reasonable thing to do with a tool you are about to give your client's credentials to.
Done for you
Not the one who runs the terminal?
We find where your answers live, write a connector for every system, wire the graph into Claude, and repair it when an upstream API changes.
See the service