autobot: Skill for Claude Code

.claude/skills/autobot-test/SKILL.md

autobot-test is a skill for Claude Code from crystal-autobot/autobot. It costs 17 tokens per session (1,186 once invoked), scanned A, original, MIT.

Um conjunto de regras para testar o Autobot, um projeto escrito na linguagem Crystal. Ele define uma estrutura de teste em três partes: preparar, executar e verificar o resultado.

In plain words
What is it for?
Serve para organizar testes do Autobot, testar ferramentas e provedores, simular serviços externos e executar toda a suíte ou apenas um teste específico.
Why use it?
Evita testes inconsistentes e facilita localizar arquivos e executar verificações específicas. Também orienta como substituir serviços externos, como chamadas HTTP, por versões simuladas.

Skill for Claude Code

Written for Claude Code: installed under .claude/.

This is crystal-autobot/autobot's own configuration. It tells Claude Code how to work on autobot itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything autobot configures →

Needs its repository: it reads a path above its own folder, which exists only inside the repository. The line is require "../spec_helper".

Reuse

Borrowing it

Nothing to install: this file belongs to crystal-autobot/autobot. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/crystal-autobot/autobot/main/.claude/skills/autobot-test/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/crystal-autobot/autobot

Made for: Claude Code.

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 autobot-test

README.md
[![agentmods](https://agentmods.dev/badge/skills/crystal-autobot/autobot/autobot-test/github.svg)](https://agentmods.dev/skills/crystal-autobot/autobot/autobot-test)
Your own site
<a href="https://agentmods.dev/skills/crystal-autobot/autobot/autobot-test"><img src="https://agentmods.dev/badge/skills/crystal-autobot/autobot/autobot-test/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 autobot-test

Your own site · 80×15
<a href="https://agentmods.dev/skills/crystal-autobot/autobot/autobot-test"><img src="https://agentmods.dev/badge/skills/crystal-autobot/autobot/autobot-test.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 17 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,186 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 pass 7 Sept 2026
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.00017 $0.01186
Opus 5 $0.00009 $0.00593
Sonnet 5 $0.00003 $0.00237
Haiku 4.5 $0.00002 $0.00119

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

Security

Grade A, and why

autobot-test 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 11d 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.

.claude/skills/autobot-test/SKILL.md · 213 lines

How it starts

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

Testing Standards

AAA Pattern

Structure all tests with Arrange-Act-Assert and require the spec helper:

require "../spec_helper"

describe "MyFeature" do
  it "does something expected" do
    # Arrange
    tool = Autobot::Tools::MyTool.new
    params = {"key" => JSON::Any.new("value")}
    
    # Act
    result = tool.execute(params)
    
    # Assert
    result.success?.should be_true
    result.content.should contain("expected")
  end
end

Test File Organization

Mirror source structure:

spec/
├── autobot/
│   ├── providers/
│   │   ├── http_provider_spec.cr
│   │   └── registry_spec.cr
│   ├── tools/
│   │   ├── web_spec.cr
│   │   └── exec_spec.cr
│   └── config/
│       └── schema_spec.cr
├── spec_helper.cr
└── security_spec.cr

Running Tests

# Run all tests
crystal spec

# Run specific file
crystal spec spec/autobot/tools/web_spec.cr

# Run specific test by line number
crystal spec spec/autobot/tools/web_spec.cr:42

# Run with verbose output
crystal spec -v

# Run with color (default)
crystal spec --color

Mocking External Services

HTTP Provider Mocking:

class MockHttpProvider < Autobot::Providers::HttpProvider
  property responses = [] of HTTP::Client::Response
  property call_count = 0

  def post(path : String, body : Hash) : HTTP::Client::Response
    @call_count += 1
    responses.shift? || HTTP::Client::Response.new(500, body: "{}").tap { |r| r.consume_body_io }
  end
end

Tool Execution Mocking:

# Use dependency injection or monkey-patch for tests
class TestableExecTool < Autobot::Tools::ExecTool
  property captured_commands = [] of String

  def execute_system_command(cmd)
    @captured_commands << cmd
    {output: "mock output", exit_code: 0}
  end
end

Testing Error Conditions

Always test error paths:

it "handles missing parameters" do
  tool = Autobot::Tools::MyTool.new
  result = tool.execute({} of String => JSON::Any)
  
  result.error?.should be_true
  result.content.should contain("missing")
end

it "handles rate limiting" do
  limiter = Autobot::Tools::RateLimiter.new(
    per_tool_limits: {"exec" => Autobot::Tools::RateLimiter::Limit.new(
      max_calls: 1,
      window_seconds: 60
    )}
  )
  
  limiter.record_call("exec", "session")
  error = limiter.check_limit("exec", "session")
  
  error.should_not be_nil
  error.should contain("max 1 calls")
end

Read the full file on GitHub · 213 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. 11d ago First seen · 213 lines · 17 tokens per session scan A 4a974e1b9c2e

Subscribe to this mod's changes

autobot-test is a skill published in the GitHub repository crystal-autobot/autobot (45 stars, last pushed 2d ago), licensed MIT. It adds 17 tokens to every session and 1,186 once invoked, about $0.0001 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.

Related

Other skills, from other repositories