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 | bash

then: 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.

acme — the brainsynced 12m ago
Acme CorpSarah · CFORenewal · Q4Proposal v3Invoice 1180Kickoff call

? 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.

acme — zsh
$ brain sync
drive due (6h) 42 records, 3 changed
hubspot due (1h) 118 records, 0 changed
· notes not due (24h), skipped
 
graph rebuilt — 1 connector had changes
new 3 · updated 0 · duplicates 0

Plate II — two sources were due, one was not. One connector had changes, so the graph rebuilt once.

I.

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

  1. 01Each source gets a connector — a small script that pulls records and writes them in one normalized format.
  2. 02Each source declares how often it should be checked. A CRM every hour, an archive folder once a day.
  3. 03brain sync runs only what is due, and rebuilds the graph only if something actually ran. Quiet days cost nothing.
  4. 04brain schedule hands that loop to macOS via launchd, so you stop being the scheduler.
zsh
$ brain schedule
handed to launchd as com.frontieralabs.brainiphy.acme
checks every 30m · runs only what is due
 
! a run that comes due while the Mac sleeps fires when it wakes
II.

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.

III.

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.
the second run
$ brain sync --only hubspot
hubspot due (1h) 118 records, 4 changed
new 0 · updated 4 · duplicates 0
 
deal-8814 Proposal Closed Won

Plate III — four records changed upstream · four nodes updated · nothing duplicated

IV.

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
connectors/hubspot.py
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.

V.

An afternoon per client, spread over a week

$ brain new ~/clients/acme

One 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.

brain guide
  1. 01install graphifydone
  2. 02scaffold the projectdone
  3. 03add data sourcesdone
  4. 04implement the custom connectorsdone
  5. 05run the first syncnext
  6. 06connect it to Claudepending
  7. 07keep it in syncpending
4/7 donenext: brain sync
VI.

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.

VII.

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 --version says 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.

open the demo

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 | bash

or 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