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.
npx agentmods add skills/crmne/ruby_llm/contributingnpx skills add crmne/ruby_llm --skill contributinggit clone --depth 1 https://github.com/crmne/ruby_llmWhat 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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00060 | $0.01312 |
| Opus 5 | $0.00030 | $0.00656 |
| Sonnet 5 | $0.00012 | $0.00262 |
| Haiku 4.5 | $0.00006 | $0.00131 |
Grade A, and why
contributing 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 2d 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.
How it starts
The opening of the file, as written. The whole thing — 92 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Contributing to RubyLLM
Read AGENTS.md at the repo root first: it has the ground rules, the command table, and the architecture constraints that archspec check enforces. This skill adds the step-by-step recipes.
The fast loop
bundle exec rspec --tag ~live # unit tests only, no keys, seconds not minutes
bundle exec rspec spec/ruby_llm/chat_spec.rb:42 # one example
overcommit --run # what the commit hook will run
Run the fast loop while developing. Run overcommit --run before declaring anything done: it runs RuboCop (auto-correct), Flay (duplication), archspec (architecture), and the unit suite, and the commit fails if any of them do.
Working with cassettes
Specs tagged :live replay recorded provider traffic from spec/fixtures/vcr_cassettes. The cassette name derives from the example's full description, so renaming an example orphans its cassette.
To re-record after changing request shapes:
rake vcr:record[openai] # deletes that provider's cassettes, reruns the suite
rake vcr:record[openai,anthropic] # several providers
rake vcr:record[all] # everything (long, needs many keys)
Recording needs real API keys in .env. To re-record a single spec, delete its cassette file and run the spec with the provider's key set.
Rules that bite:
- A failing
:liveexample deletes its own cassette on purpose. Do not "fix" a red spec by restoring the cassette; fix the code, then re-record. - Review every new or changed cassette for leaked keys and personal data before committing. The pre-commit hook runs gitleaks, but eyes first.
- A spec that can neither replay (no cassette) nor record (no key) skips with a message naming the env var it needs. That is expected on a fork without keys.
Adding or changing a chat option
- Add
with_xtolib/ruby_llm/chat.rb(chainable, returnsself). - Add the matching bare
xclass macro tolib/ruby_llm/agent.rb. The archspec build fails without it. - Thread the option through the
Providercontract, never by referencing a concrete provider or protocol fromChat. - Implement per protocol in
lib/ruby_llm/protocols/*(render_*for request payloads,parse_*for responses). - Spec it in
spec/ruby_llm/chat_<x>_spec.rb; add live coverage over the matrix inspec/support/models_to_test.rbwhen providers differ. - Document it on the matching page in
docs/_core_features/.
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.
- 2d ago First seen · 92 lines · 60 tokens per session scan A 145fc2bc2fda
contributing is a skill published in the GitHub repository crmne/ruby_llm (4,334 stars, last pushed yesterday), licensed MIT. It adds 60 tokens to every session and 1,312 once invoked, about $0.0003 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-30.
Other skills, from other repositories
dcf-model
Build discounted cash flow valuation workbooks in Excel.
baoyu-article-illustrator
Article illustrations: type × style × palette consistency.
openhands
Delegate coding to OpenHands CLI (model-agnostic, LiteLLM).
agentmail
Use when an agent needs AgentMail CLI email inboxes.
keybindings-help
Use when the user wants to customize keyboard shortcuts, rebind keys, add chord bindings, or modify /.claude/keybindings.json. Examples: "rebind ctrl+s", "add a chord shortcut", "change the submit key", "customize keybindings".
mem0-vercel-ai-sdk
Mem0 provider for Vercel AI SDK (@mem0/vercel-ai-provider). TRIGGER when: user mentions "vercel ai sdk", "@mem0/vercel-ai-provider", "createMem0", "retrieveMemories", "addMemories", "getMemories", "searchMemories", "mem0 vercel", "AI SDK provider", "AI SDK memory", or is using generateText/streamText with mem0. Also…