Antigravityで楽しむ!謎の人事研修通知を自動演出する方法

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

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

Antigravity を使い込んでいると、AI coding workflow のなかで「ちょっとした息抜き」や「現実逃避」が欲しくなる瞬間が意外と多いものです。特に長時間の作業や、monorepo 内で複雑な path 管理・repository understanding に神経を使う作業が続くと、気分転換のきっかけがないまま集中力が切れてしまうことも。通知や演出系のSkillがもっと増えてほしい、という声もよく聞かれます。

Antigravity 固有の context 管理や path 指定にまつわる悩みも、実はこうした「作業の間延び」や「単調さ」と密接に絡んでいます。例えば:

  • Antigravity が context を見失って違う場所のコードを参照する
  • monorepo で package を跨いだ瞬間、Antigravity が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

こうした状況で、作業の合間に「謎の人事研修通知」が突然現れるような演出Skillがあれば、マンネリ化したAI coding workflowにちょっとした笑いとリフレッシュをもたらしてくれます。

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

一言サマリ: 作業中やコマンド実行時に、現実には絶対体験したくない“謎のOS人事研修通知”が唐突に炸裂し、Antigravity の単調な開発セッションに笑いと現実逃避を提供するSkill。

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

  • AI coding workflow の合間に、毎回ランダムな「人事研修系」通知が現れ、作業の単調さを緩和できる
  • monorepo や複雑な repository での path management に疲れたタイミングで、強制的に気分転換イベントが入る
  • 通知内容が毎回異なり、context や directory をまたいでもバリエーション豊富な演出が楽しめる
  • 現実のファイルやデータには一切影響を与えず、安心して導入できる
  • Antigravity の通知・演出系 Skill の幅を広げ、onboarding 時や長時間セッション時の“間”を演出できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-hr-training-alert .agent/skills/random-os-fake-hr-training-alert

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

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

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


> プロジェクトのセットアップを始めたい

[OS通知] 緊急: 本日14:00より「謎のパワポ芸入門」人事研修が開催されます。
参加は強制です。詳細は /docs/hr-training/powerpoint-skills.pdf をご参照ください。

[Antigravity] 現在の repository context: /Users/you/awesome-monorepo
[Antigravity] directory 構造を読み込み中...

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


> packages/api/ のテストコードを修正したい

[OS通知] 重要: OS公式「無限ビデオ視聴」研修が始まります。
終了時刻は未定です。途中退出は許可されていません。

[Antigravity] monorepo context: packages/api/ → packages/frontend/
[Antigravity] repository understanding を更新しました。

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


> ディレクトリ構造を整理してほしい

[OS通知] ご案内: ただ今より「謎マナー講座」への参加が必須となりました。
資料は /references/hr/manners-2024.md にアップロード済みです。

[Antigravity] path management を最適化中...
[Antigravity] memory をリフレッシュしました。

before / after の違い

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

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-hr-training-alert/
├── SKILL.md
├── scripts/
│   └── random_hr_training_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-hr-training-alert
description: 作業中やコマンド実行時に“人事研修”を想起させるランダムな通知を表示したい場合に発動。キーワード例: 研修, HR, 通知, OS, アラート, ジョーク, カオス, 演出, デスクトップ, ターミナル。
---

# 機能概要
このSkillは、作業中やコマンド実行時に、OSやターミナル上で“謎の人事研修強制参加通知”をランダムに表示します。通知内容は毎回異なり、「本日14時より“謎のパワポ芸入門”研修必須」「OS公式“無限ビデオ視聴”研修が始まります」など、現実では絶対に体験したくないカオスな人事イベントが次々と降ってきます。現実逃避や作業の合間の笑い、チーム内のコミュニケーション促進に最適です。

# 使い方
このSkillは、明示的な呼び出しは不要で、Antigravityが「研修」「HR」「通知」「アラート」などのキーワードや、作業中に“現実逃避”や“演出”を求める文脈を検知した際に自動発動します。ターミナルまたはOS通知機能を使い、違和感なく“人事研修系”の通知を表示します。

# 出力例
```
[ALERT] 緊急:本日14時より“謎のパワポ芸入門”研修必須
[NOTICE] 重要:OS公式“無限ビデオ視聴”研修が始まります
[INFO] ただ今より“謎マナー講座”を受講してください
[WARNING] 本日は“人事部主催:謎の自己分析ワークショップ”が開催されます
[ALERT] 参加必須:OS管理者による“謎のリモートお辞儀研修”
```

# 注意点
- 実データやファイルには一切影響しません。
- 通知は一時的な演出のみで、ローカルに記録や保存は行いません。
- 現実の人事イベントや実在の会社・団体名は出力されません。
- OS通知機能はWindows, macOS, Linuxで動作確認済みですが、環境によってはターミナル通知のみとなる場合があります。

# 参考資料
- references/design_notes.md
- https://docs.python.org/3/library/subprocess.html
- https://pypi.org/project/plyer/ (クロスプラットフォーム通知)

