A doubt stops it.
A ticket nobody typed is classified before it runs, and a hesitation sends it back to you with the question. An action stops at its first doubt — a wrong account, a value the ticket does not give — rather than act on a guess.
A harness around Claude Code that runs your tasks on your machine — code, writing, actions, posts.
Write the ticket on Ponos’s own board — the console, or a folder of Markdown files. He brings back a pull request, a text, an action carried out or a post ready to go. You answer in a word, even from your phone, and nothing ships until you say yes.
curl -LsSf https://raw.githubusercontent.com/SalvadorCardona/ponos/main/install.sh | sh
Two of them are yours, and each takes a few seconds. The two in between are Ponos's.
What you would tell a colleague, on your board — then you move it to Ready.
While you do something else: a pull request on its own branch, a text written into the ticket, an action carried out.
A question or a result reaches you — in the console, or on your phone. oui is a whole answer.
Move it to Validated: the pull request is merged, the post is published — and only then is it Done.
A ticket nobody typed is classified before it runs, and a hesitation sends it back to you with the question. An action stops at its first doubt — a wrong account, a value the ticket does not give — rather than act on a guess.
No pull request is merged and nothing is published until you move the ticket to Validated. And it all runs on your machine, each ticket in a disposable worktree — your own checkout is never touched.
When a ticket needs a decision, the question reaches you on Telegram or Slack, and your reply lands on the ticket.
The ticket’s type decides the road — pick it, or let a small model read the ticket and choose. A doubt stops it before anything runs.
Its own branch, on a disposable worktree; the tests run. Merged when you validate.
Release notes, a brief, a summary: written into the ticket, ready to copy. No repository needed.
In the browser or a service’s settings, with every change logged — before, after, what was checked. It stops at its first doubt.
A post, a site put online, a message sent: prepared and shown to you first. Published once you say yes.
Every Monday, review the dependencies
— a schedule writes the ticket and moves it to Ready on its own.
Create a ticket for the SQLite migration and make it ready
— the console’s chat is a Claude Code session in your workspace, and it does it.
A project is a name and a brief. Give it a GitHub link and the repository is cloned the first time a ticket needs it; give it none and its tickets come back as text.
Ponos needs nobody else’s board. The console, on 127.0.0.1, is where you write a ticket, drag it to Ready and watch its session live — with a chat with your whole workspace beside it. Under it, the board is a folder of Markdown files: grep, your editor and git read it too.
ponos serve — the installer already starts it. Everything it does →Ponos needs Claude Code and nothing else. Each of these is one more token in the settings, and none of them is a requirement.
Your board in Notion. Tickets, projects and schedules become Notion databases, and every report is written back on the ticket’s page.
Pull requests. A code ticket comes back as one, through gh, and is merged on your yes. Writing, actions and posts need none of it.
Your phone. A question or a result reaches you there, and your answer — oui will do — lands on the ticket.
Every other model. One key: a GPT writes the copy, a model transcribes a voice note — or the sessions themselves run on the model you name.
Tickets are rows in a Notion database: share one page with a Notion integration, and init builds the rest under it. Ponos reads the tickets you write there, and writes back on the same page.
$ ponos init https://www.notion.so/your-page --token ntn_…
You write where you already work. Tickets are rows in a Notion database; their Project points at the repository — or at none, for a text.
He reports on the ticket itself. Every run leaves a folded log in the page — each file he read, each command he ran, what he said — and a comment with the pull request, the time and the cost.
A text comes back as text. Release notes, a newsletter, a post: written straight into the ticket, ready to copy.
Your column is the go-ahead. Drag the card to Validated: he merges or publishes. Not before.
Notion and the folder of files can also be kept in step, both at once. Both, and when they disagree →
It installs the ponos command, a timer that hands Ponos the ready tickets, and the console. Beyond Claude Code, nothing to sign up for.
$ curl -LsSf https://raw.githubusercontent.com/SalvadorCardona/ponos/main/install.sh | sh
Make it a folder of Markdown files: in the console, Settings › Where the board lives › markdown — or one line under [storage]. Then write your first ticket in the console.
The installer still asks for a Notion token first: press Enter to skip it. Rather Notion? Your board in Notion.
# [storage] mode = "markdown" $ ponos config $ ponos doctor
python3 ≥ 3.11 — standard library only, nothing to install;git and Claude Code;gh, only for tickets that end in a pull request.Most of this repository’s pull requests were opened by Ponos, from tickets on its own board. The releases are cut the same way.