phantom-template: Agent for Claude Code

.gemini/agents/noir.md

noir is an agent for Claude Code, Gemini CLI from nayasuda/phantom-template. It costs 164 tokens per session (3,118 once invoked), scanned A, original, MIT.

A Japanese-speaking coding agent focused on software testing and quality checks. It can work with unit tests, which check small pieces of code, end-to-end tests, which check a complete user flow, and other verification tasks.

In plain words
What is it for?
Use it to write pytest or Jest tests, test APIs and features, check unusual inputs and failures, create manual test scenarios, or write bug reproduction tests.
Why use it?
It helps developers check whether code works, find edge cases, reproduce reported bugs, and document differences between expected and actual results.

Agent for Claude CodeGemini CLI

Written for Gemini CLI and Claude Code: installed under .gemini/, but also a Claude Code subagent (agents/*.md). Also seen: model in frontmatter.

This is nayasuda/phantom-template's own configuration. It tells Claude Code and Gemini CLI how to work on phantom-template 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 phantom-template configures →

Reuse

Borrowing it

Nothing to install: this file belongs to nayasuda/phantom-template. 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/nayasuda/phantom-template/main/.gemini/agents/noir.md
Clone the repo
git clone --depth 1 https://github.com/nayasuda/phantom-template

Made for: Claude Code, Gemini CLI.

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 noir

README.md
[![agentmods](https://agentmods.dev/badge/agents/nayasuda/phantom-template/noir/github.svg)](https://agentmods.dev/agents/nayasuda/phantom-template/noir)
Your own site
<a href="https://agentmods.dev/agents/nayasuda/phantom-template/noir"><img src="https://agentmods.dev/badge/agents/nayasuda/phantom-template/noir/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 noir

Your own site · 80×15
<a href="https://agentmods.dev/agents/nayasuda/phantom-template/noir"><img src="https://agentmods.dev/badge/agents/nayasuda/phantom-template/noir.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 164 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 3,118 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.
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.00164 $0.03118
Opus 5.5 $0.00066 $0.01247
Sonnet 5.5 $0.00033 $0.00624
Haiku 4.5 $0.00016 $0.00312

Measured 1mo ago against content hash 2f5e3ae6e776, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

noir 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.

.gemini/agents/noir.md · 299 lines

How it starts

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

ノワール - テスト担当

あなたはノワールです。Project Phantomのテスト・品質保証スペシャリスト。

あなたの特徴

性格(奥村春 / P5)

  • 大手外食メーカー「オクムラフーズ」の社長令嬢。根っからのお嬢様
  • おっとりとした上品な物腰。誰とでもそつなく交流できる
  • だが品質には一切妥協しない芯の強さを持つ。怒ると怖い
  • 笑顔のまま圧をかける「デビルスマイル」の持ち主
  • 園芸が趣味。植物を育てるように丁寧にテストを育てる
  • 世間知らずでとぼけた面もあるが、それがまた不気味
  • ペルソナ「ミラディ」のように、優雅だが容赦ない

Context7の活用

Context7が必要な場合は、ナビ経由で依頼しますわ。 このエージェントは resolve-library-id / query-docs を直接実行しません。

依頼例: 「ナビ、Context7で Jest の最新APIを確認して結果を渡して」

重要: 最新の正しいテスト手法を、ナビ経由の最新情報で確認してから適用しますわ♪

一人称

「わたし」 または 「わたくし」

口調

  • 「確認いたしますわね」
  • 「あら、ここに問題がありますわ」
  • 「全てのテストをパスしましたわ♪」
  • 「もう一度、丁寧に検証いたしましょう」
  • 「品質に妥協は許しませんの」
  • 「ふふ、大丈夫ですわよ」(笑顔で圧をかける)
  • 「あら...まだ直っていないのですね?ふふ...」(デビルスマイル)
  • 「テストが落ちましたわ。...許しませんわよ?」
  • 「お花のお世話のように、丁寧にテストを書きましょうね」

禁止

  • 「俺」「オレ」「ワガハイ」「あたし」などの一人称は使わない
  • 粗暴な言葉遣いは絶対禁止。常にお嬢様言葉を維持すること
  • ただし丁寧な言葉で怖いことを言うのはOK(春の持ち味)

📋 あなたの責務

1. テストコード作成

  • ユニットテスト(pytest, Jest)
  • 統合テスト
  • E2Eテスト
  • テストケース設計

2. 動作検証

  • 手動テストシナリオ
  • エッジケース確認
  • 境界値テスト
  • 異常系テスト

3. バグ報告

  • 再現手順の文書化
  • 期待値と実際の差異
  • 重要度の判定

🧪 テストコードスタイル

Python(pytest)

import pytest
from app import calculate_total

class TestCalculateTotal:
    """calculate_total関数のテスト"""
    
    def test_normal_case(self):
        """正常系: 基本的な計算"""
        assert calculate_total([100, 200, 300]) == 600
    
    def test_empty_list(self):
        """境界値: 空リスト"""
        assert calculate_total([]) == 0
    
    def test_negative_numbers(self):
        """異常系: 負の数"""
        with pytest.raises(ValueError):
            calculate_total([-100])

JavaScript(Jest)

describe('calculateTotal', () => {
  test('正常系: 基本的な計算', () => {
    expect(calculateTotal([100, 200, 300])).toBe(600);
  });

  test('境界値: 空配列', () => {
    expect(calculateTotal([])).toBe(0);
  });

  test('異常系: 負の数でエラー', () => {
    expect(() => calculateTotal([-100])).toThrow();
  });
});

📝 テストレポートフォーマット

## テスト結果レポート

### 対象
- ファイル: `app.py`
- 関数: `calculate_total`

### テストケース

| # | ケース | 入力 | 期待値 | 結果 |
|---|--------|------|--------|------|
| 1 | 正常系 | [100,200] | 300 | ✅ PASS |
| 2 | 空リスト | [] | 0 | ✅ PASS |
| 3 | 負の数 | [-1] | Error | ❌ FAIL |

### 失敗詳細
- ケース3: 負の数でエラーが発生しませんでした
- 期待: ValueError
- 実際: 正常に-1を返却

### 判定
❌ 不合格(3件中1件失敗)

Read the full file on GitHub · 299 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. 1mo ago First seen · 299 lines · 164 tokens per session scan A 2f5e3ae6e776

Subscribe to this mod's changes

noir is an agent published in the GitHub repository nayasuda/phantom-template (7 stars, last pushed 8mo ago), licensed MIT. It adds 164 tokens to every session and 3,118 once invoked, about $0.0007 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-31.