scripts/random_hr_training_alert.py

import sys
import os
import random
import argparse
import platform
import subprocess
from datetime import datetime

# 通知メッセージ候補
HR_ALERT_MESSAGES = [
    '緊急:本日14時より“謎のパワポ芸入門”研修必須',
    '重要:OS公式“無限ビデオ視聴”研修が始まります',
    'ただ今より“謎マナー講座”を受講してください',
    '本日は“人事部主催:謎の自己分析ワークショップ”が開催されます',
    '参加必須:OS管理者による“謎のリモートお辞儀研修”',
    '注意:本日17時より“謎のビジネスカジュアル講座”が始まります',
    'OS推奨:全ユーザー対象“謎の名刺交換ロールプレイ”',
    '重要:本日中に“無限アンケート記入”を完了してください',
    '緊急:本部長による“謎のZoomカメラON強制”研修',
    '本日限定:“謎のワークスタイル変革”セッション参加必須',
    '人事部より:“謎の社内SNS活用術”講座を受講してください',
    'OSより:今すぐ“謎の1on1面談”を予約してください',
    '全社通達:“謎の自己啓発ビデオ”を視聴してください',
    '警告:本日中に“謎のエクセル方眼紙研修”を完了してください',
    'HR管理者より:“謎のリモート背景選手権”開催のお知らせ'
]

HR_ALERT_LEVELS = [
    ('ALERT', '[ALERT]'),
    ('NOTICE', '[NOTICE]'),
    ('INFO', '[INFO]'),
    ('WARNING', '[WARNING]')
]


def pick_random_alert():
    level, prefix = random.choice(HR_ALERT_LEVELS)
    message = random.choice(HR_ALERT_MESSAGES)
    return f"{prefix} {message}", level


def notify_os(message, level):
    system = platform.system()
    try:
        if system == 'Darwin':  # macOS
            title = '人事研修通知'
            script = f'display notification "{message}" with title "{title}"'
            subprocess.run(['osascript', '-e', script], check=True)
        elif system == 'Linux':
            subprocess.run(['notify-send', '人事研修通知', message], check=True)
        elif system == 'Windows':
            from win10toast import ToastNotifier
            toaster = ToastNotifier()
            toaster.show_toast('人事研修通知', message, duration=5, threaded=True)
        else:
            print(message)
    except Exception as e:
        print(f"[INFO] OS通知失敗: {e}\n{message}")


def notify_terminal(message, level):
    # 色分け: ALERT=赤, WARNING=黄, NOTICE=青, INFO=緑
    color_map = {
        'ALERT': '\033[91m',
        'WARNING': '\033[93m',
        'NOTICE': '\033[94m',
        'INFO': '\033[92m'
    }
    endc = '\033[0m'
    color = color_map.get(level, '')
    print(f"{color}{message}{endc}")


def main():
    parser = argparse.ArgumentParser(description='謎の人事研修通知スクリプト')
    parser.add_argument('--os-notify', action='store_true', help='OS通知も同時に行う')
    parser.add_argument('--count', type=int, default=1, help='通知回数 (デフォルト:1)')
    parser.add_argument('--interval', type=float, default=0, help='通知間隔(秒)')
    args = parser.parse_args()

    for i in range(args.count):
        message, level = pick_random_alert()
        notify_terminal(message, level)
        if args.os_notify:
            notify_os(message, level)
        if args.interval > 0 and i < args.count - 1:
            import time
            time.sleep(args.interval)

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、作業やコマンド実行中に“謎の人事研修通知”をランダムに表示し、現実逃避や笑いを提供する演出系ツールです。通知内容は毎回異なり、実際の業務やデータには一切影響を与えません。

# 公式ドキュメント抜粋
- Python subprocess: https://docs.python.org/3/library/subprocess.html
- plyer通知: https://pypi.org/project/plyer/
- win10toast: https://pypi.org/project/win10toast/

# 利用例
- ターミナル作業中に突然“謎のパワポ芸入門”研修通知が表示され、場の空気を和ませる
- チームの朝会やイベントで、ジョークとして活用

# 注意点
- 通知は一時的なもので、ファイルやデータベースへの保存は行いません
- 実在する会社や団体・個人名は一切出力されません
- OS通知は環境によって動作しない場合があり、その場合はターミナル表示のみとなります

# 設計方針
- ランダム性とバリエーションを重視し、毎回異なる通知を生成
- OS/ターミナル両対応で、違和感なく“人事研修系”通知を演出
- 安全性を最優先し、実データやシステム設定には一切影響しない設計

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-hr-training-alert .agent/skills/random-os-fake-hr-training-alert

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

3. ファイル配置確認

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

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

新しいSkillが自動で認識されます。リスト確認したい場合は ${productName} に「使える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で謎の人事研修通知が次々飛び出す演出を試してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。

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

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

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

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