Antigravityで楽しむ!OS人格変化通知の驚きの活用ガイド

  • URLをコピーしました!
目次

Antigravity ユーザーが日常でぶつかる悩み

Antigravity を日々使っていると、AI coding workflow のなかで「ちょっとした遊び心」や「作業中の気分転換」が欲しくなる瞬間が意外と多いものです。特に、長時間リポジトリを触っていると、AI エージェントの反応が淡々としすぎていて、ふとしたタイミングで何かインパクトのある演出が欲しくなることも。通知や演出系 Skill の需要は、単なる効率化だけでなく、作業体験そのものを彩る役割も担っています。
Antigravity の context 管理や repository understanding が進化する一方で、ユーザーの「飽き」や「マンネリ感」にアプローチする仕掛けはまだまだ少ないのが現状です。こうした状況で、次のような悩みがよく挙がります。

  • 長時間作業していると、AI エージェントの通知や返答がパターン化して単調に感じる
  • monorepo で複雑な directory 構造を扱う際、集中しすぎて context の切り替えタイミングを見失う
  • onboarding や session 再開時、毎回同じような流れで始まるため、気分転換になるきっかけが欲しい
  • path management や repository understanding の説明が続くと、作業が機械的になりがち
  • AI の long context 利用時、stale context 問題だけでなく「AI からの刺激が減る」ことにも気づきにくい

こうした「通知・演出・OS連携」カテゴリの悩みは、単なる productivity だけでなく、Antigravity との日常的な付き合い方にも直結しています。

この Skill が一言でいうと何を解決するか

一言サマリ: あなたが作業に没頭しているとSkill。

この Skill を導入することで、Antigravity 利用中に突如として「OSの人格が変わった」と宣言するシュールな通知が現れ、作業の合間に思わず二度見したくなるようなユーモアが日常に加わります。具体的には以下のようなメリットが得られます。

  • AI coding workflow のマンネリを打破し、作業中に意外性のある演出で気分転換ができる
  • onboarding や session 再開など、routine なタイミングで repository や directory context に新鮮さをプラスできる
  • monorepo での path management や repository understanding の最中にも、突然の通知で集中をリセットできる
  • 長時間の long context セッションでも、シュールな通知が挟まることで stale context への気づきを促進
  • Antigravity の通知体験に「遊び心」を加え、日々の開発をより楽しくできる
QUICK INSTALL
このSkillをすぐ試す

GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。

npx degit aazutaku/ai-note/antigravity/random-os-sentiment-shift-alert .agent/skills/random-os-sentiment-shift-alert

実行したらこうなる (3つの利用シーン)

この Skill は description マッチによる暗黙発動で、作業の流れを邪魔しない範囲で突如としてシュールな通知を表示します。実際の利用シーンを3つ、擬似的な terminal 出力例で紹介します。

シーン1: session 開始時 (プロジェクト初動で)


> このリポジトリの構造を把握して、main ディレクトリから進めてほしい

[通知] OSよりお知らせ:
本日より「ツンデレモード」に切り替わりました。
以後、やたら素っ気ない返答が増えますが、気にしないでください。

Antigravity: repository understanding を開始します。
main/ ディレクトリの context を取得しました。

シーン2: monorepo / package 跨ぎ作業時


> packages/auth と packages/api の両方を見て、依存関係を整理して

[通知] OS人格変更のお知らせ:
今から「上から目線モード」でご案内いたします。
以後、やたら偉そうなトーンになりますが、ご了承を。

Antigravity: monorepo の path management を実行中。
packages/auth/ と packages/api/ の context を取得しました。

シーン3: お遊び的な使い方


> ちょっと疲れたので何か面白いことして

[通知] OSキャラ設定変更:
しばらく「詩人モード」でお届けします。
以後、通知やログがポエム調になります。

Antigravity: memory snapshot を詩的に保存しました。
「context の波間に、あなたのコードが漂う──」

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開+謎通知で気分転換
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る+シュールな人格変更通知
長時間 workflow long context で重要箇所が薄まる 突然の通知で集中リセット、stale context への気づきも促進

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

.agent/skills/random-os-sentiment-shift-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.agent/skills/random-os-sentiment-shift-alert/
├── SKILL.md
├── scripts/
│   └── random_os_sentiment_shift_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_sentiment_shift_alert.py OS人格変更通知スキル
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-sentiment-shift-alert
description: 作業に集中している際や長時間の無操作が検知された場合など、ユーザーの注意が散漫になりがちなタイミングで、OSの人格が急変したかのようなランダムな通知をデスクトップに表示します。通知内容は毎回異なり、シュールで不条理な演出を提供します。
---

# 機能概要
このSkillは、ユーザーが作業に没頭している最中や、一定時間操作がなかった場合などに、まるでOSの人格が急変したかのようなランダム通知をデスクトップに表示します。通知内容は「本日よりツンデレモードです」「しばらく詩人になります」など毎回異なり、実際のOS挙動や設定には一切影響を与えません。仕事中に不意打ちで現れる不可解な通知により、思わず二度見したくなるようなユーモアと意外性を演出します。

