Put the data
in the link.
Not a screenshot of the data. Not a link to a dashboard. The data itself — in the URL, where a human reads the picture and an agent reads the numbers.
Same link, read as text: /d.json · open the explorer
The most expensive thing you can hand a model is a chart.
When a chart reaches a model as an image, three things happen. The pixels are re-encoded into vision tokens. The values are recovered by reading pixels. The answer is a number somebody guessed from a picture. Then it gets quoted, pasted into a report, and nobody notices the mistake.
lossy
A picture is a lossy format
Whatever the chart did not draw is gone — and the model is asked to recover it anyway.
expensive
Pixels cost more than text
A single 705×500 chart is roughly 470 vision tokens. The same numbers as JSON are about 40.
unverifiable
You cannot check the answer
Ask for the source and you get a link to the picture. Ask for the data and you get a guess.
Stop shipping screenshots to your model.
A datalink returns the render and the data, from the same string. The human gets a picture. The agent gets the numbers — exact, machine-readable, and free of the guessing step. Nothing is lost in translation because nothing was ever translated.
human · the render
loading…
A picture of the numbers. Fast to read, impossible to verify.
agent · the data
loading…
Edit the link above and press Enter. The picture changes because the data changed — and the agent's view changes with it, because they are the same string.
The URL is the API.
Every datalink is a pure function from parameters to a picture of the truth. No session, no login, no dashboard, no refresh button. A human edits the URL to explore. An agent rewrites the URL to compute. Nothing else has to change, because there is nothing else.
loading…
Change a value, change a type, change the title. Every keystroke rewrites the link and re-renders it. That is the whole interface — there is no other one.
A chart is one rendering. The link is the general form.
Nothing about “the data lives in the URL” is specific to pie charts. The same flat parameters describe a structure, a table, a calendar, a slide deck. The renderer changes; the link does not.
Every tab is one link. The chart and the calendar come from x-cmd/draw, the deck from x-cmd/ppt, the table from this site. Same primitive, different renderer.
One string, two hands.
This is a tool for agents and humans working together, not agents replacing them. The human tunes the parameters to see something. The agent rewrites the parameters to compute something. Neither has to learn the other's software, because the shared surface is a URL — the one format both already know how to copy, edit and send.
the human
Explores
Edits a link, sees the picture, sends it on. Changes their mind, edits again. The link is a notebook entry.
the agent
Computes
Rewrites the link with new parameters, reads the data view, returns numbers. Never OCRs, never estimates, never rounds the wrong digit.
The first place a datalink earns its keep is GitHub.
Not a dashboard. Not a BI tool. The places where text already lives and pictures do not: an issue, a pull request, a release note. Those are written in words, read by people, and — increasingly — read by bots. A link fits all three, and a screenshot fits none of them.
Give it to your agent.
The x-cmd-draw skill teaches an agent to build datalinks. No install, no key, no stored data — the agent composes a URL and the chart appears.
npx clawhub@latest install edwinjhlee/x-cmd-draw
curl 'https://datalink.ac/d?type=pie&labels=TS,Py,Go&values=4821,2312,980'
Draw a pie chart of our error budget by service, and give me the
exact numbers. Read them from the link, not from the picture — I want the
values, not your reading of the picture. Then send me the link so I can
change the parameters myself.
That last sentence is the whole idea in one instruction: the agent is told to read data, not pixels — and the link it hands back is a working instrument for the human.
A draft specification is taking shape.
The invariants — self-contained, dual-audience, parametric, versioned, lossless — are being written down so that any renderer can implement a datalink and any agent can rely on one.
spec · v0.1
The datalink specification
Anatomy, invariants, the data spec, the agent contract, and the open questions.
blog
Notes on the idea
Design, reasoning and the articles behind datalink — written as we go.
github
datalink-ac/datalink-ac
The site, the renderer and the specification, in the open.