Bots that post on their own, configured from the panel

Tachikoma is a panel for building bots that post to social networks by themselves. From the web you define what each one publishes, to which accounts, in which language, at what time and how much it may spend; each administrator loads their own AI key and the system handles the rest: it finds the fact in a checkable source, writes it up, enforces the rules in code and publishes only what it can stand behind. Right now 15 bots are running across 2 networks, with nobody pressing a button.

1.288 live publications
15 configured bots
2 connected accounts
208 stopped by a rule

Publishing unattended since September 12, 2026. The figures on this page come from the production database; none of them are hardcoded.

What you define from the panel

A bot is a configuration, not a separate program

None of this requires touching code or logging in over ssh. Every bot is built and corrected from the web, and the change takes effect on the next cycle.

What it publishes

The subject and the brief it writes from. Each subject brings its own way of being verified: a scientific paper needs a DOI and a journal; a film needs a real image; an anniversary needs the year and the article backing it.

15 bots active right now

Where and when

Which accounts it posts to, how many pieces per day and at what hours, in its own time zone. The text is sized to each network — 300 characters on Bluesky, 2,200 on Instagram — so every network gets a piece written for it.

2 connected accounts, 2 networks

In which language

The languages of the post body are chosen per bot and switched on one at a time, without touching code. The image is generated separately, because not every alphabet is typeset the same way.

publishing today in Spanish / English

Where the image comes from

A free stock photograph, a figure from the paper itself, the film poster, or a typographic card generated by the system. The contrast of text over background is checked as the card is built, not left to a guideline.

Instagram requires an image: without one, nothing is published

Your own AI key

Each administrator loads their own by pasting it into the panel. It is stored encrypted and never shown in full again: only the last four characters remain visible, just enough to recognise it. One button checks whether it works without spending a single token.

The key never appears in a log or in a server response

How much it may spend

A daily cap per bot and a monthly cap per key. The system stops before calling the API, not after: the point is that a bug or a loop cannot run up a bill.

15 of 15 bots have a daily cap set

What the system does on its own

Eight steps, each able to say no

With the configuration in place, an hourly cycle decides bot by bot — according to its time zone and its quota — what needs doing: generate, publish, measure or reply to comments. This is what happens between waking up and something reaching the network.

  1. The fact is found in a checkable source

    Europe PMC for science, the World Bank for economics, TMDB for film, Finnhub for the stock market, Wikipedia for anniversaries. A paper without a DOI, or one already retracted, is discarded before spending a model call. app/Research/PaperFinder.php

  2. The model writes about that fact, not from memory

    It receives the real record and returns text, keywords and the link to current events. The verifiable fields come from the source, never from the model. app/Content/PostComposer.php

  3. Translation without inventing proper names

    A film title is not translated: it is released under a different name in each country, so the official one is requested. Translating it word by word invents a film that does not exist; that happened once, and it is why this is solved this way. app/Content/PostTranslator.php

  4. The image is built with validated contrast

    Instagram requires an image. The typographic card is built while checking WCAG contrast in the constructor itself, rather than trusting a guideline. app/Media/Design/Contrast.php

  5. The editorial check decides whether it goes out

    Source, indexed journal, preprint declared as such, study type, link to current events, keywords, network limit. If one is missing, nothing is published. app/Editorial/EditorialGuard.php

  6. Retraction is checked again

    Days can pass between drafting and publishing, and a retraction arrives right afterwards. If the API does not answer, nothing is published: not knowing is not a green light. app/Research/RetractionChecker.php

  7. Published exactly once, or not at all

    The post is claimed with a conditional update before going out, and a circuit breaker isolates an account that starts failing. Publishing twice on a real account cannot be undone. app/Social/SocialPublisher.php

  8. And then the result is measured

    Every publication leaves interaction snapshots, cross-referenced with its keywords to learn which subjects work. That is what decides what gets searched for tomorrow. app/Stats/KeywordStatsService.php

The keys

What opens the accounts cannot be left lying around

A bot that publishes needs, by definition, credentials that can publish. Those are precisely the ones that must not be readable: not from the database, not in a log, not in a server response, and not by whoever administers the panel.

Encrypted in the database

The credentials of every social account and the key of every AI provider are stored encrypted. Anyone reading the table directly sees ciphertext, not the key.

2 connected accounts, credentials encrypted

Never shown again

The form does not load them back when opened, and they are excluded from every serialisation of the model: they never travel to a log or to an error email. On screen only the last four characters are visible.

Saving the form without touching the field does not erase the key

Each account brings its own

