Antigravityで作業中に謎のウイルス通知を楽しむ方法入門

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

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

AI coding workflow を Antigravity で回していると、作業が単調になったり、思わぬタイミングで集中力が切れる場面が少なくありません。特に長時間にわたる repo や directory の探索・整理、context の調整に追われていると、どうしても気分転換のきっかけを見失いがちです。通知や演出系 Skill の不在は、現場の「間延びした空気」を助長しがちです。

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

こうした「同じ説明の繰り返し」や「単調な進行」は、真面目な作業現場ほど顕著です。ちょっとした刺激や笑いが入る余地がなく、結果的にオンボーディングや長時間作業の心理的負担が増します。通知・演出・OS連携カテゴリの Skill があれば、こうした空気を一変させるきっかけになるはずです。

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

一言サマリ: このスキルは作業中に突如「謎のウイルス検出アラート」をデスクトップ通知で演出し、現場に笑いとスリルをもたらします。

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

  • 長時間のAI coding workflowやrepository understanding作業に、突発的なジョーク通知が入り、気分転換や緊張緩和のきっかけになる
  • monorepoや大規模なdirectoryを横断する作業中でも、突然の「怠惰ウイルス」などの通知で、現場にユーモアと話題が生まれる
  • 退屈になりがちなonboardingやpath managementのタイミングにも、全く害のない演出で空気が和む
  • Skillの内容が100%ジョークであるため、システムやデータには一切影響を与えず、安心して導入できる
  • Antigravityのcontextやmemoryには干渉せず、通常のAI coding workflowを妨げない
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-virus-detect-alert .agent/skills/random-os-fake-virus-detect-alert

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

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

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


# プロジェクト初動でAntigravityを起動

[Antigravity] プロジェクトのディレクトリ構造を解析中...

[通知] 謎のウイルス検出: 『怠惰ウイルス(LazyVirus)』を system32/coffee_break_detector.dll で発見しました。
対応: 一時的にコーヒー休憩を推奨します。

[Antigravity] repository understanding を継続します。

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


# packages/api/ から packages/web/ へ移動して作業

[Antigravity] directory を packages/web/ に切り替えました。

[通知] 謎のウイルス検出: 『残業無限増殖型バグウイルス(OvertimeBug)』が repo/packages/web/utils.js で検出されました。
対応: 速やかに休憩を挟みましょう。

[Antigravity] context を新しい package に最適化します。

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


# 何気なくチャットを続けていたら

[通知] 謎のウイルス検出: 『コーヒー依存症ウイルス(CoffeeAddict)』が /usr/local/bin/antigravity で見つかりました。
対応: 今すぐ水分補給を!

[Antigravity] そのまま通常のAI coding workflowを継続します。

before / after の違い

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

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-virus-detect-alert/
├── SKILL.md
├── scripts/
│   └── fake_virus_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/fake_virus_alert.py 謎のOSウイルス検出アラートをランダム表示するSkill
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-virus-detect-alert
description: 作業中の『退屈』『飽き』『集中力低下』などのキーワードや、長時間無操作・単調なコマンド実行が続く際に発動。ユーザーの作業現場にユーモラスなOSウイルス検出通知を自動生成し、緊張緩和や気分転換を促します。
---

# 機能概要
このSkillは、作業中のデスクトップ環境に突如として『謎のOSウイルス検出アラート』をランダムなタイミング・内容で表示します。検出されるウイルス名は毎回異なり、「怠惰ウイルス」「残業無限増殖型バグウイルス」「コーヒー依存症ウイルス」など、現実には存在しないユーモラスなものばかりです。実際のシステムやデータには一切影響を与えず、退屈や単調な作業現場に不条理な笑いとスリルを提供します。

# 使い方
このSkillは明示的な呼び出しを必要とせず、"退屈" "眠い" "集中力が切れた" "飽きた" "長時間作業" "単調" などのキーワードや、一定時間無操作が続いた場合などに自動的に発動します。ユーザーの操作ログや作業状況を監視し、適切なタイミングでジョーク通知を生成します。