# 使い方
このSkillは明示的な呼び出しは不要で、Antigravityのsemantic-match-onlyトリガーにより自動発動します。長時間の無操作や「集中」「作業」「退屈」「眠い」といったキーワードが検出されると、ランダムなタイミングで通知が表示されます。手動でスクリプトを実行する場合は、`python random_os_sentiment_shift_alert.py` で即座に通知を出すことも可能です。

# 出力例
```
[通知] OS人格変更のお知らせ
本日よりツンデレモードに移行します。以後、指示には素直に従いません。

[通知] OS人格変更のお知らせ
しばらく詩人になります。すべてのエラーメッセージが短歌になります。

[通知] OS人格変更のお知らせ
今からやたら上から目線で案内します。覚悟してください。
```

# 注意点
- このSkillは通知表示のみを行い、OSや作業環境の設定・挙動には一切影響しません。
- 通知内容はローカルに保存されません。
- Linux/macOSでは`notify-send`や`osascript`、Windowsでは`win10toast`等のAPIを利用します。
- 通知が表示されない場合は、通知APIの依存パッケージや権限設定を確認してください。

# 参考資料
- references/design_notes.md に設計方針や利用例を記載
- 通知API: https://github.com/jithurjacob/Windows-10-Toast-Notifications, https://pypi.org/project/pync/, https://man7.org/linux/man-pages/man1/notify-send.1.html

scripts/random_os_sentiment_shift_alert.py

import sys
import os
import random
import platform
import time
import argparse

# 通知メッセージ候補
NOTIFICATIONS = [
    "本日よりツンデレモードに移行します。以後、指示には素直に従いません。",
    "しばらく詩人になります。すべてのエラーメッセージが短歌になります。",
    "今からやたら上から目線で案内します。覚悟してください。",
    "本日よりOSは無駄にポジティブです。どんなエラーも褒めます。",
    "今後しばらくは語尾に『にゃ』が付きます。",
    "これからは質問に対して謎の沈黙を貫きます。",
    "OSが哲学者モードになりました。全ての指示に問い返します。",
    "本日よりOSは昭和レトロモードです。すべての通知が時代錯誤になります。",
    "しばらくの間、OSは全ての操作に感謝します。",
    "今からOSは自信過剰モードです。何でも知っている風に振る舞います。",
    "OSが突然、詩人に目覚めました。通知が五七五になります。",
    "今からOSは無口モード。通知以外は一切話しません。",
    "しばらくの間、OSは全ての命令に疑問形で返します。",
    "本日よりOSはツンツンモード。冷たい対応になります。",
    "今からOSはやたら馴れ馴れしいキャラになります。"
]

TITLE = "OS人格変更のお知らせ"

# OSごとの通知関数
def notify_linux(title, message):
    try:
        from subprocess import run
        run(['notify-send', title, message])
    except Exception as e:
        print(f"[通知失敗] {e}")

def notify_macos(title, message):
    try:
        from subprocess import run
        script = f'display notification "{message}" with title "{title}"'
        run(['osascript', '-e', script])
    except Exception as e:
        print(f"[通知失敗] {e}")

def notify_windows(title, message):
    try:
        from win10toast import ToastNotifier
        toaster = ToastNotifier()
        toaster.show_toast(title, message, duration=7)
    except ImportError:
        print("win10toastがインストールされていません。pip install win10toast で導入してください。")
    except Exception as e:
        print(f"[通知失敗] {e}")

def print_notification(title, message):
    print(f"[通知] {title}\n{message}\n")

def send_notification(title, message):
    system = platform.system()
    if system == "Linux":
        notify_linux(title, message)
    elif system == "Darwin":
        notify_macos(title, message)
    elif system == "Windows":
        notify_windows(title, message)
    else:
        print_notification(title, message)

# ランダムに通知内容を選択
def get_random_notification():
    return random.choice(NOTIFICATIONS)

# 無操作時間を監視(Linux/X11のみ簡易実装)
def get_idle_time():
    system = platform.system()
    if system == "Linux":
        try:
            import subprocess
            idle = subprocess.check_output(['xprintidle'])
            return int(idle) // 1000
        except Exception:
            return 0
    # macOS/Windowsや未対応環境では0を返す
    return 0

# CLIサブコマンド: send, watch, list, summary
def list_messages():
    for i, msg in enumerate(NOTIFICATIONS, 1):
        print(f"{i}. {msg}")

def summary():
    print(f"通知メッセージ候補数: {len(NOTIFICATIONS)}")
    print(f"OSサポート: Linux, macOS, Windows")
    print("実際のOS設定や挙動には一切影響しません。\n")

