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 skills add jorgegorka/ariadna --skill rails-securitygit clone --depth 1 https://github.com/jorgegorka/ariadnaWrote 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.
[](https://agentmods.dev/skills/jorgegorka/ariadna/rails-security)<a href="https://agentmods.dev/skills/jorgegorka/ariadna/rails-security"><img src="https://agentmods.dev/badge/skills/jorgegorka/ariadna/rails-security/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.
<a href="https://agentmods.dev/skills/jorgegorka/ariadna/rails-security"><img src="https://agentmods.dev/badge/skills/jorgegorka/ariadna/rails-security.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00036 | $0.02924 |
| Opus 5 | $0.00018 | $0.01462 |
| Sonnet 5 | $0.00007 | $0.00585 |
| Haiku 4.5 | $0.00004 | $0.00292 |
Grade A, and why
rails-security 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 9d 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 — 423 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Rails Security Conventions
Opinionated security conventions for Rails applications. Covers the most critical OWASP risks and Rails-specific pitfalls. For a full audit checklist with grep patterns, see AUDIT.md.
Part 1: Input Handling & Injection
SQL Injection — Always parameterize
Never interpolate or concatenate user input into SQL. ActiveRecord's hash and placeholder syntax handles this automatically.
UNSAFE:
User.where("name = '#{params[:name]}'")
User.order("#{params[:sort]} #{params[:direction]}")
ActiveRecord::Base.connection.execute("UPDATE users SET name = '#{name}'")
SAFE:
User.where(name: params[:name])
User.where("name = ?", params[:name])
ActiveRecord::Base.connection.exec_query("UPDATE users SET name = $1", "SQL", [name])
For order/group, allowlist the column before use:
ALLOWED_SORT_COLUMNS = %w[name created_at updated_at].freeze
scope :sorted_by, ->(col) {
order(ALLOWED_SORT_COLUMNS.include?(col) ? col : :created_at)
}
XSS — Rails escapes by default; do not bypass it
ERB auto-escapes <%= %>. Never call .html_safe or raw() on user-supplied or database content.
UNSAFE:
<%= params[:query].html_safe %>
<%= raw(@user.bio) %>
<%= @card.description.to_s.html_safe %>
<script>var data = <%= @data.to_json %>;</script>
SAFE:
<%= params[:query] %>
<%= sanitize(@user.bio) %>
<%= @card.description %>
<script>var data = <%= json_escape(@data.to_json) %>;</script>
Validate URL protocols before rendering user-supplied links:
<%= link_to "Website", @user.website_url if @user.website_url&.match?(%r{\Ahttps?://}) %>
Use \A / \z in regex validations — not ^ / $ (line vs. string boundaries):
validates :slug, format: { with: /\A[a-z0-9-]+\z/ } # SAFE
validates :slug, format: { with: /^[a-z0-9-]+$/ } # UNSAFE — allows newline injection
Command Injection — Use array form for shell calls
# UNSAFE — single string passes through the shell
system("convert #{params[:file]} output.png")
# SAFE — array form bypasses shell interpretation
system("convert", uploaded_file.path, "output.png")
stdout, _s = Open3.capture2("grep", "-r", query, "/data")
# If a shell string is unavoidable, escape the argument
system("tar -czf archive.tar.gz #{Shellwords.escape(directory)}")
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
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.
- 9d ago First seen · 423 lines · 36 tokens per session scan A cf5f15764b5a
rails-security is a skill published in the GitHub repository jorgegorka/ariadna (21 stars, last pushed 5mo ago), licensed MIT. It adds 36 tokens to every session and 2,924 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-30.
Other skills, from other repositories
vigilante-issue-implementation-on-ruby
Implement a GitHub issue end-to-end when Vigilante dispatches work for a Ruby repository with Bundler, test, lint, and security guidance.
ruby_expert
Ruby and Rails specialist. Productive, idiomatic web development with a focus on developer happiness.
python-feature-lifecycle
Guidance for package and feature lifecycle in the Agent Framework Python codebase, including stage meanings, feature-stage decorators, feature enums, and how to move APIs from one stage to the next.
python-development
Coding standards, conventions, and patterns for developing Python code in the Agent Framework repository. Use this when writing or modifying Python source files in the python/ directory.
cuopt-routing-api-python
Vehicle routing (VRP, TSP, PDP) with cuOpt — Python API only. Use when the user is building or solving routing in Python.
doca-argp
Use this skill for hands-on DOCA Arg Parser CLI work on a shipped sample or new DOCA-using app — adding / removing / renaming flags; wiring docaargpinit → register params → docaargpstart → docaargpdestroy in order; picking a parameter type from the full public enum (DOCAARGPTYPESTRING, INT, BOOLEAN, DEVICE, DEVICEREP…