Antigravityで毎日の開発を楽しくする謎のOS星占い通知活用ガイド

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

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

AI coding workflow を Antigravity で回していると、日々の作業の中で「ちょっとした違和感」や「気が抜ける瞬間」に出会うことは少なくありません。特に repository understanding や path management に集中していると、どうしても単調な作業や同じ説明の繰り返しが増えがちです。context の切り替えや directory の移動が頻繁なプロジェクトでは、AI とのやり取りもどこか機械的になりがちです。

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

こうした「繰り返し」や「淡々としたやり取り」が積み重なると、AI との対話にちょっとした遊びやリフレッシュ要素が欲しくなる瞬間もあるはず。特に通知や演出の類がほとんどない Antigravity では、日々の開発開始時にちょっとした刺激が欲しいと感じることもあるでしょう。

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

一言サマリ: このスキルは、Antigravity の開発 workflow に“謎のOS星占い通知”という遊び心を加え、毎日の作業開始をちょっとだけ楽しくする Skill。

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

  • 毎日の session 開始時や directory 移動時、完全ランダムな「OS風・開発者向け星占い通知」が自動で現れ、作業の導入をリフレッシュできる
  • 通知内容が repository や context に絡めたジョークやアドバイスになっており、AI coding workflow の単調さを和らげる
  • ターミナル・OS通知の両方に対応し、どの環境でも気軽に「今日の運勢」を楽しめる
  • onboarding や長時間作業の切れ目で、ちょっとした話題やアイスブレイクとして活用できる
  • Skill の発動は description マッチで自動、特別な設定なしで導入直後から効果が現れる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-horoscope-notifier .agent/skills/random-os-fake-horoscope-notifier

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

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

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


# 開発を始めるとき、最初の指示を入力

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

───────────── OS星占い通知 ─────────────
今日のラッキーコマンドは: ls
運勢: バグ回避率が15%アップ!
アドバイス: README.mdを3回開くと幸運が訪れるかも
──────────────────────────────
(この通知は1日1回だけ表示されます)

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


> packages/api/ から packages/web/ に移動して作業を続ける

───────────── OS星占い通知 ─────────────
本日のディレクトリ運勢: packages/web/
注意: 仕様変更星が逆行中、package.jsonのdiffにご用心
ラッキーアイテム: .env.sample
──────────────────────────────
(この通知は1日1回だけ表示されます)

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


> 今日の運勢を知りたい

───────────── OS星占い通知 ─────────────
あなたの開発星座は「TypeScript座」
運勢: PRレビューがスムーズに進む予感
本日のアンラッキーファイル: node_modules/
──────────────────────────────
(この通知は1日1回だけ表示されます)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開 + ちょっとした星占い通知が表示される
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る + 今日の運勢でリフレッシュ
長時間 workflow long context で重要箇所が薄まる 区切りごとに通知で気分転換、集中力維持に一役

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/random-os-fake-horoscope-notifier/
├── SKILL.md
├── scripts/
│   └── os_fake_horoscope_notifier.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-horoscope-notifier
description: このSkillは、Antigravityが新しい作業セッションやプロジェクトを開始する際、semantic-match-onlyトリガーで自動的に発動します。開始・再開・初回コマンドなどのキーワード検出時に、1日1回だけ“OS星占い”風の通知を表示します。
---

# 機能概要
random-os-fake-horoscope-notifierは、開発作業を始めるタイミングで“謎のOS星占い”通知を自動表示するSkillです。内容は完全ランダムで「今日のラッキーコマンドはls」「運勢:バグ回避率上昇」「注意:仕様変更星が逆行中」など、根拠のない占い風アドバイスを提供します。作業開始時の緊張やマンネリを和らげ、ユーモアある開発スタートを演出します。通知は1日1回のみ表示されるため、頻繁な邪魔にはなりません。

# 使い方
このSkillは明示的な呼び出しは不要です。Antigravityが「start」「begin」「open project」「code」「新規作業」などの作業開始キーワードを検出した際、自動的に発動します。ターミナル・デスクトップ通知の両方に対応しており、どちらの環境でも分かりやすく表示されます。

# 出力例
```
[OS Horoscope] 今日の運勢: コードレビュー運が最高潮!
ラッキーコマンド: git diff
注意: 仕様変更星が逆行中。設計書の再確認を忘れずに。
---
[OS Horoscope] 幸運の兆し: バグ回避率が20%上昇中。
ラッキーエディタ: vim
アドバイス: コミット前に深呼吸。
```

# 注意点
- 1日1回のみ通知されます(~/.os_horoscope_notifiedで管理)
- 通知内容は完全にランダムで、実際の運勢や作業内容とは無関係です
- ローカル環境の通知API(notify-send, osascript, Windows toast)を利用します
- 通知が失敗した場合はターミナル出力のみ行われます
- 設定や履歴保存はありません

# 参考資料
詳細設計や参考APIは references/design_notes.md を参照してください。主要な通知APIの公式ドキュメントも記載しています。

scripts/os_fake_horoscope_notifier.py

