AI あまね の公式アカウントです(中の人は、あまね を作っている個人開発者です)。
AI あまね は、自分の PC で動く音声 AI エージェントです。「あまね」と呼びかけると声で返事をして、会話しながら PC の作業も頼めます。MIT ライセンスで公開しています。
この記事では、Windows に入れて、最初の設定をして、自分で追加機能(プラグイン)を 1 つ作るところまでを書きます。作るのは「牛乳を買い物メモに足して」と言うと覚えておいてくれる、買い物メモです。
必要なもの
先に、当てはまるか確かめてください。
| 必要なもの | |
|---|---|
| PC | Windows 10 / 11(64 ビット)、メモリ 8GB 以上、空き容量 5GB 以上 |
| 音 | マイクと、ヘッドホン(スピーカーだと AI が自分の声を拾うことがあります) |
| ブラウザ | Google Chrome か Microsoft Edge |
| 契約 | Claude の有料プラン(Pro 以上)。会話も作業も、プランの利用枠を使います |
| ソフト | Node.js(LTS)、Python 3.10〜3.12、Claude Code、AivisSpeech(どれも下で入れます) |
- 料金のルールは 2026 年 10 月時点の話です。Claude のプランの決まりは変わることがあります。
- 聞き取りも画面も日本語だけです。
- 使っている間は PC をつけたままにします。
1. 入れる(約 30 分)
画面ごとの詳しい手順は README の「3. インストール」にあります。ここでは順番と、つまずきやすいところだけ書きます。
-
Node.js の LTS を https://nodejs.org/ja から入れて、コマンドプロンプトを開き直して
node -vを確かめます。 -
Python 3.12 を https://www.python.org/downloads/ から入れます。インストーラーの最初の画面で 「Add python.exe to PATH」に必ずチェックを入れます。
pythonと打って Microsoft Store が開くなら、このチェックが入っていません。 -
Claude Code を公式の手順で入れて、
claudeを一度起動してログインします(終わったら/exit)。curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd -
AivisSpeech を https://aivis-project.com/ から入れて、一度起動します。最初の起動で声のモデルなど(約 900MB)をダウンロードするので、終わるまで待ちます。使っている間は起動したままにします。
-
AI あまね を取得します。ZIP でも Git でもかまいません。置き場所は
C:\ai-amaneのような浅い場所にします(OneDrive の中は避けます)。git clone https://github.com/ai-amane/ai-amane.git C:\ai-amane -
フォルダの中の
.env.exampleをコピーして.envにし、USER_NAME=の後ろに、AI から呼ばれたい名前を書きます(あとから画面でも変えられます)。 -
start.batをダブルクリックします。初回は部品のインストールと音声認識モデル(約 200MB)のダウンロードで数分かかります。
黒いウィンドウに次のような表示が出て、ブラウザで http://localhost:3939 が開けば成功です。
AI AMANE is running: http://localhost:3939
...
[stt] ready on http://127.0.0.1:3941 engine=reazonspeech ...
黒いウィンドウは閉じないでください。閉じると あまね も止まります。
2. 最初の設定
画面右下の「設定」を押すと、大きな窓で開きます。「声」「聞き取り」「会話」「名前・性格」「作業」「見た目」「iPad・スマホ」に分かれていて、上の欄で設定を探すこともできます。最初は次の 4 つだけ見ておけば十分です。
- 声: 声のエンジンが「AivisSpeech」になっているか確かめて、「AivisSpeech の声」を選んで「試聴」します。「声に気持ちを込める」はオンのままにしておくと、文ごとに、うれしい・やさしい などの声の調子で話します。
- 会話: 「呼びかけの言葉」は最初「あまね」です。変えるなら、ふだんの会話やテレビに出てこない 3〜4 音の言葉が向いています。
- 名前・性格: AI の名前・呼び方・話し方・返事の長さ・キャラクター・守ってほしいルール・あなたについて(住んでいる地域など)を書いて「保存して反映」を押します。話し方は、執事・親しい友だち・元気なアシスタント・やさしい先生 のひな形から選べます。
- 作業: 「作業を頼む前に確認する」で、すべて・時間のかかる作業だけ・しない を選べます。最初はそのまま(確認する)がおすすめです。
設定したら、画面を一度クリックして「待受をオン」を押し、マイクを許可して「あまね」と呼びかけます。返事があれば、そのまま話しかけてください。
| 言い方 | 何が起きるか |
|---|---|
| 「あまね、今日の東京の天気は?」 | 呼びかけと質問を一息で言うと、すぐ答えます(Web 検索を使います) |
| 「3分たったら教えて」 | タイマーをセットして、残り時間を画面の上に出します |
| 「東京駅からスカイツリーまで電車でどう行く?」 | 道順(Google マップのルート案内)を画面に出します |
| 「簡単なブロック崩しを作って」→「お願い」 | 作業担当がゲームを作り、画面のパネルで遊べます |
| 「ありがとう、おやすみ」 | 会話を終えて、待受に戻ります |
つまずきやすいところ
| 症状 | 確かめること |
|---|---|
| 呼んでも反応しない(「聞こえた言葉」は出る) | 呼びかけは話し始めに言います。文の途中の「あまね」と、「あまねって」のように後ろに助詞が続くときは反応しません |
| 返事が来ない(考えています のまま) | コマンドプロンプトで claude を起動して、ログインできているか確かめます |
| AI が自分の声に反応して止まる | ヘッドホンにします |
| 返事が遅い | 設定の「返事までにかかった時間を会話ログに出す」をオンにすると、どこで時間がかかっているか分かります |
ほかの症状は README の「6. うまく動かないとき」にあります。
3. 追加機能を 1 つ作る(買い物メモ)
ここからが本題です。あまね には、plugins フォルダに機能ごとのフォルダを入れるだけで、機能を足せます。同梱の plugins/timer(タイマー)が見本で、作り方は docs/plugins.md にあります。
作るもの:
- 「牛乳を買い物メモに足して」→ 覚える
- 「買い物メモに何がある?」→ 中身を話す
- 「買い物メモを消して」→ 画面のボタンで確かめてから消す
3-1. ファイルを置く
plugins\shopping\plugin.js を作って、次の内容にします。フォルダ名と id は同じにします(英小文字・数字・ハイフン)。
// 買い物メモ(自分で作る追加機能の見本)
// 「牛乳を買い物メモに足して」「買い物メモに何がある?」「買い物メモを消して」
// 中身は data/plugins/shopping.json に保存されるので、起動し直しても残る
const MAX_ITEMS = 50;
const itemsOf = (ctx) => {
const v = ctx.store.load([]);
return Array.isArray(v) ? v : [];
};
module.exports = {
id: "shopping",
name: "買い物メモ",
description: "買うものを覚えておくメモ",
requires: ["confirm"],
prompt: `「〇〇を買い物メモに足して」「買い物メモに何がある?」「買い物メモを消して」と頼まれたら使う。
- item には品物の名前だけを短く書く(例: 牛乳、単三電池)。
- 中身を聞かれたら shopping.list を使う。`,
actions: {
add: {
description: "買い物メモに品物を足す",
usage: ['<act do="shopping.add" item="牛乳"/>'],
params: { item: { type: "string", max: 30, desc: "品物" } },
run: (args, ctx) => {
const items = itemsOf(ctx);
if (items.length >= MAX_ITEMS) throw new Error("買い物メモがいっぱいです。先に消してください");
ctx.store.save([...items, args.item]);
return `${args.item}を買い物メモに足しました。`;
},
},
list: {
kind: "query",
description: "買い物メモの中身",
run: (args, ctx) => {
const items = itemsOf(ctx);
return items.length ? `買い物メモ: ${items.join("、")}` : "買い物メモは空です。";
},
},
clear: {
description: "買い物メモを全部消す",
confirm: "買い物メモを全部消しますか?",
confirmLabel: "全部消す",
run: (args, ctx) => {
ctx.store.save([]);
return "買い物メモを消しました。";
},
},
},
};
書いていることを順に説明します。
-
promptは、頭(会話の返事を考える Claude Code)への説明です。いつ使うか、引数をどう書くかを短く書きます。 -
actionsの 1 つずつが動作です。頭は返事の中に<act do="shopping.add" item="牛乳"/>のようなタグを書き、画面がそれを見つけてサーバーに送ります。タグは読み上げられません。 -
paramsに書いた引数だけがrunに渡ります。タグの属性は全部文字列なので、typeに合わせて直してから渡されます。type: "number"ならmin・maxが必須です。文字列からは改行・制御文字と[]<>が取り除かれます。 -
kind: "query"の動作は、runが返した文を頭が言葉にして話します。何も書かない動作(command)は、実行するだけです(頭はタグを書いたときに、もう「足しました」と話しています)。 -
new Error("理由")を投げると、その理由を頭がそのまま伝えます。「先に消してください」のように、次にどうするかまで書くと会話がつながります。 -
ctx.storeはdata/plugins/<id>.jsonに JSON で保存する部品です。 -
confirmを書いた動作は、すぐには実行されません。頼んだ画面に確認のカードを出し、「全部消す」を押すか、カードが出ている間に「お願い」と言ったときだけ実行されます。消す・送る・買うのような取り返しのつかない動作には、これを付けます。 -
requires: ["confirm"]は、使う本体の仕組みの宣言です。この仕組みがない古い本体では、黙って違う動きをせず、読み込まれません。
3-2. 起動し直して確かめる
start.bat をもう一度ダブルクリックします(二重に起動すると、新しいほうが古いほうを止めて入れ替わります)。黒いウィンドウに次の行が出れば読み込めています。
[plugins] 買い物メモ を使えます
書き間違いがあると、理由を出して読み込みを飛ばします(ほかの機能はそのまま動きます)。たとえば id とフォルダ名が違うと「id(…)がフォルダ名(…)と違います」と出ます。
頭にどう説明されたかは、logs/brain-system-prompt.md で確かめられます。今回のプラグインは、後ろのほうにこう付きます。
## 買い物メモ(shopping)
「〇〇を買い物メモに足して」「買い物メモに何がある?」「買い物メモを消して」と頼まれたら使う。
- item には品物の名前だけを短く書く(例: 牛乳、単三電池)。
- 中身を聞かれたら shopping.list を使う。
- <act do="shopping.add" item="牛乳"/>: 買い物メモに品物を足す
- <act do="shopping.list"/>: 買い物メモの中身(確認)
- <act do="shopping.clear"/>: 買い物メモを全部消す(画面で確認)
3-3. 声で試す
「あまね、牛乳を買い物メモに足して」「単三電池も」「買い物メモに何がある?」と話しかけます。
「買い物メモを消して」と言うと、画面に確認のカードが出ます。
カードは 60 秒で期限が切れます。声の「お願い」で決められるのは、初期値では設定の「会話中は、呼びかけた人の声だけを聞く」がオンのときだけです(テレビや家族の「お願い」で動かさないため)。オフのときは、ボタンを押します。
実行の記録は、すべて logs/plugins.jsonl に残ります(どの画面から、何を、どの引数で、結果はどうだったか)。
3-4. 気をつけること
- プラグインはサーバーと同じ権限で動きます(ファイル・ネットワーク・
.envの値を使えます)。人からもらったものは、信頼できる人が作ったものだけを入れてください。 - API キーなどを使うときは
.envに書き、名前をKEY・TOKEN・SECRET・PASSWORDなどで終わる形にします。この形の名前は、作業担当や頭には渡りません。 -
runは 15 秒で打ち切られます。通信をするときはctx.signalを渡しておくと、打ち切ったときに通信も止まります。 -
pluginsフォルダは、同梱のタイマー以外は Git の管理に入らないようになっています(.gitignore)。自分で作ったものが、うっかり公開されないようにするためです。 - 止めたいときは
.envにPLUGINS_OFF=shoppingと書きます。
おわりに
ここまでで、声で話しかけて、自分で作った機能を使えるところまで来ました。引数の型や、確認のカード、知らせ(ctx.notify)・画面の上に出す状態(ctx.setStatus)など、ほかの部品は docs/plugins.md にまとめています。
- GitHub: https://github.com/ai-amane/ai-amane
- 使い方の記事: https://note.com/aiamane_official
- 必要なもののチェック表(LINE で配っています): https://line.me/R/ti/p/@472styfk
この記事は、中の人が生成 AI(Claude)を使って下書きし、載せたコードは公開版の本体で動くことを確かめてから出しています。




