Antigravity ユーザーが日常でぶつかる悩み
Antigravity を日々使っていると、AI coding workflow の中で思わず苦笑いしてしまう瞬間が多々あります。特に context や repository understanding に関するやりとりで、緊張感や単調さが続きがちです。そんな時、ふとした“遊び心”やユーモアが挟まれることで、気持ちが軽くなった経験はありませんか?
- Antigravity が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
こうした緊張感や単調なやり取りの合間に、突然現れる“謎のパスワードポリシー通知”が、現場の空気を一瞬で和ませてくれます。通知・演出・OS連携カテゴリのSkillだからこそ、真面目な作業フローの中に混沌としたジョークを差し込む絶妙なタイミングが生まれます。
この Skill が一言でいうと何を解決するか
一言サマリ: 作業中に突如“謎のOSパスワードポリシー変更通知”がデスクトップに現れますSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- Antigravity の AI coding workflow に、意図的な“脱力タイミング”を挿入し、集中しすぎた session の空気を和らげる
- monorepo の複雑な directory や path management の合間に、無意味で理不尽な通知が出ることで、心の余白や会話のきっかけが生まれる
- onboarding や長時間作業時に、記憶や context が煮詰まったタイミングで、思わず笑ってしまう演出が入る
- repository understanding を巡るやり取りが単調になりがちな場面で、唐突な通知が会話の流れをリフレッシュする
- 実際のパスワードや設定には一切影響せず、安全に楽しめる(本物の設定は変わらない)
GitHub から degit でコマンド1行、Antigravity の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/antigravity/os-random-fake-password-policy-alert .agent/skills/os-random-fake-password-policy-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
> プロジェクトの初期セットアップをお願いします
[通知] 重要:本日よりパスワードポリシーが更新されました。
新ルール:パスワードには「季節の俳句」+「円周率12桁」+「好きな給食メニュー」を必ず含めてください。
例:春の夜/3.141592653589/カレーシチュー
ご注意:記憶は禁止、毎日ランダム変更が推奨されます。
(この通知はOSの仕様変更によるものです)
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ と packages/web/ の依存関係を整理してください
[警告] パスワードポリシーが再度変更されました。
・母音だけのパスワードは不可
・「今日の給食」メニューを英語で含める必要あり
・数字はフィボナッチ数列から12桁抜き出してください
例:aeiou → NG, Spaghetti/112358132134/OK
このルールは本日限定です。
シーン3: お遊び的な使い方
> ちょっと疲れたので何か面白いことを
[通知] 新パスワードルール発表:
・ユーザー名の母音だけを逆順で
・「好きなアイス」の名前をローマ字で
・素数をランダムで5個並べる
例:uoiea/aisu/235711
忘れた場合は一回深呼吸してください。
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Antigravity が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 唐突な通知で集中がリセット、会話に余白が生まれる |
発動方式
description マッチでの暗黙発動。
Skill の中身を全部見せる
.agent/skills/os-random-fake-password-policy-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agent/skills/os-random-fake-password-policy-alert/
├── SKILL.md
├── scripts/
│ └── fake_password_policy_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/fake_password_policy_alert.py |
OSランダム偽パスワードポリシー通知スクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-random-fake-password-policy-alert
description: 開発現場や運用時に“パスワード”や“ポリシー”に関連する会話・コマンド・ドキュメント編集が認識された際、Antigravityが自動的に理不尽な偽パスワードポリシー通知を表示し、現場の緊張感を和ませます。
---
# 機能概要
本Skillは、OSのパスワードポリシーが突然意味不明な内容に変更されたかのような通知をデスクトップに表示します。通知内容は「季節の俳句+円周率12桁+好きな給食メニュー必須」や「新ルール:母音だけのパスワード不可」など、現実にはありえない理不尽なものばかり。実際のパスワード設定やシステムには一切影響を与えず、開発現場の緊張感やマンネリを一瞬で和らげる混沌系ジョーク演出を実現します。
# 使い方
このSkillは明示的な呼び出しは不要です。「パスワード」「password」「ポリシー」「セキュリティ」「認証」などのキーワードを含む会話やコマンド、ドキュメント編集がトリガーとなり、Antigravityが自動で実行します。通知は完全ランダムまたは一定間隔で出現し、内容も毎回異なります。
# 出力例
```
【重要】OSパスワードポリシー変更のお知らせ
本日よりパスワードは「季節の俳句+円周率12桁+好きな給食メニュー」を含める必要があります。
【新ルール】
母音だけのパスワードは使用禁止となりました。
【推奨】
毎日ランダムなパスワードに変更し、記憶しないでください。
【参考】
詳細は社内Wiki「謎のポリシー集」参照。
```
# 注意点
- 実際のパスワードやOS設定には一切影響を与えません。
- 通知内容は完全にジョークであり、現実のセキュリティ運用には従いません。
- 通知履歴や内容はローカルには保存されません。
- 重要な作業中に表示される場合がありますので、演出目的であることをご理解ください。
# 参考資料
- references/design_notes.md に設計方針や通知例を記載
- 公式: https://docs.python.org/ja/3/library/notify2.html (notify2によるデスクトップ通知)
scripts/fake_password_policy_alert.py
import sys
import random
import time
import argparse
import threading
import notify2
from datetime import datetime
# 偽パスワードポリシー文言候補
POLICY_MESSAGES = [
"本日よりパスワードは『季節の俳句+円周率12桁+好きな給食メニュー』を含める必要があります。",
"新ルール:母音だけのパスワードは使用禁止となりました。",
"推奨:毎日ランダムなパスワードに変更し、記憶しないでください。",
"重要:パスワードには最低1つの元素記号と3つの旧国名を含めてください。",
"注意:パスワードに『password』や『1234』を含めると即時退場となります。",
"新基準:パスワードは1日ごとに漢字→カタカナ→ひらがな→英語でローテーションしてください。",
"必須:パスワードの末尾に好きな給食メニューをつけてください。",
"推奨:パスワード生成にはサイコロを使い、出た目の数だけ母音を増やしてください。",
"特例:月曜日のみパスワードの最初に『月』を追加してください。",
"注意:パスワードに記号を10種類以上含めることが義務化されました。"
]
REFERENCE_LINK = "詳細は社内Wiki『謎のポリシー集』参照。"
# 通知タイトル
NOTIFY_TITLE = "OSパスワードポリシー変更のお知らせ"
# 通知の組み立て
def generate_fake_policy():
count = random.randint(2, 4)
messages = random.sample(POLICY_MESSAGES, count)
body = "\n".join([f"・{m}" for m in messages])
return f"【重要】{NOTIFY_TITLE}\n{body}\n\n【参考】\n{REFERENCE_LINK}"
# デスクトップ通知
def send_notification(message):
try:
notify2.init("FakePasswordPolicy")
n = notify2.Notification(NOTIFY_TITLE, message)
n.set_urgency(notify2.URGENCY_NORMAL)
n.set_timeout(10000) # 10秒
n.show()
except Exception as e:
print(f"[ERROR] 通知送信に失敗しました: {e}")
# ログ記録(標準出力のみ)
def log_notification(message):
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"[{now}] 通知発生:\n{message}\n{'-'*40}")
# 通知発火スレッド
class NotificationThread(threading.Thread):
def __init__(self, interval_min=300, interval_max=1200):
super().__init__()
self.interval_min = interval_min
self.interval_max = interval_max
self._running = True
def stop(self):
self._running = False
def run(self):
while self._running:
sleep_time = random.randint(self.interval_min, self.interval_max)
time.sleep(sleep_time)
message = generate_fake_policy()
send_notification(message)
log_notification(message)
# CLIサブコマンド
def main():
parser = argparse.ArgumentParser(description="OSランダム偽パスワードポリシー通知スクリプト")
subparsers = parser.add_subparsers(dest="command")
# 通知を1回だけ出す
parser_once = subparsers.add_parser("once", help="偽パスワードポリシー通知を1回表示")
# 通知を定期的に出す
parser_daemon = subparsers.add_parser("daemon", help="定期的に通知を表示 (デフォルト:5-20分間隔)")
parser_daemon.add_argument("--min", type=int, default=300, help="最小間隔(秒)")
parser_daemon.add_argument("--max", type=int, default=1200, help="最大間隔(秒)")
# 通知文面のサンプルを表示
parser_sample = subparsers.add_parser("sample", help="偽ポリシー文面をランダム生成して標準出力")
parser_sample.add_argument("-n", type=int, default=3, help="生成数")
args = parser.parse_args()
if args.command == "once":
message = generate_fake_policy()
send_notification(message)
log_notification(message)
elif args.command == "daemon":
t = NotificationThread(interval_min=args.min, interval_max=args.max)
t.daemon = True
t.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
t.stop()
print("終了します。")
elif args.command == "sample":
for _ in range(args.n):
message = generate_fake_policy()
print(message)
print("-"*40)
else:
parser.print_help()
if __name__ == "__main__":
main()
references/design_notes.md
# 概要
このSkillは、現場の緊張感を和らげるために、理不尽かつ無意味なパスワードポリシー通知をデスクトップにランダム表示することを目的としています。実際のシステム設定やセキュリティには一切影響を与えません。
# 公式ドキュメント抜粋
デスクトップ通知にはPythonのnotify2ライブラリを利用しています。
- https://pypi.org/project/notify2/
- https://docs.python.org/ja/3/library/notify2.html
# 利用例
- パスワードやポリシーに関する会話・コマンドが認識された際に自動発動
- 定期的なジョーク演出として現場の雰囲気を和ませる
# 注意点
- 通知内容は完全なフィクションであり、実際のセキュリティ運用には従いません。
- 通知履歴や内容はローカル保存されません。
- 重要な作業中でも通知が出る場合があるため、演出目的であることを事前に周知してください。
# 設計方針
- 通知内容はランダム生成し、毎回異なる理不尽さを演出
- OSやユーザー設定には一切影響しない安全設計
- CLIからの明示呼び出しやdaemonモードもサポート
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Antigravity はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Antigravity がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/antigravity/os-random-fake-password-policy-alert .agent/skills/os-random-fake-password-policy-alert
.agent/skills/os-random-fake-password-policy-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agent/skills/os-random-fake-password-policy-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 でも有効か?
- プロジェクト指示との連携をどう組み立てるか?
- 通知が本当にランダム/定期で出現するか(偽パスワードポリシー内容のバリエーション)
- 本物の設定には影響しないこと(安全性)
- 通知文面がしっかりネタとして伝わるか
実際に Antigravity で試した検証ログは Antigravityで謎のパスワードポリシー通知を体験してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
