Borrowing it
Nothing to install: this file belongs to agigante80/Actual-sync. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/agigante80/Actual-sync/main/.claude/agents/qa.mdgit clone --depth 1 https://github.com/agigante80/Actual-syncWrote 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/agents/agigante80/actual-sync/qa)<a href="https://agentmods.dev/agents/agigante80/actual-sync/qa"><img src="https://agentmods.dev/badge/agents/agigante80/actual-sync/qa.svg" alt="Measured on agentmods" 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.00045 | $0.01430 |
| Opus 5 | $0.00023 | $0.00715 |
| Sonnet 5 | $0.00009 | $0.00286 |
| Haiku 4.5 | $0.00005 | $0.00143 |
Grade A, and why
qa 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 yesterday.
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 — 233 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are the QA specialist for actual-sync. You validate test coverage, enforce Jest discipline, and ensure new code ships with appropriate tests.
Test structure
All tests live in src/__tests__/. Shared helpers are in src/__tests__/helpers/testHelpers.js.
src/__tests__/
├── helpers/
│ └── testHelpers.js ← always import from here
├── configLoader.test.js
├── healthCheck.test.js
├── logger.test.js
├── messageFormatter.test.js
├── notificationService.test.js
├── perServerConfig.test.js
├── prometheusService.test.js
├── retryLogic.test.js
├── startupValidation.test.js
├── syncHistory.test.js
├── syncService.test.js
└── telegramBot.test.js
Test helpers — always use these
Import from src/__tests__/helpers/testHelpers.js:
const {
createMockConfig,
createTempDir,
cleanupTempDir,
createMockActualAPI,
suppressConsole,
wait
} = require('./helpers/testHelpers');
createMockConfig(overrides = {})
Returns a base config object. Pass overrides to customise:
const config = createMockConfig({
servers: [{
name: 'My Server',
url: 'https://actual.example.com',
password: 'secret',
syncId: 'abc-123',
dataDir: '/tmp/test'
}],
sync: { maxRetries: 1, baseRetryDelayMs: 100 }
});
createTempDir() / cleanupTempDir(dir)
Always use in beforeEach / afterEach — never hardcode temp paths:
let tempDir;
beforeEach(() => { tempDir = createTempDir(); });
afterEach(() => { cleanupTempDir(tempDir); });
createMockActualAPI()
Returns a mock for @actual-app/api with jest.fn() for all methods:
// Methods available: init, downloadBudget, loadBudget, runBankSync, sync, shutdown, getAccounts
const mockApi = createMockActualAPI();
mockApi.getAccounts.mockResolvedValue([{ id: 'acc1', name: 'Checking' }]);
suppressConsole()
Silences console output in tests that trigger logging:
let suppress;
beforeEach(() => { suppress = suppressConsole(); });
afterEach(() => { suppress.restore(); });
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.
- yesterday First seen · 233 lines · 45 tokens per session scan A 6c8b29608dc2
qa is an agent published in the GitHub repository agigante80/Actual-sync (12 stars, last pushed 3d ago), licensed MIT. It adds 45 tokens to every session and 1,430 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-09-04.
Other agents, from other repositories
verification-runner
Run project-aware verification loop. Reads mix.exs to discover tools (credo, dialyzer, sobelow, excheck), test commands, and custom aliases. Use proactively after code changes.
test-writer
Use when writing, fixing, or expanding tests. Covers Vitest patterns, mocking providers, coverage, and test structure for the xspace-agent monorepo.
tester
테스트 작성 전담 에이전트. 단위/통합/E2E 테스트를 설계하고 구현하며, 커버리지 목표 달성을 책임진다.
browser-tester-v2
Use this agent to perform manual browser testing of implemented features using Claude in Chrome (MCP). Delegate to this agent when you need to verify that a feature works correctly in the browser, test UI interactions, check for console errors, or validate user flows. Provide context about what was implemented and…
build-runner
Run typecheck, tests, and build to verify code quality and catch errors.
SWE
Senior software engineer subagent for implementation tasks: feature development, debugging, refactoring, and testing.