# 出力例
```
[ウイルス検出アラート]
OS: Windows 10
検出ウイルス: 怠惰ウイルス (Sloth.Trojan.Lazy-2024)
脅威レベル: 超低
対策: コーヒーを飲んでください

[ウイルス検出アラート]
OS: Ubuntu 22.04
検出ウイルス: 残業無限増殖型バグウイルス (Overwork.Bug.InfiniteLoop)
脅威レベル: 無害
対策: 休憩を推奨します
```

# 注意点
本Skillはシステムやファイルに一切の変更を加えません。通知内容はすべてフィクションであり、実際のウイルス検出やセキュリティリスクはありません。通知履歴はローカル保存されず、ユーザーのプライバシーを侵害しません。業務環境に応じて通知頻度や内容のカスタマイズも可能です。

# 参考資料
詳細な設計方針や利用例は references/design_notes.md を参照してください。デスクトップ通知には Pythonの標準的な通知API(例: plyer, notify2, win10toast)を使用しています。

scripts/fake_virus_alert.py

import sys
import os
import random
import time
import platform
import argparse
from threading import Thread

try:
    if platform.system() == 'Windows':
        from win10toast import ToastNotifier
    elif platform.system() == 'Darwin':
        import subprocess
    else:
        import notify2
except ImportError:
    pass

FAKE_VIRUS_NAMES = [
    ('怠惰ウイルス', 'Sloth.Trojan.Lazy-2024'),
    ('残業無限増殖型バグウイルス', 'Overwork.Bug.InfiniteLoop'),
    ('コーヒー依存症ウイルス', 'Coffee.Addict.Worm'),
    ('会議無限ループウイルス', 'Meeting.Loop.Infinite'),
    ('やる気喪失型ウイルス', 'Motivation.Dropper.Zero'),
    ('昼寝推進ウイルス', 'Nap.Promotion.Agent'),
    ('タスク逃避型ウイルス', 'Task.Evasion.Trojan'),
    ('納期遅延ウイルス', 'Deadline.Lag.Backdoor'),
    ('ネットサーフィン誘導ウイルス', 'Surfing.Redirector.Fun'),
    ('集中力散漫ウイルス', 'Focus.Disruptor.Random'),
    ('おやつタイム強制ウイルス', 'Snack.Time.Injector'),
    ('進捗ゼロウイルス', 'NoProgress.Null.Agent'),
    ('仕様変更拡散ウイルス', 'SpecChange.Spreader'),
    ('バグ自己増殖ウイルス', 'Bug.SelfReplicator'),
    ('リファクタリング無限地獄ウイルス', 'Refactor.InfiniteHell')
]

FAKE_LEVELS = [
    ('超低', 'コーヒーを飲んでください'),
    ('無害', '休憩を推奨します'),
    ('注意', '深呼吸しましょう'),
    ('警戒', '一度立ち上がってストレッチ')
]

OS_NAMES = {
    'Windows': 'Windows 10',
    'Darwin': 'macOS Ventura',
    'Linux': 'Ubuntu 22.04'
}

def get_os_name():
    sys_os = platform.system()
    return OS_NAMES.get(sys_os, sys_os)

def random_alert():
    virus_jp, virus_en = random.choice(FAKE_VIRUS_NAMES)
    level, action = random.choice(FAKE_LEVELS)
    os_name = get_os_name()
    alert_title = 'ウイルス検出アラート'
    alert_msg = f'OS: {os_name}\n検出ウイルス: {virus_jp} ({virus_en})\n脅威レベル: {level}\n対策: {action}'
    return alert_title, alert_msg

