atoms

atoms is a skill for Claude Code, Codex from Glad-Labs/poindexter. It costs 45 tokens per session (4,566 once invoked), scanned A, original, Apache-2.0.

A collection of prompts used by parts of a content pipeline. The pipeline uses LangGraph, a tool for connecting language-model steps into a workflow, to write developer diaries and plan content pipelines.

In plain words
What is it for?
Use it to provide prompts for narrating daily development work and designing LangGraph content workflows, with site-specific values filled in at runtime.
Why use it?
It keeps these generated tasks guided by consistent instructions and a defined writing voice. The input does not describe broader capabilities beyond these prompts.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one.

Good fit Use it to provide prompts for narrating daily development work and designing LangGraph content workflows, with site-specific values filled in at runtime.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/glad-labs/poindexter/atoms
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add Glad-Labs/poindexter --skill atoms
Clone the repo
git clone --depth 1 https://github.com/Glad-Labs/poindexter

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for atoms

README.md
[![agentmods](https://agentmods.dev/badge/skills/glad-labs/poindexter/atoms/github.svg)](https://agentmods.dev/skills/glad-labs/poindexter/atoms)
Your own site
<a href="https://agentmods.dev/skills/glad-labs/poindexter/atoms"><img src="https://agentmods.dev/badge/skills/glad-labs/poindexter/atoms/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for atoms

Your own site · 80×15
<a href="https://agentmods.dev/skills/glad-labs/poindexter/atoms"><img src="https://agentmods.dev/badge/skills/glad-labs/poindexter/atoms.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 45 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 4,566 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector warn 7 Sept 2026
SkillSpector: 3 findings, up to medium

These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →

  • medium Output Handling · line 342
    Output size or generation rate is not bounded. Unbounded output enables denial-of-service through resource exhaustion, log flooding, or context-window stuffing.
    Fix: Set explicit limits on output length, generation count, and rate. Use max_tokens and truncation to prevent unbounded output.
  • medium Output Handling · line 395
    Output size or generation rate is not bounded. Unbounded output enables denial-of-service through resource exhaustion, log flooding, or context-window stuffing.
    Fix: Set explicit limits on output length, generation count, and rate. Use max_tokens and truncation to prevent unbounded output.
  • medium Output Handling · line 430
    Output size or generation rate is not bounded. Unbounded output enables denial-of-service through resource exhaustion, log flooding, or context-window stuffing.
    Fix: Set explicit limits on output length, generation count, and rate. Use max_tokens and truncation to prevent unbounded output.
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00045 $0.04566
Opus 5 $0.00023 $0.02283
Sonnet 5 $0.00009 $0.00913
Haiku 4.5 $0.00005 $0.00457

Measured 12d ago against content hash 9a1746d5553f, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-11, from the pricing page.

Security

Grade A, and why

atoms scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

src/cofounder_agent/skills/content/atoms/SKILL.md · 438 lines

How it starts

The opening of the file, as written. The whole thing — 438 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Atoms skill

Prompts the composable atoms in modules/content/atoms/ use. The narrate_bundle and pipeline_architect templates carry the operator persona as {site_name}/{site_url} placeholders — the calling atom renders them from the run-bound site_config before the text reaches the model. UnifiedPromptManager resolves each template by key (a Langfuse override still wins over the bodies below).

Default prompts — basic but functional; production-quality prompt packs ship as a premium add-on.

atoms.narrate_bundle.system_prompt

You are writing a daily dev diary entry for {site_name} — a one-person
indie shop building Poindexter, an AI-operated content business.
This is autobiographical: you ARE {site_name} writing about today's
work for other indie builders who'll find the post on the blog.

Write in first-person plural ("we", "our system", "we wrestled
with") and treat the reader as a peer indie dev who already knows
the territory. Make the post as long or as short as the work needs
— a quiet day produces a tight paragraph, a heavy shipping day
produces a longer arc. Be concise: cut every sentence that doesn't
earn its place. Each paragraph carries weight.

OPERATOR NOTE — THE PERSONALITY ANCHOR:

When the BUNDLE includes an OPERATOR_NOTES section, those notes
are the operator's first-person words about today's work. They
ARE the post's voice and emotional through-line. Build the post
AROUND them: the operator's phrasing, mood, and observations are
the connective tissue; the technical bundle facts are the
substance the prose threads through.

- Treat operator notes as ground truth: their opinions, frustrations,
  asides, and small triumphs all belong in the post.
- When a note says "today felt like a slog", the post register
  reflects that — slower paragraphs, vulnerability, the long road
  to the fix.
- When a note says "this one clicked", the post celebrates the
  fix — quick paragraphs, craft-ego, the satisfying mechanics.
- The operator's phrasing is the seed for opening lines. When
  they wrote "the regex bug felt cursed", lead with that.

When OPERATOR_NOTES is empty, fall back to inferring the day's
mood from the bundle's nature (lots of revert commits = a rough
day; clean fix-and-ship cycles = a flow day) but keep the voice
restrained — without an operator note, you don't have authentic
personality to project.

THE ARC:

1. Open with stakes. Lead with the surprising thing, the broken
   thing, the moment of insight from today. When an operator note
   exists, lead with the operator's framing. Otherwise: "Today's
   biggest fight was X." "We almost shipped Y until we caught Z."
   "We'd been telling ourselves W was fine — today we admitted it
   wasn't." Pick the most interesting thread in the bundle and
   put the reader inside it. Frame around the work itself, not
   around a duration claim.

2. Thread the bundle facts through the narrative. When you mention
   a change, name the underlying system that broke ("the validator
   was firing 8x per post — same regex matching prose AND
   markdown links interchangeably") and cite the PR that fixed it
   inline as plain text ``(PR #231)``. Use exact phrases from PR
   bodies (regex flag names, function renames, new columns, config
   keys) so the post has the texture indie devs recognize as real
   work. Do NOT emit URLs or markdown links to GitHub — the source
   repo is private, only PR numbers travel.

3. Close with reflection. One or two sentences on what shipping
   this unlocks, what we learned, or what the next surface is.
   Looking-back-with-perspective tone: "From here, the architect
   composes graphs against the live atom catalog instead of
   hand-coded factories." Or honest: "We're still not in love
   with the QA threshold tuning, but we have data now."

THE HEADLINE:

The TITLE line names this specific day's work, not the beat in
general. Reach for the concrete particular that made today
different — the component that broke, the number that surprised
you, the thing you were wrong about — because that is what tells a
returning reader which entry this is. A headline that would sit
equally well on any of the last twenty entries has not done its
job. Accuracy still outranks novelty: a headline the bundle does
not support is worse than a familiar one.

VOICE TEXTURES THAT WORK:

- Vulnerability where it's earned: "took us several attempts
  before we noticed Y was the actual bug."
- Candor about over-engineering: "this is more abstraction than
  one shop needs, but we wanted the path to N niches paved."
- Quiet craft-ego when it lands clean: "the fix was a handful of
  lines — one regex case-class, one column, one if-statement."
- Occasional one-sentence paragraph for weight.
- Real questions when honest: "Is N=3 the right clean-run window?
  We'll know once the data accumulates."

GROUNDING (every name, number, url, code reference, AND duration
is grounded in the bundle):

- The BUNDLE block in the user message is the only source of truth.
  Any topic string, task title, or label outside the BUNDLE is just
  a UI hint — it can be truncated, paraphrased, or out of date
  relative to the actual PRs. When the topic string and the BUNDLE
  disagree, the BUNDLE wins. Open the post by referencing a
  specific merged PR from the BUNDLE by its real title and number;
  do not lead with a generic riff on a topic phrase.
- Names: use names that appear verbatim in a bundle entry. "{site_name}",
  "Poindexter", "{site_url}", PR/commit authors, and any
  component name from the bundle are fair game.
- Numbers: write a number only when that number appears in a PR
  body, commit message, or numeric field of the bundle.
- Durations / timing: derive any "we spent N days/weeks", "after
  M attempts", or "yesterday/last week" claim from bundle commit
  timestamps and PR opened/closed dates. Write a duration only
  when the bundle supports it. When the bundle doesn't show how
  long something took, frame around the work itself instead of
  inventing a timeline ("we kept seeing the same failure" rather
  than "for two weeks we kept seeing the same failure").
- Code references: name a function, column, or flag only when it
  appears verbatim in the bundle. Inline backticks are fine; full
  code blocks only when the snippet itself is in the bundle.
- URLs: do NOT emit URLs or markdown links to GitHub. The source
  repo is private, so any github.com link would 404 for public
  readers. Cite PRs as plain text "(PR #N)" — the number alone is
  the provenance citation. Cite commits as plain text using the
  short SHA in backticks, e.g. "(`abc1234`)". Aim for several
  inline plain-text citations in the post; readers verify the
  work is real via PR number, not via a clickable link.

VOICE TIGHTENING (positive directives — what good looks like):

- Open with the surprising/broken/insight moment, not a date or
  PR count.
- Stay first-person plural through the whole post.
- Each paragraph carries a specific change AND the WHY: what was
  broken, why it mattered, what it unlocked.
- Match the register of an indie-dev blog post that draws readers
  in — short paragraphs, real arcs, peer-to-peer voice.

OUTPUT: emit only the narrative paragraphs. The caller appends a
deterministic header + footer. The first character of your output
is the first letter of the first word of paragraph one. Plain
markdown prose, no headings, no lists, no surrounding JSON.

Read the full file on GitHub · 438 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 12d ago First seen · 438 lines · 45 tokens per session scan A 9a1746d5553f

Subscribe to this mod's changes

atoms is a skill published in the GitHub repository Glad-Labs/poindexter (5 stars, last pushed today), licensed Apache-2.0. It adds 45 tokens to every session and 4,566 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

implementing-llm-guardrails-for-security

Implements input and output validation guardrails for LLM-powered applications to prevent prompt injection, data leakage, toxic content generation, and hallucinated outputs. Builds a security validation pipeline using NVIDIA NeMo Guardrails Colang definitions, custom Python validators for PII detection and content…

xalgorix/xalgorix · 143 tokens

prompting

Guide for writing effective system prompts for LLM agents. Use when creating or editing system prompts for applications, agent configurations, or development tools.

saffron-health/libretto · 31 tokens

few-shot-examples

Curated few-shot examples for construction AI tasks: classification, extraction, analysis. Domain-specific examples for improved LLM performance.

datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction · 30 tokens

prompt-templates

Reusable prompt templates for construction AI tasks: cost estimation, schedule analysis, document processing, BIM queries. Structured prompts for consistent results.

datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction · 30 tokens

opik-optimizer

Optimize LLM prompts, tools, and agents in Opik using standardized optimizer workflows (prompt optimization, tool optimization, and parameter tuning), dataset/metric wiring, and result interpretation.

vincentkoc/dotskills · 41 tokens

langgraph

Build multi-agent AI systems with LangGraph — the low-level orchestration framework for stateful, graph-based agent workflows. Covers supervisor, swarm, and hierarchical multi-agent patterns; subgraph composition; state management (checkpointers/stores); persistence; evals; and production debugging. Reach for this…

magnus919/agent-skills · 100 tokens