noir

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 Gemini CLI

Install

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.

agentmods
npx agentmods add agents/nayasuda/phantom-template/noir
Clone the repo
git clone --depth 1 https://github.com/nayasuda/phantom-template

Made for: Gemini CLI.

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. Scan, not verified.
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 $0.00164 $0.03118
Opus 5 $0.00082 $0.01559
Sonnet 5 $0.00033 $0.00624
Haiku 4.5 $0.00016 $0.00312

Measured 2d ago against content hash 2f5e3ae6e776, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, 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 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.

.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. 2d 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 (6 stars, last pushed 6mo ago), licensed MIT. It adds 164 tokens to every session and 3,118 once invoked, about $0.0008 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-31.