← Hub Reporte 360 by juancarlo LIVE · 24/7
Steve-Atómica · the system, inside

The agent that already operates with you.

Not a demo, not a slide. A real AI agent living on Atómica's own server, connected to the data of all 31 accounts, answering in Slack in real time and building the report on its own. Here is everything: what it holds in its brain, how it routes each message, how we are building it and how it does it.

At a glance
One brain, two ways to work.
Steve lives on a machine dedicated to Atómica only. It does two things, all the time, without anyone turning it on.

Reactive, in Slack

You write and it answers. First an instant acknowledgement (in ~1 second, so you know it read you), then the full work with the real numbers.

push · ~2s
🕗

Proactive, every day

Every day at 8:30 it builds UCM's weekly summary and posts it on its own in the team channel. Nobody triggers it, it is a clock.

cron · 08:30 BRT
The system in numbers
1dedicated VPS
(Atómica only)
31accounts
mapped
24/7Claude Opus
non-stop
2Slack channels
listened
~1sto show
its face
What anyone on the team can ask it today
📊

A client's summary

"Steve, the summary for UCM" and it brings spend, conversations, CPL and trend for the week, compared to the previous one, with color: green better, red worse.

🗂️

Who each account is

It knows the 31 accounts inside. Ask it about the context, voice or methodology of any of them and it answers without you explaining.

🎨

Carousels as images

It knows where each brand's carousels are and now sends them to Slack as images, slide by slide. The render runs on the box, every slide exported clean.

Step by step, end to end
What happens, from trigger to visibility.
Five questions, five steps. This is the exact lifecycle of every request, whether you ask in Slack or the 8:30 clock fires on its own.
1
What happens?The trigger
Someone @mentions Steve in Slack (reactive), or the 8:30 clock fires on its own (proactive). That single event is the only thing that starts the chain. Nothing runs on a guess.
2
What does it load?The context
Before touching any number, Steve boots inside the brain and loads the client's context.md: who they are, their voice, their do and don't, their KPIs, plus its own persona and guardrails. It knows the client before it knows the data.
3
Where does it fetch the data?The source
It goes to Dashbo, the single source of truth for paid media. It pulls that account by its id, in two windows: this week and last week (cost, Meta and Google conversations). One client, one call at a time.
4
How does it process the data?The treatment
It compares week against week, computes CPL and the trend, and paints it with meaning: green better, red worse, yellow neutral. A 10 minute cache so it does not ask twice, one soft retry if Dashbo saturates, never a loop.
5
How does it give visibility?The surface
It posts the scannable summary into the Slack channel, in thread, and the 8:30 run lands on its own. Everything is a draft, a human approves before the client. And this cockpit is the visibility of the whole system, in one place.
Where it lives
Its own machine, six organs.
Everything runs on a dedicated Atómica VPS (Ubuntu, Claude Code Opus on 24 hours a day). It is not a tenant in someone else's box: the data, the agent and the identity are Atómica's, isolated.
👂

Ears and mouth

The bridge to Slack. It listens to the channels over Socket Mode (push, it does not keep asking every few seconds) and posts the answer in the right channel.

realtime / bridge.mjs
📐

The meter

The script that pulls the numbers from Dashbo (cost, Meta and Google conversations) and builds the summary with color, bars and trend.

dashbo-weekly-report.py
🧠

The brain

The full repository: the 31 accounts with their context, the methodology, the brand, the generators. Steve works inside this folder, that is why it knows every client.

projects/hub-atomica
🔐

The secrets

Slack, Dashbo, OpenRouter and Composio tokens, encrypted on the machine, outside git. The code reads them, never exposes them.

/etc/steve/atomica/env
🪪

The identity

Claude Code's access (a one year token). It is what gives it the Opus head to reason and execute.

/root/.claude
❤️

The heart

systemd services that keep it alive: automatic restart if something fails, it survives reboots, and the 8:30 clock.

Restart=always · timer
The model layer
🏃

L1 · the fast acknowledgement

A small, cheap model (via OpenRouter) that answers one line in ~1 second: "on it". So the team never feels it went silent.

🧩

L2 · the heavy brain

Claude Opus 4.8, the most capable model, with hands: it reads the context, runs the script if it needs a number, and formats the answer. Up to 12 steps, a 3 minute ceiling.

