Your engineers keep understanding the code their agents write.
After each task, the coding agent asks the engineer questions on the libraries and concepts it just used. VS Code asks the same questions, and a Slack post puts questions in front of the whole team every weekday.
Each engineer’s record is private to them by default. The team sees the standings and a Monday recap of what the questions covered.
filter panel close animation is janky on staging, hangs then snaps. fix
⏺ Read(src/components/FilterPanel.css)
⎿ Read 61 lines
⏺ Grep(pattern: "max-height", path: src/components)
⎿ 2 matches
⏺ Update(src/components/FilterPanel.css)
⎿ Updated 1 file, +11 -6
⏺ Bash(pnpm test src/components/__tests__/filter-panel.test.ts)
⎿ 4 passed
⏺ Fixed it in src/components/FilterPanel.css. Want me to check the other panels for the same rule?
Atomic Reps · CSSREP 01
A panel holds 4000px of content and closes with the rule below. What does the box you can see do during the 300ms?
.panel { max-height: 9999px; transition: max-height 300ms linear; }
.panel.is-closed { max-height: 0; }The agent asks first. VS Code and Slack follow.
After each task, questions on the topics the agent just worked on.
Claude Code, GitHub Copilot, Cursor, Codex or any MCP client. Each engineer runs one command in their repo, and the questions arrive in the same session when a task finishes.
npx atomicrepsHow the agent asks The same questions, in a panel beside the terminal.
The extension works in VS Code, Cursor and Windsurf. An engineer answers with a letter key and reads the explanation without leaving the editor.
code --install-extension AtomicReps.atomicrepsThe editor extension A daily post the whole team answers.
Questions post in the channels you pick, on the topics you pick for each channel. Engineers answer with one click, and the explanation follows right away. Try the one in the window.
Atomic RepsAPP9:00 AM
Rep of the Day
Someone copies a signed JWT out of localStorage and pastes it into an online decoder. What is visible to them?
🛡️ Auth · 🔥 Level 3
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
Every squad answers its own stack.
One channel means one mix. Give each squad its own channel, tuned to the stack it works in. You set it once in the Hub.
Atomic RepsAPP9:00 AM
Rep of the Day · #squad-frontend
The button is clicked while an older request is still in flight. What does useOptimistic render as it resolves?
🔥 Level 4 · React · #squad-frontend’s scope: React, TypeScript, CSS
Posted in #squad-frontend. Corpus row, quoted as written.
Set in the Hub, once per channel. Change it whenever the squad changes.
Platform
- Git11 topicsT3
- Testing strategies12 topicsT3
- API design12 topicsT4
- Databases12 topicsT4
- Kubernetes8 topicsT4
- Observability8 topicsT4
- Caching6 topics–
- Message queues6 topics–
- Accessibility10 topics–
Reps go to the team, or to 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 Q1 1970 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 top ten once three people are answering, anonymous until you pick a name.
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
The Monday recap lists what last week was about.
A thread under last week’s last rep with the questions that came up.
Atomic RepsAPP9:00 AM
Monday recap · #squad-platform
Last week’s reps, one of them with the answer that looked right:
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 explanation: CFS meters each 100ms window, not the average.
🚀 Kubernetes · 🔥 Level 3 · threaded under last week’s last 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.
One record, everywhere you answer.
A question someone answers wrong is asked again later: inside the coding agent they already use, in VS Code, in Slack or in the browser. Each engineer has one record, the same one wherever they answer.
- 01
The coding agent asks when a task finishes
Questions on the libraries and concepts the task used.
- 02
VS Code asks in the editor panel
The same questions, beside the terminal.
- 03
Slack posts from the topic plan
The channel gets the squad's mix, on weekdays, one post a day.
- 04
The browser holds the record
Each engineer's own history and what is due, private to them by default. Theirs to export or delete.
Wherever you answer, one record
222 classroom studies point the same way. Across 48,478 students, groups that were quizzed outscored groups that reread.
Against explaining it to yourself, the difference is small. Answering outperforms passive review. It has not been shown to outperform every other method.
No one has run the trial on programming skill. These studies shaped our design. They do not measure Atomic Reps.
One channel is free. Team is priced by headcount.
Pick the size that fits your team: five sizes, starting at 10 engineers. Each step up costs less per engineer.
Per engineer, a year
- $15610 engineers
- $14425 engineers
- $13250 engineers
- $120100 engineers
- $108250 engineers
One channel is free for everyone in it, no card. Team starts at the 10-engineer size, 30 days free to start.
Every size and the full sheet, on the pricing pageEvery /reps command, and what each one returns.
Click a command and the window at the top of the page runs it.
An apprentice each, that levels with the answers.
A standard emoji apprentice under every engineer, fed by correct answers, grown through the ranks. /reps pet shows its mood and its next level.
- 01Junior Backend Engineer
- 02Backend Engineer
- 03Senior Backend Engineer
- 04Staff Backend Engineer
🦆 🦉 🐢 🐧 🐶 🦊 🐹 🐸 🐙 🦏 🐱 🦝
Slack shows you this screen. Here is what each line means.
Eight permissions. Slack’s wording on the left, and what each one means for your team on the right.
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. We use the address to link a Slack name to 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 be posted in the channel you picked. The bot 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 command for practice, stats and help.
Details in the Privacy Policy, Security and the Data Processing Agreement. Export or delete your own record from your account page. Cannot add apps to your workspace yourself? Send it to whoever can.
AtomicRepsSet it up for your team
Each engineer runs one command in their repo, and the agent asks after the next task. Slack adds the daily post, the standings and the Monday recap.
Cancel during the 30-day trial and you pay nothing.
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.
