Your graph — from the command line,
and from your AI.
One open package gives you a TypeScript SDK, the ilml CLI, and an MCP server — so you can script your graph, or let Claude, Cursor and Windsurf work inside it directly.
One package — CLI, SDK and MCP.
Node 18+. One global install gives you the ilml command and the SDK.
npm install -g @ilivemylife/graph-sdk
ilml login
ilml doctor # verify everything worksDrive your graph with ilml.
The full command set — and every command speaks text or --json, reads from stdin or files, and pipes into shell scripts.
One CLI, many accounts. ilml login signs you in globally — every folder. Run ilml login --local inside a project to use a different account just there (personal vs work, or a dedicated bot account for an automation). Resolution order: local config → .env token → global → shell variable.
ilml tree --json | jq '.[].title' # machine-readable → jq
ilml items <node> --json > backup.json # snapshot your graph
cat notes.md | ilml editItem <node> --desc - # pipe content straight inPlug your graph into your AI.
One command connects the MCP server to Claude Code (Cursor, Windsurf and Claude Desktop are the same idea).
claude mcp add --scope user ilml -- npx -y @ilivemylife/graph-sdkThen just ask, in plain language:
- Read my latest notifications and summarize what needs my attention.
- What changed in my “Projects” node this week — and who changed it?
- Create a task “Call the bank” under My Life, due tomorrow.
- Search my whole graph for everything about the landing redesign.
Or script it yourself.
Typed TypeScript SDK (ESM + CommonJS): read and write nodes, ask Lifebot, upload files, replay every change, subscribe to live updates.
const me = await graph.me()
const items = await graph.items(me.rootItemId)
console.log(items[0].title, '→', items.slice(1).map(i => i.title))const project = await graph.addItem(me.rootItemId, { title: 'My Project' })
await graph.addItem(project.id, { title: 'First task' })const reply = await graph.askLifebot(project.id, 'What tasks do I have?')
console.log(reply.content)const history = await graph.itemHistory(project.id)
// every edit on the node: who made it, what changed, and whenawait graph.uploadFile(project.id, './spec.pdf')
const hits = await graph.searchMessages(project.id, 'deadline')Install a plugin — or build your own.
Plugins install into your ilml CLI as packages. The LinkedIn plugin is the reference: it keeps a local mirror of your LinkedIn data and runs AI-assisted workflows under your direction — and doubles as the template for authoring your own.
ilml plugin install linkedin # from npm:ilml-plugin-linkedin
ilml plugin list # what's installed
ilml linkedin <command> # run a plugin command
# author one → see examples/plugin-author.mjs in the SDKBuild on your graph.
Your data, your code, your AI — all on one open graph.
Start your graph →