Antigravityで楽しむ!突然現れるOS省エネ通知の仕組みと活用法

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

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

AI coding workflow を Antigravity で回していると、真面目な開発支援だけでなく、ちょっとした遊び心や息抜きが欲しくなる瞬間が意外と多いものです。特に長時間にわたる session や、repository understanding に全力を注いだ後など、ふとしたタイミングで「気分転換できる何か」が恋しくなることがあります。

また、チームで monorepo を扱っていると、onboarding の合間や context 切り替え時に場が和むイベントが欲しくなることも。Antigravity の通知・演出・OS連携 Skill を活用すれば、単調になりがちな開発フローにユーモアを加えられる可能性があります。

  • Antigravity が context を見失って違う場所のコードを参照する瞬間、思わず笑いに変えたい
  • monorepo で package を跨いだ直後、集中力が切れて息抜きしたくなる
  • session を再開したとき、前回までの context や path 指定が面倒で気分転換したい
  • 長時間 workflow で long context が膨らみすぎ、重要な情報が薄まるときに一息入れたい
  • 「ここはこういう構造のリポジトリ」と毎回説明するのが煩わしく、ちょっとした演出で場を和ませたい

こうした「真面目な作業の合間に、無害なネタ通知で空気を変える」ニーズは、意外と多くの Antigravity ユーザーが共感するはずです。

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

一言サマリ: 作業中に突然“OSのパワーセーバー警告”をデスクトップ通知で炸裂させるスキルですSkill。

もう少し具体化すると、このSkillを入れることで以下のような状態になる:

  • Antigravity の AI coding workflow に「突発ネタ通知」という遊び心を追加できる
  • 長時間 session や repository understanding の合間に、強制的に集中をリセットして気分転換できる
  • onboarding や monorepo context 切り替え時に、チーム内で笑いを誘う演出を仕込める
  • directory や path management の説明タイミングで、あえて無意味な警告を挟み場を和ませる
  • 実害ゼロ・無意味な省エネ指示で、Antigravity の通知連携を体験的に楽しめる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-power-saver-alert .agent/skills/random-os-fake-power-saver-alert

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。

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


> 新しいリポジトリで作業を始めたい

[Antigravity Notification]
OS省エネ警告: CPU温存のため、タイピングは10分間ご遠慮ください。
ヒント: repository understanding は思考だけで進めましょう。

(通知は自動的にデスクトップに表示されます)

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


> packages/core から packages/ui に移動して編集

[Antigravity Notification]
パワーセーバー発動: マウス移動が過剰です。directory 構造の全把握は一時中断してください。
推奨: path management の説明も省エネモードで。

(意味はありませんが、場が和みます)

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


> ちょっと息抜きしたい

[Antigravity Notification]
電力節約のため、思考も控えめにお願いします。
repo の全ファイルを眺めるのは明日にしましょう。

(何も効力はありません)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 強制的に集中をリセットし、workflow にリズムが生まれる

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-power-saver-alert/
├── SKILL.md
├── scripts/
│   └── fake_power_saver_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/fake_power_saver_alert.py ランダムな偽パワーセーバー警告をデスクトップ通知するスクリプト
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-power-saver-alert
description: 作業や集中状態、OS通知、パワーセーブ、ジョーク、演出、暇つぶしなどのキーワードが会話や指示に現れた際、AntigravityがこのSkillを自動発動し、ユーザーのデスクトップにランダムな“偽パワーセーバー警告”を一定間隔で表示します。
---

# 機能概要
このSkillは、作業中のユーザーに対して、あたかもOSが発したかのような“パワーセーバー警告”をデスクトップ通知でランダムに表示します。全く根拠のない省エネ指示(例:「CPU温存のため10分間タイピング禁止」など)を炸裂させ、職場や自宅で謎の笑いと混乱を演出します。実害ゼロ、ネタ度MAXの暇つぶし・気分転換に特化した演出Skillです。

# 使い方
このSkillは明示的な呼び出しは不要です。Antigravityが「省エネ」「パワーセーブ」「通知」「ジョーク」「暇つぶし」などのキーワードや、集中作業中の雰囲気を検知すると自動的に発動します。手動テストやデバッグ時は `python fake_power_saver_alert.py --test` で即時通知を表示できます。

# 出力例
```
[通知] OSパワーセーバー警告: CPU温存のため10分間タイピング禁止
[通知] 電力節約のため思考も控えめにお願いします
[通知] マウス移動過多: 省エネモード発動中
[通知] ディスプレイ輝度自動減光中。目を細めてご利用ください
[通知] 無意味なクリックが多発しています。省エネのため自重を推奨
```

# 注意点
- このSkillはユーザー操作やPCの実際の省電力設定には一切影響しません
- 通知内容は完全なジョークであり、実効性はありません
- 通知履歴や内容はローカルには保存されません
- Windows/macOS/Linuxの主要デスクトップ環境で動作しますが、通知APIの制限がある場合は表示されないことがあります

