Widgets
Keep the numbers you check in the project: open tasks by person, sign-ups by source, commits by week. A widget is a short file your AI writes, Alcoven draws it, and everyone on the project and every AI reads it from the same file.
A widget is a file ending in .widget.md, in any folder of an Alcoven project. It names a question in a few lines. Alcoven checks every line, draws the answer on the project’s home or inside a document, and shows where each number came from and when. People change it the way they change any file, and every change is a new version.
# Open tasks by person
- Show: bars
- Measure: open tasks
- From: this project
- By: person
- On home: yes
Why it's here: who carries what before the launch.Ask your AI for one
Ask the AI you work with, in your words:
- “Keep open tasks by person on the project’s home.”
- “What is still waiting for agreement? Keep it on home.”
- “Chart commits to app/ by week for the last six weeks.”
- “Show sign-ups by source for the last 28 days.”
Claude, Claude Code, Codex or another AI app with Alcoven added (how to add it) checks the file with Alcoven before writing it, and writes it when you say yes. In Alcoven, ask the project at the foot of its home: the project’s agent proposes the file, and you put it on record. When you ask about something you’ll want to see again, the AI offers to keep it as a widget.
A widget, line by line
A title, then the lines, then one line on why the widget is there. Only Show and Measure are needed.
| Line | What it takes |
|---|---|
Show | number, line, bars, table or list. A table shows up to three measures; a list shows the releases, merged pull requests or commits of a linked GitHub folder. |
Measure | A measure a source names, like open tasks or sign-ups. Up to three, separated by commas, for a number, line, bars or table. |
From | Where the measure comes from: this project, a .source.md file, or a linked folder like app/. Needed when two sources have a measure of the same name; without it, a source file’s measure is read before this project’s. |
By | day, week or month, or a field to split by: person or top folder for this project, a field the source file names, or one your product sends with its numbers. A linked GitHub folder splits only by day, week or month. A line draws a split’s three largest values; bars list its largest six, or twelve when wide or open in the pane. |
Since | Where the days start: a date (2026-10-01), “28 days”, “12 weeks”, “this month” or “this year”. 28 days if left out. |
Compare | the period before, last year, or a target like “target 500”. |
Mark | releases of app/, merges to main in app/, or changes in design/. Marks the days on the drawing; the line can repeat. |
On home | yes, to draw it on the project’s home. A project’s home holds four. |
Size | small or wide. Small if left out. |
Owner | The member id of who looks after the widget, like m-4f2k9a. |
Until | A date after which the widget stops fetching, keeps its last numbers and leaves home. |
When a line can’t be read, Alcoven says which line and what it takes, in the widget, to the AI that checked it, and in its answer to a git push. A push is never turned down for a widget.
Where the numbers come from
A widget reads a source. The project itself and its linked GitHub folders are sources already. Google Analytics, Google Sheets and numbers your product sends are added on the project’s Sources page in Alcoven; a CSV in the project needs only its source file. Each of these is a .source.md file in a folder, naming its measures.
This project
The project’s own record, with nothing to set up: write From: this project, or leave the From line out when no source file has a measure of the same name. Split any measure by person (who a task is for, who a note asks, who is asked to agree or agreed, who made the change) or by folder, the top folder of each item.
| Measure | What it counts, by day |
|---|---|
open tasks | Tasks open at the end of each day: added, not done or let go yet. An agent’s proposed task counts once a person keeps it. |
tasks added | Tasks added each day. |
tasks done | Tasks marked done each day, and still done. |
tasks past due | Tasks still open at the end of each day whose due day had passed. |
open notes | Notes on documents and tasks not yet closed at the end of each day. |
notes closed | Notes closed each day, with a change or with the text kept. |
waiting for agreement | Parts that ask someone to agree and are not agreed yet, at the end of each day. |
agreements | Parts agreed each day. |
changes | Documents and files added, changed, moved or removed each day, by people and agents. An import, or a folder moved or removed, counts once in its folder. |
Each person sees the counts of what they can open: a task where they see its folder, a note or a part where they see its document. A part’s Got it, Keep and Let go are private, so parts count only by agreement.
A linked GitHub folder
A repository linked to the project offers releases, merged pull requests and commits on its branch, by day, week or month. Merged pull requests are read from the branch’s commits: a merge commit, or a subject ending in (#12). Alcoven reads up to 500 commits for a widget’s days, so keep a busy repository to a few weeks. A list shows the items themselves, and a Mark line puts releases or merges on another widget’s drawing.
Google Analytics
Someone who manages the project adds it on the Sources page with Continue with Google and picks one GA4 property. Alcoven reads its reports and can’t change anything in Google Analytics. Each measure is a name in your words, then a metric, with a filter if it needs one:
- sign-ups: eventCount where eventName is sign_up
- country: by countryThe second line is a field a widget can split by. Numbers are fetched again every six hours, and Google says its numbers for the last two days can still change. The source runs on the Google access of the person who added it. If they leave the project, it stops until someone who manages the project puts it on their own access.
Google Sheets
Someone who manages the project picks one spreadsheet in Google’s picker. Alcoven reads only that spreadsheet, and nothing else in their Drive. Google’s screen says Alcoven may change the files they pick; Alcoven only reads them. In the source file, Range says what to read and Days names the column holding each row’s date. Each measure is a column, by its header or its letter:
- orders: column C
- mrr: column mrr, latest
- region: by column regionlatest marks a level, such as MRR, which is read as it stands instead of added up. A by column line is a field to split by. Numbers are fetched again every six hours, on the access of the person who picked the sheet.
A CSV or TSV file in the project
Anyone who writes can make one, by hand or with their AI: a source file beside the data, with no access behind it.
# Delivery KPIs
- Service: File in the project
- File: data/kpis.csv
- Days: column date
## Measures
- orders: column orders
- on-time: column on_time, latest
- region: by column regionEveryone who sees both files sees the numbers. The widget reads the CSV as it is now, and its earlier versions stay in the project.
Numbers your product sends
Someone who manages the project makes the source on the Sources page, with the measures it takes, one a line (sign-ups, or mrr: latest for a level). Alcoven shows its key once. Keep it in the product’s secrets, never in its code. A new key stops the old one at once. The product sends each number to the source’s address:
POST https://app.alcoven.co/api/in/<project>/<source id>
Authorization: Bearer <the key>
Content-Type: application/json
{"measure": "sign-ups", "value": 1, "plan": "team"}measureis one the source file names.valueis a number, 1 if left out.at, if given, is when it happened, like2026-10-14T09:30:00Z: within the last 400 days and at most a day ahead. Now if left out.- Any other key is a field to split by, like
plan: up to five, each name starting with a lower-case letter, then lower-case letters, numbers and_. Text past 80 characters is cut. - Send up to 100 numbers in one request as a list, or as
{"points": [...]}. A request takes up to 64 KB, and a source takes up to 600 requests a minute. - Alcoven answers
200with how many it took,400with what to fix (and nothing taken),404for a wrong address or key,409when the project is archived,413for a request too large and429for too many. - Days are UTC. A measure is added up by day, or with
latestread as its last number of the day. Numbers are kept for 400 days.
The source file holds the address and the measures, so an AI asked to send a number from your product finds what it needs there.
Who sees which numbers
A person sees a widget’s numbers only when they can open both the widget’s folder and its source’s folder, and, for a CSV, the data file too. Otherwise the widget says the numbers aren’t open to them. This project’s counts follow each person’s own view. A source’s key is shown once, to the person who makes the source, and no file holds it. No AI, and nobody else on the project, is given a source’s key or its Google access.
When a number moves
On a line or bars of one added-up measure, such as tasks added, with no split by a field: when the number jumps or drops (by 30% or more, and by at least 3, against the average of the three days or weeks before), the widget asks What happened? and lists what changed on the project around that day, unless a note already sits near that day. Write the reason under it, on that day: it stays in the margin next to the number, for everyone and every AI that reads the widget. Your AI can do the same with Alcoven’s Add a note tool and the day it moved.
Widgets in documents
A line of a document that is only a link to a widget draws the widget there, live:
Orders climbed in the last week, after the new intake form went live.
[Orders per day](orders.widget.md)Anywhere else, on GitHub, in an editor or in a clone, it stays a link. For a monthly report, start a dated document with the widgets you want and your words around them, then press Write the numbers in: a new version keeps each widget’s numbers as text, as of the day you press it, so the record holds what you told people.
On the project’s home
Widgets with On home: yes are drawn on the project’s home, four at most. Hide takes one off your own home and changes nothing for anyone else. People who get the Monday summary email find the home widgets’ numbers in it.
For AI apps and agents
- Over MCP, Alcoven’s tools Ask a source for numbers (
numbers) and Check a widget before writing it (check_widget) run without any AI on Alcoven’s side.check_widgetreads a draft the way Alcoven will and names each line it can’t read. Reading a.widget.mdgives its numbers, notes by day and where they come from, and opening the project lists the widgets on home. - In a project’s folder, AGENTS.md describes widgets for Claude Code, Codex and other coding agents. After a
git push, Alcoven’s answer reads each widget back, or names the line to fix. - A widget’s numbers, where they came from and when, are the same for every AI that asks for the same person, so ask for the number with its source instead of computing it again.
If a widget says something is wrong
| What it says | What to do |
|---|---|
| “… is not a measure of any source you can open. Measures: …” | Use one of the measures listed, or add the measure to its source file. A source in a folder you can’t open is left out of the list. |
| “… is in more than one source (…). Add a From line naming one.” | Two sources have a measure of that name. Add a From line with the one you mean. |
| “… is below the text, so it is not read.” | Move the line up, with the other lines under the title. |
| “Fetching the numbers. They show when you next open this.” | Alcoven is asking the service. Open the widget again in a moment. |
| “Stopped: it ran on …’s Google access, and … is no longer on the project.” | Someone who manages the project opens the source and puts it on their own Google access. |
| “… reads nothing, since nobody added it as a source.” | A source file for Google or for numbers a product sends was written by hand. Someone who manages the project adds the source on the Sources page, and Alcoven writes its file. |
| “Not updated since …: …” | A fetch failed. Alcoven keeps the last numbers it had, says when they were fetched and why the new ones are missing, and tries again on the next fetch. |
Help
For anything else, write to info@alcoven.co.