datalink.ac
data in the link

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.

01 datalink as context The link is the context — not a pointer to a page you have to fetch, screenshot and describe.
02 datalink as agent context For an agent the link is the interface: it reads links, it writes links, it computes on links.
datalink.ac/d?type=pie&labels=TS,Py,Go&values=4821,2312,980
live render svg
Pie chart of stars by language

Same link, read as text: /d.json · open the explorer

THE PROBLEM

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.

THESIS 01

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.

one link

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.

THESIS 02

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.

the renderlive

loading…

the parametersedit me

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.

THESIS 03

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.

TOGETHER

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.

Why this beats a dashboard. A dashboard keeps the data on the server and hands out pictures of it. A datalink keeps the data in the string and hands out both. The dashboard needs a login, a round trip, and a screenshot. The link needs nothing — which is exactly why an agent can use it, and why it never goes stale.
WHERE IT STARTS

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.

release · v0.3.0bar
Bar chart of code composition by language

A release note wants to say “+2,400 lines, mostly TypeScript”. That sentence is a table. As a link it is also a chart — and it stays greppable, diffable and readable by whatever triages the repo.

the link
issue · “what does this do?”use case
Use case diagram of a developer using datalinks

Three paragraphs explaining a feature age faster than one diagram. And because it is a link, the next person can move a box instead of asking for a redraw.

the link
pull request · “what changed?”mind map
Mind map of the files a pull request touched

The one picture a reviewer actually asks for. As a link it is reviewable: change a parameter in the pull request and the picture changes with it. A screenshot cannot be reviewed.

the link
The reason GitHub comes first. Everything there is already text: a diff, a comment, a release note. A datalink drops into that world without asking anybody to change a habit — and a bot reading the issue gets the numbers, not a picture of them.
TRY IT

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.

install
npx clawhub@latest install edwinjhlee/x-cmd-draw
or just fetch a link
curl 'https://datalink.ac/d?type=pie&labels=TS,Py,Go&values=4821,2312,980'
a prompt worth pasting
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.

NEXT

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.