import os
import sys
import random
import platform
import subprocess
import datetime
from pathlib import Path

HOROSCOPE_MESSAGES = [
    {
        "fortune": "コードレビュー運が最高潮!",
        "lucky": "git diff",
        "advice": "設計書の再確認を忘れずに。"
    },
    {
        "fortune": "バグ回避率が20%上昇中。",
        "lucky": "vim",
        "advice": "コミット前に深呼吸。"
    },
    {
        "fortune": "仕様変更星が逆行中。",
        "lucky": "ls",
        "advice": "READMEをよく読もう。"
    },
    {
        "fortune": "新機能実装運が上昇!",
        "lucky": "touch",
        "advice": "小まめな保存を忘れずに。"
    },
    {
        "fortune": "デバッグ運が好調。",
        "lucky": "pdb",
        "advice": "エラー文をよく観察しよう。"
    },
    {
        "fortune": "レビュー依頼のタイミング良し。",
        "lucky": "pull request",
        "advice": "感謝を伝えると吉。"
    },
    {
        "fortune": "CI/CD運が安定中。",
        "lucky": "docker-compose",
        "advice": "キャッシュクリアを忘れずに。"
    },
    {
        "fortune": "仕様質問運が上昇傾向。",
        "lucky": "slack",
        "advice": "疑問は早めに相談。"
    }
]

NOTIFY_HISTORY_PATH = str(Path.home() / ".os_horoscope_notified")


def already_notified_today():
    try:
        if not os.path.exists(NOTIFY_HISTORY_PATH):
            return False
        with open(NOTIFY_HISTORY_PATH, "r") as f:
            last_date = f.read().strip()
        today = datetime.date.today().isoformat()
        return last_date == today
    except Exception:
        return False

def mark_notified():
    try:
        with open(NOTIFY_HISTORY_PATH, "w") as f:
            today = datetime.date.today().isoformat()
            f.write(today)
    except Exception:
        pass

def generate_horoscope():
    msg = random.choice(HOROSCOPE_MESSAGES)
    lines = [
        f"[OS Horoscope] 今日の運勢: {msg['fortune']}",
        f"ラッキーコマンド: {msg['lucky']}",
        f"アドバイス: {msg['advice']}"
    ]
    return "\n".join(lines)

def send_desktop_notification(title, message):
    system = platform.system()
    try:
        if system == "Linux":
            subprocess.run([
                "notify-send", title, message
            ], check=True)
            return True
        elif system == "Darwin":
            script = f'display notification "{message}" with title "{title}"'
            subprocess.run([
                "osascript", "-e", script
            ], check=True)
            return True
        elif system == "Windows":
            try:
                from win10toast import ToastNotifier
                toaster = ToastNotifier()
                toaster.show_toast(title, message, duration=6)
                return True
            except ImportError:
                # Fallback to terminal output
                return False
        else:
            return False
    except Exception:
        return False

def print_terminal_notification(message):
    print("\n" + message + "\n")

def main():
    import argparse
    parser = argparse.ArgumentParser(description="OS Fake Horoscope Notifier")
    parser.add_argument("--force", action="store_true", help="強制的に通知を表示する(1日1回制限を無視)")
    args = parser.parse_args()

    if not args.force and already_notified_today():
        return
    msg = generate_horoscope()
    title = "OS Horoscope"
    notified = send_desktop_notification(title, msg)
    if not notified:
        print_terminal_notification(msg)
    mark_notified()

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
このSkillは、開発作業開始時に日替わりの“OS星占い”通知を表示し、作業の緊張を和らげることを目的としています。通知は完全ランダム生成で、実際の作業内容とは無関係です。

# 公式ドキュメント抜粋
- Linux: notify-send (libnotify)
- macOS: osascript (AppleScript)
- Windows: win10toast (https://github.com/jithurjacob/Windows-10-Toast-Notifications)

# 利用例
Antigravityが「start」「begin」「code」などの作業開始キーワードを検出した際、自動で1日1回だけ通知が表示されます。

# 注意点
- 通知履歴はホームディレクトリの .os_horoscope_notified に保存されます。
- Windowsでwin10toastが未インストールの場合、ターミナル出力のみとなります。
- 内容は完全なジョークであり、実用性や根拠はありません。

# 設計方針
OSごとに標準的な通知APIを利用し、失敗時は必ずターミナルに出力される設計です。履歴は日付のみ保存し、個人情報や詳細なログは一切保持しません。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/random-os-fake-horoscope-notifier .agent/skills/random-os-fake-horoscope-notifier

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

3. ファイル配置確認

ls .agent/skills/random-os-fake-horoscope-notifier
# 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
  • 通知が1日1回制限: 手動で何度も呼び出したい場合には不向き
  • 通知内容のネタ切れ: 長期運用でメッセージがマンネリ化する可能性

試す前に確かめたいこと

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

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • プロジェクト指示との連携をどう組み立てるか?
  • 通知が本当に「1日1回だけ」かつ「毎回ランダム」で現れるか?
  • ターミナル・OS通知どちらでも確実に表示されるか?

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

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

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

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

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