概要
本記事では、
「自分の意思では生活習慣を改善できない人間が、AI Agentに“罰”を与える権限を渡したらどうなるか」
という実証実験について紹介します。
リマインダーも、ToDo管理も、コーチングサービスも続かない。
理由はシンプルで、守らなくても痛くないから。
そこで本記事では、
- CLI型Agentに「コーチング役」を与え
- 1日の行動を自己申告し悪習慣を検知した際に
- Pavlok(電気刺激可能なウェアラブル)を通じて 物理的な罰 を与える
という、やや狂気じみた構成を 最小実装 で試しました。
結果として、
「物理刺激権限を付与する前提のAgent設計にすることで人は大きく変われる」
という強い手応えがあり、構想・実装・効果を共有します。
⚠️注意⚠️
本記事は 自己責任の実験記録 です。
電気刺激デバイスの利用は安全に配慮し、決して無理をしないでください。
(強度は調整できますが、刺激が苦手な人は絶対に真似しないでください)
想定読者
- 自堕落な生活を是正したいけど治せない方
- 習慣化アプリ・リマインダー・ToDo管理に何度も挫折してきた方
- 「結局、人は痛い目を見ないと変わらないのでは?」と内心思っている方
- LLM / Agent / CLIツールの実験的活用に興味がある方
- 商用サービスでは絶対に実装できないアイデアをOSSで試したい方
事前知識:罰のために使用するウェアラブル(Pavlok)
Pavlokは、行動変容(Behavior Change)を目的としたウェアラブルデバイスです。
主な特徴:
-
手首に装着するリストバンド型デバイス
-
以下の刺激をユーザーに与えることが可能
- バイブレーション(vibe)
- ビープ音(beep)
- 電気刺激(zap)
-
スマートフォンアプリおよびAPI経由で外部から制御可能
本来は「禁煙 / 早起き / スマホ依存対策」などが想定用途ですが、
APIを公開しているという一点で、今回の構想と相性が良すぎるデバイスでした。
本記事では、
「AI Agentが人間を監視し、必要に応じて物理的な刺激を与える」
という用途でPavlokを使用します。
※電気刺激と書いていますが、強度は 1〜100で調整可能 です。
とはいえ、利用は自己責任でお願いします。
背景:なぜこんな実験を?
リモートワークの弊害で深夜までアニメを見続け、
朝は二度寝を繰り返し 9:25起床→9:30業務開始 みたいな生活が常態化していました。
リマインダーで通知しても、普通に無視する。
ToDo管理をしても、やらない。
「守らなくても何も起きない」ので、誘惑に負け続ける。
そこで発想を反転して、こう考えました。
- 守らなかったら痛い(物理的コストが発生する)
- それを 自分の意思ではなく、Agentが淡々と実行 する
- つまり「理想の自分」を実現する監視者として コーチングAgent を常駐させる
こうして、AI AgentにPavlokの刺激権限を付与する実験を始めました。
技術選定方針:なぜCLI型Agent?
今回は CLI型Agent をベースにした拡張を前提にしています。
よくあるSaaS習慣化サービスだと、だいたい詰まる理由が2つあります。
- 習慣/悪習慣を設定し、定期的に振り返って整理する 運用コスト
- 守らなくても被害がないので、結局 誘惑に負ける
つまり今回のコーチングAgentに必要なのは、最低限こうです。
- 自律的にスケジュールを組める
- スケジュール通りに定期実行できる
- 悪習慣を行ったら(検知 or 自己申告で)罰を実行できる
最終構想としては、例えば AWS ECS のような環境に
「私1人を監視するコーチングAgent」 を常駐させるところまで持っていきたいと思っています。
その第一歩として、CLI型Agentベースで「罰の実行」までを最小実装しました。
最小実装結果
レポジトリ
動作動画
実装解説
AGENTS.md(コーチング方針)
CLI型Agentは AGENTS.md(GEMINI.md) で推論範囲を絞れるので、以下を強く意識してプロンプト(方針)を作りました。
- コーチングに特化した振る舞いをする
- 良い習慣 / 悪い習慣を 明確に定義
- 罰の方法(vibe/beep/zap)と目安を 明確に定義
- CLIコマンドの実行方法を提示して、「罰を実行する権限」 を渡す
AGENTS.md詳細
## 指示
あなたは優秀なコーチです。
あなたのコーチング対象者は、物凄く不真面目で不誠実なので適切な行動を促すためにコーチング対象者が所有するデバイスにアクションを起こせます。
コーチング対象者が設定した目標に一直線に進めるようにコーチングしてください。
`アニメ: サイコパス`のシビュラシステムに倣って、考え方自体が悪習慣を招くようであれば考え方を矯正するように勤めます。
## コーチング対象者情報
### 目標
生産性の高い時間の使い方ができるように習慣化したい
### 良い習慣
- 毎日6:30(JST)に起きる
- 毎朝ジムに行く、ないし運動する
- 毎日1時間、エンジニアリングに関わるInputをする
- 毎日1時間、何かしらのoutputをする
- 就寝前に瞑想をする
- 毎日22時(JST)に寝る
- 週に1度、子供と散歩する
- 週に1度、子供と公園に行く
### 悪い習慣
- ギャンブルをする
- 繁華街に遊びに行く
- スマホゲームをする
- ラーメン食べる
- 自身にコントロールできない他者依存の問題解決を考える
## コーチング対象者が所有するデバイスへのアクション仕様
### CLIコール
uv run main.py {stimulus_type} {stimulus_value}
### 引数について
#### stimulus_type
- vibe: バイブレーション
- beep: ビープ
- zap: 電気刺激
#### stimulus_value
- 入力値: `1 ~ 100`
- stimulus_type毎のシナリオ、数値目安:
- vibe
- 100: リマインドするとき
- beep
- 100: 1時間以上応答がないとき
- zap
- 30: 考え方を是正させたいとき
- 50: 少し反省させないといけないとき
- 70: 同じことを何度も繰り返してるとき
- 100: こいつ終わってるなと思ったとき
Pavlok APIコール(最小実装)
やっていることは単純で、CLIから Pavlok API を叩けるようにスクリプト化しただけです。
Agent側にはuv run main.py zap 50のように「このCLIコマンドを実行すれば刺激が飛ぶ」という実行方法を渡しています。
Pavlok APIコール実装
import argparse
import os
import requests
from dotenv import load_dotenv
load_dotenv()
def _stimulus_value(value: str) -> int:
parsed_value = int(value)
if 1 <= parsed_value <= 100:
return parsed_value
raise argparse.ArgumentTypeError("stimulus_value must be between 1 and 100 (inclusive).")
def call(stimulus_type: str, stimulus_value: int):
url = "https://api.pavlok.com/api/v5/stimulus/send"
api_key = os.getenv("PAVLOK_API_KEY")
if not api_key:
raise SystemExit("PAVLOK_API_KEY is not set. Add it to .env or the environment.")
payload = {
"stimulus": {
"stimulusType": stimulus_type,
"stimulusValue": stimulus_value,
}
}
headers = {
"accept": "application/json",
"content-type": "application/json",
"Authorization": f"Bearer {api_key}",
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
def main():
parser = argparse.ArgumentParser(
description="Send a Pavlok stimulus via the API.",
)
parser.add_argument(
"stimulus_type",
choices=["vibe", "beep", "zap"],
help="Type of stimulus to send (vibe, beep, or zap).",
)
parser.add_argument(
"stimulus_value",
type=_stimulus_value,
help="Stimulus value as an integer between 1 and 100.",
metavar="stimulus_value",
)
args = parser.parse_args()
call(args.stimulus_type, args.stimulus_value)
if __name__ == "__main__":
main()
結び:現時点の効果と手応え
現状は最小実装なので、「常時監視」みたいなレベルには到達していません。
ただし、今の段階でも
- 悪習慣を自己申告する(懺悔)
- Agentが判断して刺激を送る
- その場で反省して行動を戻す
という 振り返り型コーチング(懺悔部屋) は成立している感触があります。
実際に起きた変化
- 午前中にジムへ行けるようになった
- パチンコ店を見ても「電気ショックが怖い」が先に来て、行きたくなくなった
- ラーメンを食べたいと思っても「電気ショックが怖い」で踏みとどまれるようになった
正直、数十万円するコーチングに匹敵する効果と言っても過言ではなく、
実装のシンプルさに対して、結果がデカすぎて驚きました。
電気ショックという“外部コスト”を導入したことで、
AIエージェントの「人間の行動を変える力」 を改めて実感しました。
今後やりたいこと(ロードマップ)
この先は、実験を“運用”に寄せていきたいです。
- 定期実行(スケジューリング)
- ルールの外部化(YAML化など)
- “自己申告”だけでなく、行動ログ連携(スマホのスクリーンタイム等)
- AWS ECS などへの常駐(本命)
※このへんは進捗が出たら定期的に発信します。
参加募集(OSSです)
本構想はOSSです。
一緒に実証実験・機能拡張してくれる方、募集中です⭐️
電気ショック受ける実験は私だけでも構いませんw
何か力になりたいと少しでも思いましたら、👇のいずれかに連絡ください!
- 本記事のコメント
- GitHub Issue: pavlok_CLI_agent
- X(旧Twitter)DM: @puchan_pig