A message's journey
From "Steve, give me UCM" to the answer.
This is what happens, step by step, every time someone mentions it. The golden rule: L1 shows its face fast, L2 does the heavy work. "I am alive" is kept separate from "here is the answer".
1
SlackSomeone writes
"@Steve summary for UCM" in a listened channel. It arrives by push in ~2 seconds, no polling.
2
bridge.mjsFour filters, in order
Before bothering the brain, the bridge decides if the message deserves an answer:
🔁
Anti-loopignores its own messages, does not answer itself
📋
Channel on the listagent00 (the team's channel) and agentdevelopment
🪪
No repeatsstores the message id, does not answer twice
🙋
Addressed to itonly if @mentioned or you say "steve"
3
reactionAdds 👀
Immediate visual feedback: "I saw you, I am on it".
4
L1Acknowledgement in ~1 second
A small model returns a line with some warmth ("building the UCM one for you 🔥"). The team knows it started, without waiting for the whole report.
5
L2 · OpusThe real work
Claude Opus runs inside the brain: it reads the client's context.md, and if it needs a number, it runs the Dashbo script. It has hands (read, search, run commands) but bounded and safe.
6
SlackPosts the answer
The text Opus produces is the answer. By design it is forbidden from posting on its own: the system sends it to the right channel, in the right thread.
Two kinds of knowledge
What the brain holds, and what it pairs with.
There are two data layers, and Steve's whole job is to pair them. The repo brain knows WHO each client is. Dashbo knows HOW the money is doing. The brain barely changes day to day, the numbers change every run.
🧠

Static · the repo brain

Who each client is, their voice, their do and don't, their delivery cadence, plus the methodology and Atómica's own brand. It lives in the repo, the same one you have on your machine.

clients/ · brand/ · methodology/
📊

Live · Dashbo

The real paid media numbers per account: spend, Meta and Google conversations, this week against last. Pulled by id, fresh on every run.

dashbo · by account id

Steve reads the brain to know the client, then fetches Dashbo to know how it is going. The answer is the two layers put together.

What each client's folder holds
context.md · who they are, voice, do/don't, KPIs brand books · the brand's official PDFs voice-samples · real pieces of their voice sessions · meeting transcripts deliverables · what is approved and published drafts · Steve's v1 drafts
A real profile, in full · UCM, the pilot
This is the actual content the brain holds for UCM, the deepest profile today. Every line here is what Steve reads before it writes a word about UCM.
🏥

Who they are

Emergency medical services, B2C health, a membership model. Their client: families with an elderly member at home (35 to 60, the decision maker is a woman in 60%+ of cases). Their fear: "what if something happens to mom or dad and nobody arrives in time".

📡

Stack and cadence

Meta Ads, Google Ads, Analytics, Instagram, Facebook, and WhatsApp as the closing funnel. Daily lead report, weekly Monday review, monthly content schedule.

What its voice says yes to

Real testimonials (with signed permission), concrete response times, real professionals (no stock), resolved cases, an empathetic but professional tone.

What its voice never does

Alarmism ("if you do not sign up you could lose your mom"), direct competitor comparisons (regulatory risk), absolute promises, unvalidated medical data, a casual or meme tone.

The brain is also honest about what it does not know yet: UCM still has open gaps (target CPL, ROAS, the 5 voice samples, the official brand book). It marks them, it does not invent them.

The real book · 29 accounts mapped, ~840 hours a month
The brain is not 31 finished agents, it is 31 folders at different depths. UCM is the deepest because it is the pilot. Many are still skeletons. Deepening them is exactly the work ahead.
🧵

By industry

Textile leads with 11 accounts, then Medicine with 3, plus Pharma, Fishing, Recycling, Food, Agro and Transport. A book with a clear core and a long tail.

👤

By executive

Stefany, Maricel, Ana, Lourdes and Marie carry the accounts. The brain knows who owns each one (for UCM, Analicia leads it day to day).

📐

By depth

A handful of partial profiles (UCM, Sika, Werba, Paloma, Gramón), many still skeletons, none fully closed yet. That gap is the roadmap.

The 31 accounts in the brain · with their Dashbo id
UCM · pilot8236
Sika8241
Werba8237
Paloma8292
Balsoma Medical8227
Axell8244
Bagovit8301
Balsoma Dental8226
Cebala8086
CAT8288
Cetaphil8300
Corteva8243
Cuatroases8117
Diora8240
Gramón Bagó8291
Imperio8087
Kilafen8299
Kroser Bentancur8233
La Dolfina8163
Manto8239
Marcas Famosas8228
Medimport8298
Mitra8242
PepeGanga8234
Quantum8287
RPA8225
Summit8238
Tilsor8289
Uncle Jim8229
Urgenterap8230
UyTech8232

The ids live in docs/dashbo-clients.md. Steve uses them directly, without asking Dashbo for the list, to avoid spending calls or hitting the limit.

Where the numbers come from
Dashbo is the truth of the spend.
For each account, Steve pulls from Dashbo the current week against the previous one: channel (Meta and Google), cost and conversations. With that it builds a scannable summary, with semantic color and trend.
🗃️

10 minute cache

If it already asked recently, it does not call again. Saves quota and answers instantly.

🐢

Anti-saturation

It breathes between calls and, if Dashbo gets saturated, it retries softly once. It never enters a loop.

🛟

Never leaves the channel silent

If the data does not come, it says so in one line ("I will retry later") instead of failing silently.

The format that lands in the channel · color by what is good or bad
S
Steve APP · 8:30
📊 UCM · RESUMEN SEMANAL · draft ━━━━━━━━━━━━━━━ 💰 Inversión (7d): 🟡 vs last week 🎯 Meta Ads conversations 🔴 · CPL 🔴 🔍 Google Ads conversions 🟢 · CPL 🟢 📈 Spend split Meta ▓▓▓▓▓▓░░░░ Google ▓▓▓▓░░░░░░ ━━━━━━━━━━━━━━━ 🤖 auto · Dashbo · human approves

The real format of the summary (it posts in Spanish, the team's language). Values fill in with each run's live data. 🟢 better than last week, 🔴 worse, 🟡 neutral.

The method
Each filled account becomes an agent.
We are not building a generic chatbot. We are building a brain that knows Atómica and each client. The unit of progress is the context.md: each one loaded turns a folder into a piece of AI trained for that brand. That is why order matters.
Done
Phase 1 · The live agent
Dedicated VPS, Claude Opus 24/7, real-time in Slack with instant acknowledgement, automatic summary at 8:30, and the 31 accounts mapped in the brain (profiles at different depths). This already runs.
Now
Phase 2 · Present where the team works
Steve listening to the real operations channel (agent00), not just the test one. Deepen the most used profiles and start generating pieces in each brand's voice.
Next
Phase 3 · One agent per area
Accounts, Paid, Content, Design: each area with its own Steve, same brain. The channels already exist, each one just needs turning on.
Done
Phase 4 · Carousels as images in Slack
Visual rendering runs on the box: Steve exports each slide to an image and sends the carousel straight to Slack, not just a link. Next on this front: generate brand new pieces in each brand's voice.
Next
Phase 5 · Proactive alerts
If a CPL spikes or a budget burns, Steve warns before anyone notices. From answering when asked, to anticipating.
The limits, by design
What Steve never does on its own.
Trust is built with clear brakes. These rules are in the code and in its persona, they are not a promise.
Does not send anything to the client on its owneverything is a draft. Verónica, Ana or Marielena approve before it goes out.
Does not expose personal datanever end consumer data from any account.
Does not run the destructivefacing a high impact task it describes the plan and says "confirm with Juan".
Does not post to itselfonly the system posts its text. No loops, no background processes.
Does not invent numbersthe data comes from Dashbo or the repo. If it does not have it, it says so.
Does not use a generic voiceeach piece sounds like the client's brand, not like "an agency".
What this really is

Steve-Atómica is not one more tool: it is the team's operating system learning to run on its own. Today it already frees hours on the report and on knowing each account. The lever is in the brain: every profile we deepen makes an account more autonomous, and every area we turn on multiplies what the team can hand off to focus on the strategic, the client relationship and the decisions. It started by answering. It is on its way to anticipating.

Atómica × Hive Technology · Steve-Atómica lives on Atómica's own server · 24/7 · first cockpit deliverable