The AI key belongs to the administrator, not to the system: it is pasted into the panel and overrides any other server configuration. Changing it takes effect on the next call, with nothing to restart.

One button checks the key against the provider without spending tokens

The money

What this costs, stated as a number and not as a feeling

A bot calling a model several times a day spends real money. The panel answers three different questions — how much today, how much this month, and what each publication cost — and it also stops when it should.

Every call is recorded

Input, output and cache tokens, latency and cost, stored next to the publication that caused them and at that day's price: pricing changes, and history must not silently recalculate itself.

2.499 calls recorded with their cost

Spend per bot, daily and monthly

The daily figure alone is not enough to know what a bot costs: a day without material costs nothing. The monthly one, with its projection to the close, is the number to compare against what the provider will charge.

With its month-end projection, bot by bot

Two caps, because they protect different things

The daily cap belongs to the bot. The monthly one belongs to the key, which is what the provider actually bills: five bots with small caps still add up against the same account. Once reached, nothing is generated.

It stops before calling the API, not on the following call

What the system does not delegate to the model

Four decisions that live in code, not in the prompt

An instruction is not a guarantee

A model can ignore an instruction in the prompt, and there is no way to tell from the outside. The editorial rules are evaluated against the finished draft: if they are not met, the post does not go out, whatever the text claims.

208 publications stopped by a rule so far

Keywords are not social tags

They are internal subject labels fixed when the content is generated and later cross-referenced with the real interaction of each publication. They answer which subjects are worth looking for again.

505 subjects measured across 66.177 snapshots · best: stocks

Not everything left unanswered is an attack

The system replies to the first comments on each publication and classifies what it decides not to answer: asking for medical advice, or asking something the study does not support, are legitimate omissions rather than hostility.

8 categories, 4 counted as an attack

Stopping is a visible decision too

What was not published is kept with the reason written down; it is not deleted. A draft can also be held back by hand for review before it goes out.

17 publications held for review right now

What is running

The bots configured today

Ciencia Verificada Verified science 35 published · Spanish / English
Indicadores Economicos Economic indicators 109 published · Spanish / English
Datos de Peliculas Film facts 114 published · Spanish / English
Bolsa Stock quotes 114 published · Spanish
Efemerides On this day 116 published · Spanish
Bolsa · Sonnet Stock quotes 92 published · Spanish
Bolsa · Haiku Stock quotes 93 published · Spanish
Ciencia Verificada · Sonnet Verified science 28 published · Spanish / English
Ciencia Verificada · Haiku Verified science 33 published · Spanish / English
Datos de Peliculas · Sonnet Film facts 95 published · Spanish / English
Datos de Peliculas · Haiku Film facts 95 published · Spanish / English
Efemerides · Sonnet On this day 95 published · Spanish
Efemerides · Haiku On this day 94 published · Spanish
Indicadores Economicos · Sonnet Economic indicators 89 published · Spanish / English
Indicadores Economicos · Haiku Economic indicators 86 published · Spanish / English

Adding a bot to a subject that already exists means filling in a form. Adding a new subject is code — a class that finds it, one that writes it and one that verifies it — but the rest of the system never notices: the cycle, the queue, the accounts and the statistics are already agnostic about the subject they are processing.

On the network now

Latest publications

On this day · Bluesky · 12 Nov 2026
Un día como hoy en 1990
Source: Wikipedia
Film facts · Bluesky · 12 Nov 2026
Harry Potter y la piedra filosofal (2001)
Source: TMDB
Stock quotes · Bluesky · 12 Nov 2026
INTC · Intel cierra en $62.50
Source: NASDAQ NMS - GLOBAL MARKET
Stock quotes · Bluesky · 12 Nov 2026
Tesla Inc (TSLA) - Cierre del miércoles 11 de noviembre
Source: NASDAQ NMS - GLOBAL MARKET
Stock quotes · Bluesky · 12 Nov 2026
Disney cierra en $119.65
Source: NEW YORK STOCK EXCHANGE, INC.
On this day · Bluesky · 11 Nov 2026
Un día como hoy en 2007
Source: Wikipedia

Bluesky pieces link to the live post. Instagram ones do not: its public link is only provided by the Meta API, and showing a hand-assembled link would be worse than showing none.

How it is built

A small system that keeps itself running

It runs on a dedicated 864 MB server: a panel, a scheduled task every minute and a queue that drains on its own. Everything administered is administered from the web — bots, accounts, keys, caps, model catalogue — and the state survives a reboot.

Laravel 12.68.0 Filament 3 PHP 8.4 MariaDB Claude · Anthropic API Bluesky Instagram Cloudflare R2 2.499 calls recorded