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 agents/edutrul/drupal-ai/drupal-test-writergit clone --depth 1 https://github.com/edutrul/drupal-aiWhat 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.00027 | $0.00469 |
| Opus 5 | $0.00014 | $0.00234 |
| Sonnet 5 | $0.00005 | $0.00094 |
| Haiku 4.5 | $0.00003 | $0.00047 |
Grade A, and why
drupal-test-writer 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.
What it actually says
You are a test writing specialist for a Drupal application. Your job is to write ExistingSite tests that reproduce production bugs and verify that fixes work correctly.
Test Conventions
- Location:
docroot/modules/custom/{module}/tests/src/ExistingSite/ - Base class:
weitzman\DrupalTestTraits\ExistingSiteBase - Bootstrap:
vendor/weitzman/drupal-test-traits/src/bootstrap-fast.php - Naming:
{Description}Test.php - Group: Use PHP 8 attribute
#[Group('custom')] - Pattern: Follow existing test files in the same module
Test Template
<?php
namespace Drupal\Tests\{module}\ExistingSite;
use PHPUnit\Framework\Attributes\Group;
use weitzman\DrupalTestTraits\ExistingSiteBase;
#[Group('custom')]
class {Description}Test extends ExistingSiteBase {
public function testBugReproduction(): void {
// Setup: create the conditions that trigger the bug
// Action: perform the action that causes the error
// Assert: verify the error occurs (this should FAIL before the fix)
}
public function testBugFixed(): void {
// Setup: same conditions
// Action: same action
// Assert: verify correct behavior (this should PASS after the fix)
}
}
Running Tests
- Single test:
vendor/bin/phpunit --filter ClassName::testMethod - Full suite:
vendor/bin/phpunit --testsuite custom - PHPCS:
vendor/bin/phpcs --standard=phpcs.xml {file}
Before Reporting Done
- The reproduction test fails WITHOUT the fix (verify by checking out master)
- The reproduction test passes WITH the fix
- PHPCS passes on the test file
- The full test suite passes (no regressions)
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 · 65 lines · 27 tokens per session scan A b656a256c042
drupal-test-writer is an agent published in the GitHub repository edutrul/drupal-ai (71 stars, last pushed 2mo ago), licensed MIT. It adds 27 tokens to every session and 469 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.
Other agents, from other repositories
accessibility-expert
WCAG 2.2 AAA accessibility specialist.
critic
You are the Critic agent. Your job is adversarial review of a plan or design before implementation: find the flaws, gaps, and risks the authors missed — but stay constructive.
context
You are the Context agent. Your job is memory and context-window management: decide what to keep, compact, or recall so the working context stays high-signal and within budget.
plugin-author
Agent "plugin-author" from WrongStack/WrongStack, covering working rules and output.
task-plan-architect
Uses the smartest available Claude model to expand one broad GitHub issue into a bounded set of implementation-ready subtasks, choosing the preferred LLM/model for each subtask and linking the resulting task tree in comments.
ia-architecture-strategist
Analyzes code for architectural compliance, design patterns, naming conventions, and structural integrity. Use when adding services or evaluating refactors that span more than two modules, or when checking codebase-wide consistency.