mojiemoji.jozo.beer のスタンプ画像で本語の GitHub Markdown (issue / / レビュー / リプライ / リリースノート) を に — これは【マジで】やばい【バグ】ですね のように ワードだけスタンプ化 する mid-sentence インライン強調を でに埋め込む Claude Code 🚀 的にはこの README 自体が dogfooding なので、上から下までスタンプまみれ
FAQ
mojiemoji-github is a Claude Code plugin with 6 hand-picked skills for content work, indexed on Flowy. Install it with the command on its page. It includes mojiemoji-config, mojiemoji-github, bump-catalog. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
> /plugin marketplace add jozobeer/mojiemoji-plugin> /plugin install mojiemoji-github@mojiemoji-plugin
mojiemoji.jozo.beer のスタンプ画像で本語の GitHub Markdown (issue / / レビュー / リプライ / リリースノート) を に — これは【マジで】やばい【バグ】ですね のように ワードだけスタンプ化 する mid-sentence インライン強調を でに埋め込む Claude Code 🚀
的にはこの README 自体が dogfooding なので、上から下までスタンプまみれ
プレーンな日本語 PR コメント:
これはマジでやばいバグですね。緊急で修正お願いします。LGTM したら歓迎です。
mojiemoji-plugin が掛かった世界:
これはやばいですね。でお願いします。したらです。
文章 / 量、印象は完全に別物。インが面倒な装飾作業を全部やる 🎨
[!NOTE] この README が dogfooding を兼ねるスタンプ装飾済み本文で、各スタンプは文中の単語そのものを する形でされています。
keyword<stamp:keyword>のような隣接装飾は使っていません — 単語が 2 回読まれて視覚的に冗長になるためです。スタンプ画像がレンダされない環境では、その単語位置だけ空白に見える点にしてください。
文字スタンプだけでなく、Unicode 絵文字 162 種 (🎉 / ⚠️ / ✅ / ❌ / 🎊 等) も prestamp.py がで animated <img> にします。emoji-catalog.yml に登録された絵文字なら手書きの 組み立て。
| イン | |
|---|---|
やった 🎉 完成! | やった ! |
注意 ⚠️ してください | してください |
ガード:
🎉🎊🎁🎀 の 3 つ目以降は生の Unicode のまま残す(視覚的に潰し合うため)。空白を挟めば run がリセットされ全部スタンプ化されるU+FE0F) は剥がして lookup — ⚠️ (U+26A0 U+FE0F) も ⚠ (素の U+26A0) もどちらもカタにヒット<img> 内 / 内の絵文字には触らない🚀 のように upstream に asset が無いものは plain Unicode で残す(emoji-catalog.yml を読めば一覧が分かる)3 層で されています。
| 種別 | 名前 | 役割 |
|---|---|---|
| Skill | mojiemoji-github | GitHub の各 surface (issue / / レビュー等) ごとのスタンプポリシー、6 パラメータ、helper script を |
| Subagent | mojiemoji-selector | Agent ツール専用 (subagent_type: "mojiemoji-selector")。Skill(mojiemoji-github:mojiemoji-selector) では呼べない。フレーズ群を受け取り、フォント / 色 / アニメーション / アウトラインを多様性確保しつつ選定して <img> スニペットを返す |
| Skill | mojiemoji-propose | prestamp で <img> 化されなかった 2-8 字日本語連続を抽出し mojiemoji-selector に flavor を選ばせて usage.jsonl に(catalog 育成パイプライン #46 の補充、#92 のへの Phase 1 ) |
| Skill | bump-catalog | usage.jsonl に貯まった variant を閾値判定して prestamp-catalog.yml に昇格 を作成 |
| Scripts | prestamp.py / coverage.py | prestamp.py は高頻度語と Unicode 絵文字 (🎉 / ⚠️ 等カタ 162 種) を論的に先(variant 抽選 + safe-zone + 連続絵文字は 2 連までで打ち切り)、--report-unstamped で素通し語の JSON も、coverage.py は stamp 密度 / sentence hit rate / 段落偏りをし閾値未満を warn または block |
| Hook (PreToolUse / Bash + MCP) | mojiemoji_japanese_gate.py | 本語本文を投稿しようとした時、6 パラメータ揃わない mojiemoji を含むコマンドを 送信前にブロック。は gh (issue|pr|release) (create|comment|review|edit) / gh api .../reviews|comments|issues|releases (Bash 経路) と、mcp__*__github_* (MCP 経路、github_create_pull_request / github_add_issue_comment / github_pull_request_review_write 等の body / description フィールド) の両方 |
prestamp.py は TONE(文体のムード)とは別軸で、カタの量を --intensity で選べます(coverage.py 側の密度閾値や leftover-gate も --intensity に)。既定は従来どおり aggressive です。
| 値 | いつ使うか | CLI 例 |
|---|---|---|
aggressive | フル装飾・従来互換(カタ hit をすべて <img> に) | prestamp.py < body.md |
normal | 通常の Issue / 向けにやや控えめ(文末コメントで gate 緩和) | prestamp.py --intensity normal < body.md |
minimal | ・レビュー本文など最低限だけ | prestamp.py --intensity minimal < body.md |
body 向けは prestamp.py --surface pr-body を使うと repository の squash / merge commit message policy を見て、 body が commit message に流れるでは側として装飾を skip します。明示的に装飾したい場合だけ MOJIEMOJI_FORCE_PR_BODY=1 を指定してください。
例(のイメージ): aggressive は文中のヒットがすべてスタンプ化されるのに対し、normal は文ごとに先頭・+抽選でだけ、minimal は文ごとに先頭・のみ(絵文字連打も短く)。normal / minimal ではに <!-- mojiemoji-intensity:… --> が付き、catalog チェックの許容件数が上がります。
intensity を毎回 CLI で指定したくない場合は /mojiemoji-config で ~/.config/mojiemoji/config.json にできます。順位は CLI > ファイル > aggressive(未時の既定)です。
Claude Code 内で:
/plugin marketplace add jozobeer/mojiemoji-plugin
/plugin install mojiemoji-github@mojiemoji-plugin
これで
git clone https://github.com/jozobeer/mojiemoji-plugin.git ~/mojiemoji-plugin
Claude Code 内で:
/plugin marketplace add ~/mojiemoji-plugin
/plugin install mojiemoji-github@mojiemoji-plugin
インストール、Claude Code に本語 issue を作るよう依頼してみてください。 (mojiemoji_japanese_gate.py) が gh issue create を一旦止めて、本文を mojiemoji 装飾した上で送信し直すはずです。
/plugin
で mojiemoji-github が enabled になっていれば
flowchart TD
A([Claude Code セッション])
A -->|日本語 GitHub 本文を書こうとする| B
B[<b>Skill: mojiemoji-github</b><br/>規約・6 必須パラメータ・helper script]
B -.->|3つ以上 / カタログ / バリエーション が必要なとき dispatch| C
C[<b>Subagent: mojiemoji-selector</b><br/>presets.md / flavor-guide.md を読み<br/>font / color / animation / outline<br/>4 軸で多様性確保したスニペット表を返す]
C -.->|ready-to-paste な <img> 群| A
A -->|gh issue/pr/release/api コマンド & MCP github_* tools| D
D{"Hook (PreToolUse / Bash + MCP)<br/>mojiemoji_japanese_gate.py"}
D -->|6 必須パラメータ揃う| E([✅ GitHub に送信])
D -->|未装飾 / パラメータ不足| F([🚧 exit 2 でブロック])
F -.->|stderr の修正指示で Claude が再装飾| B
style B fill:#a855f7,color:#fff,stroke:#7c3aed,stroke-width:2px
style C fill:#ec4899,color:#fff,stroke:#db2777,stroke-width:2px
style D fill:#3b82f6,color:#fff,stroke:#2563eb,stroke-width:2px
style E fill:#22c55e,color:#fff,stroke:#16a34a,stroke-width:2px
style F fill:#ef4444,color:#fff,stroke:#dc2626,stroke-width:2px
style A fill:#fbbf24,color:#000,stroke:#f59e0b,stroke-width:2px
bypass: MOJIEMOJI_HOOK_DISABLED=1 を含めると Hook がスキップされる(しない、ダークで のまま投稿される)。Bash 経路はコマンドの先頭、MCP 経路は body 内のどこかに含めれば良い。は § 環境変数。
mojiemoji の画像 を生で組み立てると、色だけで dark mode 不可視になる + 他パラメータで読めないスタンプを する という事故が起こる:
| パラメータ | 値 | 時の | 度 |
|---|---|---|---|
color | 明るめの hex (例: #a855f7 / #22c55e — Tailwind パレットの 300〜500 帯が目安として便利) または vivid-blue 等のサービスプリセット名。サービスは Tailwind クラス名は受け付けない、hex か名前付きプリセットのみ | サービスデフォルトが黒 → dark mode で完全不可視 | 💀 |
background | transparent | dark mode で白ブロックが本文を切り裂く | 大 |
animation | 34 種の正準アニメから選ぶ。rotational 系 (kaiten / kage_kaiten) は speed=step または slow の時のみ可読 — normal / fast / 省略 (デフォルト fast) は回転が早すぎて読めない streak になる (hook で reject、helper は速度未指定ならで slow を注入) | 時は静止画 → スタンプとしての視覚的 punch が消える | 中 |
font | 17 種の正準フォント | サービスデフォルトの素フォント → body 高さで読みづらい | 中 |
outline | triadic / complement / darker / lighter / 6-hex | 字形が背景と融合してぼやける | 中 |
outline_width | 2 | 1px は線が細すぎ、3px+ は字形が潰れる | 小 |
特に color → dark mode 黒不可視は 3 回ユーザにされた 事例(直近: cross-repo-review 2026-05-12 で 7 レビュー分のスタンプが全部見えない状態で投稿された 💣)。LLM が手書きで を組み立てると background=transparent だけ付けて他を忘れる事故が頻発する。このインは:
の 3 段で防ぐ 🛡
このインは mojiemoji 装飾そのもの を 1 つの SSOT に集約することをとしている。「/plugin install するだけで装飾が動く」状態を保証するため、user-global config への依存を作らない。
gh issue/pr/release create / raw gh api .../reviews / MCP GitHub ツール / subagent 駆動の一括投稿、いずれの経路でも本語 body 投稿前に gate が発火する(SKILL.md § Hard pre-action gate)disco / psycho / kira 等の color-shifting アニメは outline 系を省略する (4 パラメータ運用)、ダーク hex 帯gh / raw gh api / MCP / subagent 経由すべて)Agent ツールで subagent_type: "mojiemoji-selector" を指定する。mojiemoji-github:mojiemoji-selector は agent list の名であり、Skill ツール引数ではない。${CLAUDE_PLUGIN_ROOT}/skills/mojiemoji-github/scripts/mojiemoji_markdown.py) — 単一フレーズのファスト以下は user-personal な workflow skills/agents であり、本インの責務外:
make-issue / make-pr / address-review / triage-review / cross-repo-review / vibes-review / copilot-review / good-morning 等の review/issue/ ワークフロー skillspr-reviewer / review-responder 等のレビュー特化 subagentsこれらのが mojiemoji を使う場合、本インの skill / hook を呼ぶ形で integration するのが正しい。逆方向(plugin が user-personal skill を仮定する)は依存方向として。
本インをするなら、user-global config(~/.config/claude/CLAUDE.md / rules/* / agents/*)から「mojiemoji」言及をして構わない。すべての routing は plugin の when_to_use トリガーと hook の発火で完結する。これで user 環境と fresh-install 環境がになる。
Claude Code の subagent (~/.config/claude/agents/*.md やの mojiemoji-selector 以外のユーザー作成 agent) は skill されており、メインスレッドのように skill を auto-discover しない。subagent から Skill ツールで mojiemoji-github を呼びたい場合、subagent の frontmatter で skill を明示宣言するがある:
---
name: my-review-subagent
model: sonnet
skills:
- mojiemoji-github # ← 明示宣言が必要
---
これは harness 側ので plugin から bypass できない。宣言しない場合のは以下:
scripts/mojiemoji_markdown.py を直接呼ぶ recovery 経路)ので、subagent は skill access 無しでも復帰つまり「を保ちたい subagent は frontmatter に skill 宣言」、「最低限通したいだけなら宣言(hook の自己完結 recovery で通る)」の 2 段。
このインが認識する変数の一覧。
MOJIEMOJI_*)| 変数 | 用途 | 例 |
|---|---|---|
MOJIEMOJI_HOOK_DISABLED | 1 にすると PreToolUse hook を 1 投稿分だけ素通しさせる bypass。Bash なら command 先頭、MCP なら body 中のどこかに含める | MOJIEMOJI_HOOK_DISABLED=1 gh issue create ... |
MOJIEMOJI_CACHE_FILE | 使用 (usage.jsonl) の先を上書き | MOJIEMOJI_CACHE_FILE=/tmp/mojiemoji.jsonl |
MOJIEMOJI_CACHE_DISABLED | 1 / true / yes にすると cache_record.py が静かに no-op になる(オプトアウト) | MOJIEMOJI_CACHE_DISABLED=1 |
MCP 経路で MOJIEMOJI_HOOK_DISABLED=1 を使う場合、body テキストならコメントや脚注に紛れさせても hook が走査するので効く。乱用は厳禁 — 1 投稿 1 bypass の最小スコープで使うこと(hook が騒いだ箇所はだいたい本物のである)。
| 変数 | 用途 |
|---|---|
XDG_DATA_HOME | MOJIEMOJI_CACHE_FILE 未時のデフォルト先 ${XDG_DATA_HOME:-$HOME/.local/share}/mojiemoji-plugin/usage.jsonl の起点 |
CLAUDE_PLUGIN_ROOT | Claude Code が hook / skill 起動時に注入する、インの展開先絶対。hooks/hooks.json や SKILL.md の引数で ${CLAUDE_PLUGIN_ROOT}/... として |
SKILL_DIR | mojiemoji-github skill が mojiemoji-selector subagent をディスパッチする際に渡す、skill 本体ディレクトリの絶対。subagent が references を読み解けるようにするための明示渡し |
Claude Code の /plugin メニューで disable するか、hooks/hooks.json を 。
skills/mojiemoji-github/references/presets.md でフォント / 色 / アニメの preset 群をできます。
GitHub Actions の Release workflow は、.claude-plugin/plugin.json の version から tag 名を し、回 tag 以降の GitHub generated notes を badge first な release notes に します。
まず workflow_dispatch の dry-run で notes artifact をし、なければ publish を main branch から実行します。既に tag の GitHub Release がある場合、workflow は二重作成せず します。
ローカルで本文だけする場合:
OUTPUT_FILE=/tmp/mojiemoji-release-notes.md \
bash scripts/prepare-release-notes.sh --mode dry-run
MIT — jozobeer
.agents/
plugins/
marketplace.json
.claude-plugin/
marketplace.json
plugin.json
.github/
ISSUE_TEMPLATE/
bug.yml
config.yml
feature.yml
PULL_REQUEST_TEMPLATE.md
workflows/
catalog-drift-check.yml
drift-check.yml
md-drift-check.yml
on-pr.yml
release.yml
.gitignore
agents/
mojiemoji-selector.md
assets/
hero.png
codecov.yml
docs/
harnesses/
codex.md
hooks/
gate/
__init__.py
extract.py
validators/
__init__.py
canonical.py
catalog_leftovers.py
outline.py
required_params.py
schema_version.py
url_presence.py
hooks.json
mojiemoji_japanese_gate.py
mojiemoji_md_edit_warn.py
LICENSE
plugins/
mojiemoji-plugin/
.codex-plugin/
plugin.json
skills/
mojiemoji-config/
scripts/
mojiemoji_config.py
SKILL.md
mojiemoji-github/
data/
emoji-catalog.yml
prestamp-catalog.yml
stampable-terms.txt
references/
colors.md
escape.md
flavor-guide.md
parameters.md
presets.md
trailing-decoration.md
verification.md
workflow.md
scripts/
bump_catalog.py
cache_record.py
cache_stats.py
coverage.py
generate_catalog.py
lib/
__init__.py
cache_path.py
config.py
constants.py
flavor.py
forbidden_colors.py
japanese_ranges.py
repo_policy.py
sentence.py
term_boundaries.py
yaml_helpers.py
lint_rendered_body.py
mojiemoji_markdown.py
normalize_catalog_colors.py
prestamp/
prestamp.py
__init__.py
__main__.py
boundaries.py
catalog.py
cli.py
emoji_pass.py
incremental.py
lines.py
masker.py
render.py
text_pass.py
unstamped_report.py
verify-lists-vs-service.sh
SKILL.md
pyproject.toml
README.md
scripts/
audit-harness-skills.sh
check-version-bump.sh
extract_hook_set.py
prepare-release-notes.sh
sync-codex-plugin-package.sh
verify-lists-vs-docs.sh
skills/
bump-catalog/
SKILL.md
mojiemoji-config/
scripts/
mojiemoji_config.py
SKILL.md
mojiemoji-github/
data/
emoji-catalog.yml
prestamp-catalog.yml
stampable-terms.txt
references/
colors.md
escape.md
flavor-guide.md
parameters.md
presets.md
trailing-decoration.md
verification.md
workflow.md
scripts/
bump_catalog.py
cache_record.py
cache_stats.py
coverage.py
generate_catalog.py
lib/
__init__.py
cache_path.py
config.py
constants.py
flavor.py
forbidden_colors.py
japanese_ranges.py
repo_policy.py
sentence.py
term_boundaries.py
yaml_helpers.py
lint_rendered_body.py
mojiemoji_markdown.py
normalize_catalog_colors.py
prestamp/
prestamp.py
__init__.py
__main__.py
boundaries.py
catalog.py
cli.py
emoji_pass.py
incremental.py
lines.py
masker.py
render.py
text_pass.py
unstamped_report.py
verify-lists-vs-service.sh
SKILL.md
mojiemoji-propose/
SKILL.md
tests/
conftest.py
fixtures/
intensity/
aggressive/
code.md.in
code.md.out
long.md.in
long.md.out
off_block.md.in
off_block.md.out
short.md.in
short.md.out
table.md.in
table.md.out
README.md
sitecustomize.py
test_bump_catalog_package_paths.py
test_cache_pipeline.py
test_catalog_leftovers_intensity.py
test_codex_package.py
test_coverage_intensity.py
test_coverage.py
test_emoji_catalog.py
test_forbidden_colors.py
test_gate_bypass.py
test_gate_canonical.py
test_gate_catalog_leftovers.py
test_gate_extract.py
test_gate_kanji_color.py
test_gate_mcp_path.py
test_gate_outline.py
test_gate_pr_body_leak.py
test_gate_required_params.py
test_gate_schema_version.py
test_gate_url_presence.py
test_generate_catalog.py
test_intensity_config.py
test_lint_rendered_body.py
test_markdown_html_size_warn.py
test_md_edit_warn.py
test_pr_body_policy.py
test_prestamp_aggressive_matches_default.py
test_prestamp_color_normalize.py
test_prestamp_compound.py
test_prestamp_emoji_pass.py
test_prestamp_escape.py
test_prestamp_fence.py
test_prestamp_idempotency.py
test_prestamp_intensity_config.py
test_prestamp_intensity.py
test_prestamp_masker.py
test_prestamp_term_re.py
test_prestamp_unstamped_report.py
test_term_boundaries.py
test_trailing_decoration.py
uv.lock© 2026 Flowy · Free and open source
Built for Claude Code · Not affiliated with Anthropic