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.5 | $0.00014 | $0.01170 |
| Sonnet 5.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 1mo 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.
- 1mo 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 7mo ago), licensed MIT. It adds 36 tokens to every session and 2,924 once invoked, about $0.0001 per session on Opus 5.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
neuron-symfony-integration
Integrate Neuron AI agents into a Symfony 8 app, from packages, env keys, a Doctrine migration for the Neuron tables and services.yaml wiring to a shared agent bound per request with for(), a thread voter, JSON and AG-UI (CopilotKit) or useChat streaming with StreamedResponse, reload with pending approvals, Messenger…
ruby
Use when writing or refactoring plain Ruby outside Rails — scripts, CLIs, gems, libraries: Enumerable chains and blocks, module mixins and value objects, Bundler/gemspec packaging, whether metaprogramming earns its keep, Minitest or RSpec, Ruby 3.4/4.0 frozen-string hygiene. NOT Rails, ActiveRecord, or ActiveSupport…
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.
neuron-agent
Create, configure, and extend Neuron AI agents in PHP using providers, tools, chat history, memory, and custom workflow nodes. Use for Neuron Agent implementation, configuration, conversation lifecycle, and input/output extensions.
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.