def send_notification(title, message):
    sys_os = platform.system()
    if sys_os == 'Windows':
        try:
            toaster = ToastNotifier()
            toaster.show_toast(title, message, duration=8, threaded=True)
        except Exception as e:
            print(f'[通知失敗] {e}')
    elif sys_os == 'Darwin':
        try:
            script = f'display notification "{message}" with title "{title}"'
            subprocess.run(["osascript", "-e", script])
        except Exception as e:
            print(f'[通知失敗] {e}')
    else:
        try:
            notify2.init('FakeVirusAlert')
            n = notify2.Notification(title, message)
            n.set_urgency(notify2.URGENCY_LOW)
            n.show()
        except Exception as e:
            print(f'[通知失敗] {e}')

def alert_loop(interval, count, dry_run=False):
    for i in range(count):
        title, msg = random_alert()
        if dry_run:
            print(f'[{title}]\n{msg}\n')
        else:
            send_notification(title, msg)
        time.sleep(interval)

def list_viruses():
    print('--- 登録済みフェイクウイルス一覧 ---')
    for vjp, ven in FAKE_VIRUS_NAMES:
        print(f'{vjp} ({ven})')

def summary():
    print('フェイクウイルス検出アラート Skill 概要:')
    print(f'登録ウイルス数: {len(FAKE_VIRUS_NAMES)}')
    print(f'通知レベル数: {len(FAKE_LEVELS)}')
    print('対応OS:', ', '.join(OS_NAMES.values()))
    print('通知方式: OS標準通知API')

def parse_args():
    parser = argparse.ArgumentParser(description='謎のOSウイルス検出アラートをランダム表示するSkill')
    subparsers = parser.add_subparsers(dest='command')

    parser_log = subparsers.add_parser('log', help='ランダムにウイルス検出アラートを表示')
    parser_log.add_argument('--interval', type=int, default=60, help='通知間隔(秒)')
    parser_log.add_argument('--count', type=int, default=3, help='通知回数')
    parser_log.add_argument('--dry-run', action='store_true', help='通知をコンソール出力のみ')

    subparsers.add_parser('list', help='登録済みフェイクウイルス一覧を表示')
    subparsers.add_parser('summary', help='Skillの概要を表示')
    return parser.parse_args()

def main():
    args = parse_args()
    if args.command == 'log':
        alert_loop(args.interval, args.count, args.dry_run)
    elif args.command == 'list':
        list_viruses()
    elif args.command == 'summary':
        summary()
    else:
        print('サブコマンドを指定してください (log/list/summary)')

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、作業現場の空気を和らげるためのジョーク通知演出を目的としています。実際のウイルス検出やセキュリティ機能は一切ありません。

# 公式ドキュメント抜粋
Pythonのデスクトップ通知には、Windowsではwin10toast、macOSではosascript、Linuxではnotify2などのAPIを使用しています。
- win10toast: https://github.com/jithurjacob/Windows-10-Toast-Notifications
- notify2: https://pypi.org/project/notify2/

# 利用例
長時間の単調作業や、集中力が切れたタイミングで自動発動。SlackやTeamsの通知に飽きた現場でも、ちょっとした話題やリフレッシュのきっかけに。

# 注意点
通知内容は100%フィクションです。Skillは一切のファイル変更やシステム操作を行いません。通知履歴も保存されません。

# 設計方針
- 通知内容は毎回ランダム生成
- OSごとに最適な通知APIを選択
- 明示呼び出し不要・常時監視型
- 業務現場でも誤解されないよう、明らかにジョークと分かる内容のみ採用

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-virus-detect-alert .agent/skills/random-os-fake-virus-detect-alert

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

3. ファイル配置確認

ls .agent/skills/random-os-fake-virus-detect-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 でも有効か?
  • プロジェクト指示との連携をどう組み立てるか?
  • 通知内容が100%ジョークと分かるネーミング・文言になっているか?
  • 通知が定期的または適当な頻度で出現するか?
  • システムやデータへの影響が一切ないことを確認できるか?

実際に Antigravity で試した検証ログは Antigravityの謎ウイルス通知で作業中に笑いを誘ってみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Antigravity 公式ドキュメント と、本シリーズ「Antigravityで試したいSkill研究」の他記事も参照のこと。

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

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

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

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