def watch_mode(idle_sec, interval):
    print(f"無操作{idle_sec}秒ごとに人格変更通知を送信します。Ctrl+Cで終了。")
    last_sent = 0
    try:
        while True:
            idle = get_idle_time()
            if idle >= idle_sec and time.time() - last_sent > interval:
                msg = get_random_notification()
                send_notification(TITLE, msg)
                last_sent = time.time()
            time.sleep(2)
    except KeyboardInterrupt:
        print("\n監視を終了します。")

def main():
    parser = argparse.ArgumentParser(description="OS人格変更通知スキル")
    subparsers = parser.add_subparsers(dest="command")

    send_parser = subparsers.add_parser("send", help="ランダム通知を即時送信")
    list_parser = subparsers.add_parser("list", help="通知候補一覧を表示")
    summary_parser = subparsers.add_parser("summary", help="概要を表示")
    watch_parser = subparsers.add_parser("watch", help="無操作時に自動通知")
    watch_parser.add_argument("--idle", type=int, default=1200, help="無操作秒数(デフォルト:1200秒)")
    watch_parser.add_argument("--interval", type=int, default=1800, help="通知間隔(秒)")

    args = parser.parse_args()
    if args.command == "send" or args.command is None:
        msg = get_random_notification()
        send_notification(TITLE, msg)
    elif args.command == "list":
        list_messages()
    elif args.command == "summary":
        summary()
    elif args.command == "watch":
        watch_mode(args.idle, args.interval)
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、OSの人格が突如変わったかのような通知をランダムに表示し、ユーザーに予期せぬユーモアと休憩のきっかけを提供します。実際のOS挙動や作業内容には一切干渉せず、通知のみを純粋に演出目的で出します。

# 公式ドキュメント抜粋
- Linux: `notify-send` コマンド (libnotify)
- macOS: `osascript` (AppleScript経由)
- Windows: `win10toast` Pythonパッケージ

# 利用例
- 長時間作業や集中モード時のリフレッシュ演出
- チーム内での雑談のきっかけ
- 開発現場や勉強会でのデモンストレーション

# 注意点
- 通知APIが動作しない場合、依存パッケージや権限設定を確認してください。
- メッセージ内容はローカル保存されません。
- 実際のOS設定やファイルには影響しません。

# 設計方針
- シュールかつ多様な通知内容を用意し、繰り返し利用しても飽きない工夫を重視
- OS依存部分は自動的に判別し、最適な通知APIを選択
- コマンドラインからも即時通知・一覧・監視モードが利用可能

導入手順

このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。

1. 前提

  • Node.js v16 以上 (degit 実行に必要)
  • Antigravity がローカルで動いていること

2. degit でフォルダ取得

プロジェクトのルートで以下のコマンドを実行します。

npx degit aazutaku/ai-note/antigravity/random-os-sentiment-shift-alert .agent/skills/random-os-sentiment-shift-alert

.agent/skills/random-os-sentiment-shift-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agent/skills/random-os-sentiment-shift-alert
# SKILL.md, scripts/, references/, README.md があればOK

4. Antigravity を再起動 (or Skill 自動検出を待つ)

新しいSkillが自動で認識されます。リスト確認したい場合は Antigravity に「使えるSkill一覧を見せて」と聞く と Skill 名で出てきます。

5. 動作確認

自然言語で発動条件にマッチする指示を出すと Skill が動きます。期待される出力イメージは「実行したらこうなる」セクションを参照してください。

こんな瞬間に便利

  • session 開始時: 前回までの repo 把握を Antigravity に一発で復元させたい
  • monorepo 移動時: packages を跨いだ瞬間に context を切り替えたい
  • onboarding 時: 新しい repo を Antigravity に把握させ、こちらが path を全部指定する手間を省きたい
  • session 再開時: long context が切れた後でも、必要な path と directory 構造だけ素早く戻したい
  • package 跨ぎ作業時: directory boundary を Skill 側で管理して、irrelevant な path 混入を防ぎたい
  • long-running workflow 前: long context で重要箇所が薄まる前に snapshot を取りたい

気になるポイント (壊れそうな箇所)

実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:

  • stale context 問題: 長時間 workflow で Skill 出力が古くなり、現状と乖離する可能性
  • directory 増えすぎ問題: 大規模 repo で全 directory を網羅すると出力が肥大化して context window を圧迫
  • monorepo 肥大化: packages が多い構成では出力が雑になり、結局 path 指定し直しになる懸念
  • irrelevant path 混入: node_modules / build 成果物 / generated コードを拾ってしまう可能性
  • Antigravity 固有の引っかかり: description のセマンティックマッチ精度が要件次第
  • 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory

試す前に確かめたいこと

この Skill を実運用に投入する前に確かめたい問いを並べる:

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • プロジェクト指示との連携をどう組み立てるか?
  • 本当にただの通知で、OSや作業内容に影響しないか?
  • 通知バリエーションが十分にシュールで、複数回実行しても飽きないか?

実際に Antigravity で試した検証ログは Antigravityの謎通知スキルを使ってみた!OSの人格が急変する演出を体験 にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。

関連タグで他のSkill記事を探す

本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次