# 参考資料
詳細は `references/design_notes.md` を参照してください。公式API仕様は [plyer通知ドキュメント](https://plyer.readthedocs.io/en/latest/) を参照。

scripts/fake_power_saver_alert.py

import sys
import time
import random
import argparse
import threading
from datetime import datetime

try:
    from plyer import notification
except ImportError:
    print("plyerモジュールが必要です。pip install plyer でインストールしてください。", file=sys.stderr)
    sys.exit(1)

FAKE_ALERTS = [
    "CPU温存のため10分間タイピング禁止",
    "マウス移動過多: 省エネモード発動中",
    "電力節約のため思考も控えめにお願いします",
    "ディスプレイ輝度自動減光中。目を細めてご利用ください",
    "無意味なクリックが多発しています。省エネのため自重を推奨",
    "省電力のため、今から5分間だけ深呼吸してください",
    "OSが自動的にアイドル状態へ移行します。動かないでください",
    "エネルギー節約のため、今は何もしないでください",
    "CPU温度が低下中: そのまま静かにお過ごしください",
    "バッテリー節約のため、画面を見つめる時間を減らしましょう",
    "省エネモード: 余計な思考やアイデアの発生を抑制中",
    "パワーセーブ発動: キーボード入力を控えてください",
    "省エネのため、しばらくマウスを手放してください",
    "OS省電力警告: まばたき回数を減らしてください",
    "電力節約のため、心拍数を下げてください"
]

HISTORY = []

DEFAULT_INTERVAL = 600  # 10分(秒)
MIN_INTERVAL = 60       # 1分
MAX_INTERVAL = 1800     # 30分


def send_fake_alert(alert_text=None):
    if alert_text is None:
        alert_text = random.choice(FAKE_ALERTS)
    title = "OSパワーセーバー警告"
    notification.notify(
        title=title,
        message=alert_text,
        app_name="FakePowerSaver",
        timeout=10
    )
    timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    HISTORY.append((timestamp, alert_text))
    print(f"[{timestamp}] [通知] {title}: {alert_text}")


def alert_loop(interval, stop_event):
    while not stop_event.is_set():
        send_fake_alert()
        for _ in range(interval):
            if stop_event.is_set():
                break
            time.sleep(1)


def list_history():
    if not HISTORY:
        print("通知履歴はありません。")
        return
    for ts, msg in HISTORY:
        print(f"{ts} | {msg}")


def summary():
    print(f"通知回数: {len(HISTORY)}")
    unique = set(msg for _, msg in HISTORY)
    print(f"ユニークな通知内容: {len(unique)}件")
    print("最近の通知:")
    for ts, msg in HISTORY[-5:]:
        print(f"  {ts} | {msg}")


def main():
    parser = argparse.ArgumentParser(description="ランダムな偽パワーセーバー警告をデスクトップ通知するスクリプト")
    subparsers = parser.add_subparsers(dest='command')

    parser_run = subparsers.add_parser('run', help='定期的に偽警告を通知')
    parser_run.add_argument('--interval', type=int, default=DEFAULT_INTERVAL, help='通知間隔(秒)')

    parser_test = subparsers.add_parser('test', help='即時で偽警告を1回通知')

    parser_list = subparsers.add_parser('list', help='通知履歴を表示')
    parser_summary = subparsers.add_parser('summary', help='通知履歴のサマリー')

    if len(sys.argv) == 1:
        # デフォルトはrun
        args = parser.parse_args(['run'])
    else:
        args = parser.parse_args()

    if args.command == 'run':
        interval = args.interval
        if interval < MIN_INTERVAL or interval > MAX_INTERVAL:
            print(f"通知間隔は{MIN_INTERVAL}~{MAX_INTERVAL}秒の範囲で指定してください。", file=sys.stderr)
            sys.exit(1)
        stop_event = threading.Event()
        try:
            print(f"ランダム偽パワーセーバー警告を{interval}秒ごとに通知します。Ctrl+Cで終了")
            alert_loop(interval, stop_event)
        except KeyboardInterrupt:
            print("\n通知を終了しました。")
            stop_event.set()
    elif args.command == 'test':
        send_fake_alert()
    elif args.command == 'list':
        list_history()
    elif args.command == 'summary':
        summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、作業中のユーザーに対して完全に架空の“パワーセーバー警告”をデスクトップ通知することで、職場や自宅の雰囲気を和ませたり、集中を意図的に妨害するジョーク演出を目的としています。実害は一切なく、通知内容も全てフィクションです。

# 公式ドキュメント抜粋
通知の実装にはPythonの[plyer](https://plyer.readthedocs.io/en/latest/)モジュールを使用しています。plyerはクロスプラットフォームでデスクトップ通知を送信できるため、Windows/macOS/Linuxの主要環境で動作します。

# 利用例
- オフィスでの気分転換やアイスブレイク
- リモートワーク中のチームメンバーへの小ネタ
- 長時間作業時の休憩促進や集中力リセット

# 注意点
- 通知内容は完全なジョークであり、OSやハードウェアには一切影響しません
- plyerの通知APIは一部のLinux環境やWaylandセッションで制限される場合があります
- 通知履歴はセッション中のみ保持され、永続保存は行いません

# 設計方針
Skill本体はシンプルかつ拡張性を重視し、通知間隔や内容のカスタマイズが容易です。今後はユーザー定義メッセージや通知履歴の永続化も検討可能です。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-power-saver-alert .agent/skills/random-os-fake-power-saver-alert

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

3. ファイル配置確認

ls .agent/skills/random-os-fake-power-saver-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 でも有効か?
  • プロジェクト指示との連携をどう組み立てるか?
  • ランダムな省エネ警告が一定間隔で正しく通知されるか?
  • 通知内容が毎回異なり、十分にふざけているか?
  • ユーザー操作やPCの状態には実害がないこと

実際に Antigravity で試した検証ログは Antigravityの省エネ警告通知をランダムに炸裂させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。

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

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

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

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