dailyzen-skill: The tiny Claude skill that turns context into calm

A zero-dependency skill for Claude Code that stays dormant until the agent needs it, then pulls one quote from a local corpus and gets out of the way.

8 min read • View on GitHub • More from kropdx

A wide terminal workspace with a hidden drawer opening beneath an AI assistant cursor, revealing a neat stack of quote cards. The image shows that the skill is dormant until the agent summons it, which is the article's main idea about progressive disclosure and low context overhead.
The real trick is not the quote. It is the fact that the capability stays hidden until Claude Code decides it is relevant.
Key Takeaways

The skill that only exists when Claude needs it

Most tools are always present. You install them, run them, and remember them. dailyzen-skill is more interesting because it behaves like a latent capability: Claude Code can load it when the moment calls for it, then drop the extra context once the task is done. That is a small interface trick with a bigger implication. It treats software as something the agent summons, not something it must carry around all day.

There is no sprawling origin story here. The repo reads like a compact proof of concept, and that helps. When a project is this small, every file is a design decision, not just an implementation detail. You can see the shape of the idea without any product theater.

deliciously tiny specification

Simon Willison, Developer/Blogger · Paperclipped on SKILL.md

That phrase fits the repo well. The skill format stays small on purpose, which is exactly why it works inside an AI agent. The point is not to make Claude remember everything. The point is to let it load just enough structure to do one useful thing, then stop.

Why a zen quote belongs in the terminal

The quote itself is not the point. The point is timing. A short line of calm inside a terminal session can act like a rhythm break, the same way a timer or a saved snippet can interrupt momentum just enough to reset attention. The project is modest about this. It does not pretend to solve burnout. It just gives Claude Code a tiny, local ritual that can appear on demand.

A close-up of a precise mechanical selector lifting one card from a dense stack of quote cards while the rest remain untouched. The image explains that the script draws from a local JSON corpus, one item at a time, instead of reaching for a remote feed.
The quote engine is intentionally boring. It samples one record from a local file and prints it.

The three-file machine

The repo is intentionally tiny, and that is the design. .claude-plugin/ tells the marketplace how to discover the skill. skills/zen/SKILL.md is the contract the agent reads first. random-quote.js handles execution, and quotes.json is the local source of truth. The whole system is less a framework than a straight path from discovery to output.

The load path is the point. The agent sees almost nothing until the skill is needed, then the rest of the tool unfolds in stages.

That flow is what makes the repo feel agent-native. The agent does not need to memorize the whole skill. It needs just enough metadata to know when to open the next layer, and when to stop carrying context it no longer needs.

Why the random picker is more deliberate than it looks

Inside random-quote.js, the choices are plain but careful. The script uses Node built-ins only, reads the JSON file synchronously, guards against an empty list, and uses node:crypto.randomInt for uniform selection. None of that is flashy. All of it is the point.

const { randomInt } = require('node:crypto');
const fs = require('node:fs');
const path = require('node:path');

const quotes = JSON.parse(
  fs.readFileSync(path.join(__dirname, 'quotes.json'), 'utf8')
);

if (!Array.isArray(quotes) || quotes.length === 0) {
  process.stderr.write('No quotes available.\n');
  process.exit(1);
}

const choice = quotes[randomInt(quotes.length)];
process.stdout.write(`${choice.quote} - ${choice.author}\n`);

The JSON file also hints at future directions. The corpus contains 113 quotes, and each entry carries metadata such as rank and, in some cases, lens. That means the data model could later support filtering, weighting, or different moods without changing the outer contract. That kind of foresight is subtle, but it matters more than adding another dependency.

What this replaces

Seen beside older patterns, dailyzen-skill is a shift in distribution, not just in content. It is not trying to outdo fortune on novelty, or win on breadth against a daily digest product. It is trying to be the cleanest possible way for an agent to fetch a tiny capability from local files and then let go of it.

PatternTriggerWhere logic livesContext footprintData sourceBest use case
fortuneA person runs it manuallyShell and text fileNone inside agent contextLocal quote corpusA classic terminal ritual
Prompt hacksA user pastes instructionsInside the prompt itselfHigh and stickyWhatever the model remembersOne-off behavior
Platform digestsA service pushes a feedVendor backendOutside the agentServer-side curationAlways-on briefing
dailyzen-skillClaude loads the skill on demandSKILL.md plus Node scriptTiny until invokedLocal JSON quotesPortable agent-native micro-task

The table makes the category shift visible. dailyzen-skill is not a smaller fortune. It is a packaging model for tools that should stay invisible until asked for, then vanish again.

A tiny template for agent-native software

That is why this repo is worth attention even if you never want a zen quote in your terminal. It shows a clean pattern for building around agents: keep the manifest small, keep the data local, make execution deterministic, and let the capability appear only when it has work to do. In a future full of chatty tools, restraint becomes a feature.