Sharper engineers, before the first meeting.
Your team learns while their prompts run. A question lands in the channel each morning; sprints, insights, skill reports and the leaderboard sit behind /reps. It waits in the channel and never nags anyone to answer.
Free on one channel. No card, no account.
Acme Eng
Atomic RepsAPP9:00 AM
Rep of the Day
A team puts an internal API key inside a signed (not encrypted) JWT. Why is that unsafe?
π‘οΈ Auth Β· π₯ Level 3 Β· #securityβs scope: AppSec, auth, crypto
Sofia Reyes8:40 AM
rotating the JWT signing keys tonight, low-traffic window
Elin Holm8:45 AM
reminder we still have a CORS-but-no-CSRF gap on the write endpoints
The product, playable, not a screenshot. Answer it here.
Free on one channel Β Β·Β 30 seconds to install
Type /reps. Slack does the rest.
Every command answers where you typed it, in Slackβs own blocks, only to you. Pick a row and the window above shows what comes back.
Practice
Your data
Apprentice
Settings
Atomic RepsAPP9:00 AM
Rep of the Day
A team puts an internal API key inside a signed (not encrypted) JWT. Why is that unsafe?
π‘οΈ Auth Β· π₯ Level 3 Β· #securityβs scope: AppSec, auth, crypto
Only visible to you
Atomic RepsAPP9:03 AM
π Close. Subtle distinction.
The answer
C: A signed JWT proves integrity, but its base64url claims are fully readable by anyone holding it
JWS (RFC 7515) gives integrity and authenticity, not confidentiality. Header and payload are base64url plaintext anyone can decode in one line. Use JWE or keep secrets server-side.
OWASPWhat /reps shows the moment you type it: Slackβs autocomplete with every command, then the answer as the bot posts it.
Free on one channel. Team is priced per engineer.
Free is one channel, every level, for everyone in it. Team turns the rest on for the whole workspace, from ten engineers up, and the bigger the team the less each engineer costs.
Team starts at ten engineers. Add more and every engineer costs less, down to $63.96 at 250. 30 days free to start.
Per engineer, a year
- $14910 seats
- $119.6025 seats
- $99.8050 seats
- $79.90100 seats
- $63.96250 seats
One channel is a habit. Team is a practice.
Six things switch on. You aim them for each squad; your engineers just answer.
Every squad answers its own stack.
One channel means one mix. Give each squad its own, aimed at what it runs. You pick the topics per channel in the Hub, below.
- #squad-frontendReact
The button is clicked while an older request is still in flight. What does useOptimistic render as it resolves?
- #squad-platformKubernetes
During a rolling deployment users briefly see 502s. The readiness probe is configured. What is happening?
- #squad-dataPostgres
A busy table shows index bloat but negligible heap bloat. What explains the asymmetry?
Platform
- Git11 topicsT3
- Testing strategies12 topicsT3
- API design12 topicsT4
- Databases12 topicsT4
- Kubernetes8 topicsT4
- Observability8 topicsT4
- Caching6 topicsβ
- Message queues6 topicsβ
- Accessibility10 topicsβ
Reps land on the team, or on one person you pick. You set what gets practiced, never who gets watched.
Ask, and a report comes back to you.
/reps skills, whenever you like. Streak, accuracy, favourite topic, the domains you have touched this quarter.
Only visible to you
π Your Q2 2026 Skill Report
πͺ Total Reps
148
π― Accuracy
82%
π₯ Best Streak
11 days
π Domains Practiced
7 of 12
π Favorite topic: React (31 reps)
βοΈ Backendββββββββββ9
π¨ Frontendββββββββββ8
π Dataββββββββββ7
π DevOpsββββββββββ6
π§ͺ Testingββββββββββ6
π Securityββββββββββ4
A board with names on it, once three people are answering.
Ranked by correct, then by attempts, ten places. You appear as Player-4314 until /reps nickname puts your name up.
Only visible to you
π Standings
1.Astrid B.Β· 142 correct Β· π₯ 9
2.Erik L.Β· 131 correct Β· π₯ 7
3.YouΒ· 121 correct Β· π₯ 6
4.Hannah W.Β· 98 correct Β· π₯ 4
5.Tyler B.Β· 87 correct Β· π₯ 2
Ranked by correct, then attempts Β· /reps nickname puts your name up
One sharp thing about the stack you run.
/reps insight postgres on request. Or a topic routed to a channel, on the days you pick.
Only visible to you
When does a partial index outperform a full B-tree index?
If 95% of your orders are status = 'completed' and queries only filter for status = 'pending', a partial index on (created_at) WHERE status = 'pending' is 20x smaller and faster than indexing the entire table.
π‘ Daily Insight Β· π Postgres
Friday tells you what the week was about.
A thread under Fridayβs rep with the questions that came up.
Atomic RepsAPP4:00 PM
Friday recap Β· #squad-platform
Three reps this week. The one that split the room:
CPU throttling on a container with a 500m limit. Usage shows 200m on average. How is this possible?
Looked right: βA reporting lag in metrics-server.β Β The tell: CFS meters each 100ms window, not the average.
π Kubernetes Β· π₯ Level 3 Β· threaded under Fridayβs rep
Each thing that arrives has its own setting, including off.
The recap weekly, monthly, quarterly or never. Setup nudges weekly or off. /reps mute for your own DMs.
Free on one channel. Team turns the six on.
It arrives where the work already is.
Field guide to your future apprentice.
The reason an engineer is still answering on day forty. On Team every engineer gets one, and in Slack it arrives as an egg in your App Home. /reps pet hatch opens it. Twelve species, one roll, no choosing. Do a rep with whoever comes out and it learns what you just proved, then climbs the same role ladder you climbed.
Fig. 1
Anas intrepida
The Duck
Bold and game, learning to look before he leaps.
Fig. 2
Bubo mensor
The Owl
Gruff old-timer, secretly your biggest fan, measures twice.
Fig. 3
Testudo serena
The Turtle
Unhurried, kind, the calm in the room.
Fig. 4
Pygoscelis fortis
The Penguin
Nervous, kind, brave anyway.
Fig. 5
Canis optimista
The Dog
Eager optimist, takes every correction as a gift.
Fig. 6
Vulpes elegans
The Fox
Curious puzzle-lover, learning that simpler wins.
Fig. 7
Cricetus sincerus
The Hamster
Small and earnest, honest about real progress.
Fig. 8
Rana unifocus
The Frog
Lively, learning to finish one thing first.
Fig. 9
Octopus deliberans
The Octopus
Many-angles thinker, learning to decide and move.
Fig. 10
Ceratotherium tenax
The Rhino
Strong and gritty, learning to aim not barge.
Fig. 11
Felis solivaga
The Cat
Self-sufficient perfectionist, learning that asking is not weakness.
Fig. 12
Procyon reficiens
The Raccoon
Scrappy tinkerer, learning to clean up what he builds.
Life cycle
egg β junior β mid β senior β staff β lead
Ten career paths, backend to people management. Real role titles, real skill bars, and it can only climb on what it has learned.
Diet
Pebbles, earned from your correct answers. Spent at its shop on courses, snacks, and gear. Tiers unlock on skill: it cannot buy its way past what it hasn't learned.
Graduation
Once it tops the ladder you can send it off, grown into who you raised, with a title and a career of its own. Then a fresh egg, a bare desk, and the Pebbles you saved.
Field recording Β· after a rep
βDove in before I read the whole thing, caught myself, slowed down, then it clicked. Next.β
All voices and observations transcribed verbatim from the species files. Each figure is the emoji Slack shows beside its name; nothing is drawn that you will not meet. Which species hatches is the egg's decision alone. Species is a tilt, not a class.
Slack shows you this. Here is our half of it.
Eight permissions, in Slackβs own wording on the left and ours on the right. Put this page beside the install screen and the sentences match.
It cannot, and will not
- Read messages in any channel or DM.
- Open files, canvases or huddles.
- Post anywhere you did not pick.
- Message anyone who typed /reps mute.
- Train AI on your answers, or sell or share them.
What it needs, and why
- Channel names. So the picker has something to list.
- Who is in the workspace. So an answer counts toward the person who typed it.
- One email address at a time. When the installer claims the workspace, and the first time a member answers, so a Slack name becomes the right account.
- Permission to post, and to DM. The daily rep in the channel you picked. DMs only if you move delivery there, or for the apprentice.
Information Atomic Reps can view
View basic information about public channels in your workspace
channels:readChannel names and ids, so the picker has something to list. Never what is said in them.
View basic information about private channels that Atomic Reps has been added to
groups:readThe same list for private channels, and only the ones you invite the bot into.
View people in your workspace
users:readSo an answer counts toward the person who typed it and not a stranger.
View email addresses of people in your workspace
users:read.emailSlack grants this at install. We read nothing at install. We read one address at a time: when the installer claims the workspace, and the first time a member answers. It is how a Slack name becomes the right account.
Actions Atomic Reps can take
Send messages as @atomicreps
chat:writePost the daily rep, then edit it at the end of the day to close it.
Send messages to channels @atomicreps isn't a member of
chat:write.publicSo you never have to /invite the bot before the rep can reach the channel you picked. It posts to the channels you choose and nowhere else.
Start direct messages with people
im:writeDirect messages, if you move delivery to DMs, plus the apprentice's updates. /reps mute ends them.
Add shortcuts and/or slash commands that people can use
commandsRegisters /reps, the way in to practice, stats and help.
Details in the Privacy Policy, Security and the Data Processing Agreement. Coaching, not surveillance states what a memberβs record is for. Export or delete yours from your account page.
AtomicReps30β³You already answered one
The rest is your channels: a real question every morning, an icebreaker when you want the standup to start with one, and a team that keeps showing up.
Free. No card, no account.
Questions about the integration: support@atomicreps.com. We aim to answer within two business days. See also Support. Atomic Reps is not created by, affiliated with, or endorsed by Slack Technologies, LLC.
