Antigravityで作業画面を瞬時に隠すスキルの使いこなしガイド

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

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

AI coding workflow を日常的に使っていると、開発に集中している時ほど「今この画面だけは他人に見られたくない」という瞬間が意外と多いものです。とくに Antigravity のようなリポジトリ理解・context管理に優れたAIツールを使っていると、画面上に表示される情報が多岐にわたり、時にはプライベートなメモや中間生成物も混在しがちです。そんな時、突然上司や親が背後に現れると、慌ててウィンドウを閉じるのも一苦労です。

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

さらに、画面を一発で安全な状態に切り替える仕組みがないと、思わぬ情報漏洩や作業中断につながることも。通知・演出・OS連携の観点からも、開発現場での「見られたくない瞬間」の対策は意外と切実な課題です。

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

一言サマリ: 作業中に上司や親が近づいてきたときSkill。

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

  • AI coding workflow の最中でも、コマンド一発でエディタやターミナル画面を即座に隠し、見られても問題ないウィンドウ(天気予報やエクセル風画面)に切り替えられる
  • Antigravity の長い context 履歴や repository のメモ、onboarding情報など、秘匿したい情報を瞬時にカバーできる
  • monorepo や複雑な directory 構造の作業時でも、必要な時だけ安全な画面を演出し、作業再開もスムーズ
  • 「今ここで見られたくない!」というリアルな開発現場の悩みを、Skill の即時発動で回避できる
  • 無難な進捗バーやダミーデータ表示など、演出を選んで自然に偽装できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/antigravity/boss-key-instant-hide .agent/skills/boss-key-instant-hide

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

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

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


> ちょっと今、画面を隠したい

[Antigravity] boss-key-instant-hide Skill 発動
現在のエディタ・ターミナル画面を即座に非表示
ダミーウィンドウ「天気予報」表示中 (location: Tokyo)
進捗バー: [███████-----] 65% 完了
再表示コマンド: ctrl+shift+Z
安全な状態に切り替えました

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


> 上司が来たので画面を見せられない!

[Antigravity] boss-key-instant-hide Skill 作動
packages/api, packages/frontend, scripts/ の作業画面を一時非表示
エクセル風ダミーウィンドウを表示
進捗バー: [█████-------] 40% 計算中
必要な時は「作業再開」と入力してください

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


> 進捗バー付きで隠して!

[Antigravity] boss-key-instant-hide Skill 発動
全ウィンドウを即座に隠蔽
「AI コードレビュー中」ダミー画面を表示
進捗バー: [█████████--] 90% 完了
タイマー: 00:00:12 経過
「復帰」コマンドで元の画面に戻ります

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Antigravity が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 重要な情報だけを維持しつつ、不要な画面を即座に隠せる

発動方式

description マッチでの暗黙発動。

Skill の中身を全部見せる

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

.agent/skills/boss-key-instant-hide/
├── SKILL.md
├── scripts/
│   └── boss_key_instant_hide.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Antigravity がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/boss_key_instant_hide.py boss-key-instant-hide: 一発で画面を隠し偽装ウィンドウを表示
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: boss-key-instant-hide
description: 作業中に“上司が来た”“親が部屋に入ってきた”などの状況で、Antigravityが『画面を即座に隠す』『無難なウィンドウに切り替える』などのキーワードを検知した際に発動します。
---

# 機能概要
boss-key-instant-hideは、作業中に見られたくない画面(エディタやターミナル等)を、コマンド一発で即座に非表示にし、天気予報やエクセル風の無難なウィンドウへ切り替えるスキルです。上司や親が近づいてきた際に「今ここで見られたくない!」という状況を回避できます。さらに、偽の進捗バーやダミーデータ表示など、演出も選択可能です。データ損失や実害なく、安心して使える設計です。

# 使い方
このSkillは明示的な呼び出しは不要です。以下のようなキーワードが会話やコマンドに現れた際、Antigravityが自動で発動します。
- 「上司が来た」「親が来た」「画面を隠したい」
- 「ボスキー」「一発で画面を切り替え」
- 「進捗バーを偽装」「天気予報を表示」

# 出力例
```
[INFO] 全エディタウィンドウを最小化しました。
[INFO] Excel風ウィンドウを前面に表示しました。
[INFO] ダミー進捗バー: [███████-----] 70%
[INFO] 5秒後に元の状態に戻せます。
```

# 注意点
- 本Skillはローカル環境のウィンドウ制御API(pygetwindow, pyautogui, tkinter等)を利用します。
- 実際のデータや作業内容は保存されません。必要に応じて事前保存を推奨。
- サポートOSはWindows/Mac/Linuxですが、ウィンドウ制御の挙動はOS依存です。
- 仮想環境やリモートデスクトップでは一部機能が制限される場合があります。

# 参考資料
詳細な設計方針や制限事項は references/design_notes.md を参照してください。主要なAPIの公式ドキュメントは pygetwindow, pyautogui, tkinter の各サイトを参照。

scripts/boss_key_instant_hide.py

import sys
import time
import argparse
import threading
import platform
import subprocess
from typing import List

try:
    import pygetwindow as gw
    import pyautogui
except ImportError:
    print('[ERROR] 必要なライブラリ(pygetwindow, pyautogui)が見つかりません。\n pip install pygetwindow pyautogui')
    sys.exit(1)
try:
    import tkinter as tk
except ImportError:
    print('[ERROR] tkinterが見つかりません。標準Pythonに含まれていますが、OSによっては別途インストールが必要です。')
    sys.exit(1)

HIDE_DURATION = 5  # 秒数
DUMMY_WINDOW_TITLE = '天気予報 - 気象庁'
EXCEL_WINDOW_TITLE = 'Excel - 進捗管理表'

class BossKeyManager:
    def __init__(self):
        self.hidden_windows = []
        self.dummy_window = None
        self.os_name = platform.system()

    def list_target_windows(self) -> List:
        # エディタやターミナルらしきウィンドウを検出
        candidates = []
        for w in gw.getAllWindows():
            title = w.title.lower()
            if any(x in title for x in ['code', 'vim', 'sublime', 'notepad', 'terminal', 'cmd', 'powershell', 'pycharm', 'jupyter', 'atom', 'emacs']):
                candidates.append(w)
        return candidates

    def hide_windows(self, windows: List):
        for w in windows:
            try:
                w.minimize()
                self.hidden_windows.append(w)
            except Exception as e:
                print(f'[WARN] {w.title} の最小化に失敗: {e}')

    def restore_windows(self):
        for w in self.hidden_windows:
            try:
                w.restore()
            except Exception:
                pass
        self.hidden_windows = []

    def show_dummy_window(self, mode='weather'):
        root = tk.Tk()
        root.title(DUMMY_WINDOW_TITLE if mode=='weather' else EXCEL_WINDOW_TITLE)
        root.geometry('600x300+200+200')
        if mode == 'weather':
            label = tk.Label(root, text='東京 24℃ 晴れ\n明日: 22-28℃', font=('Arial', 32))
            label.pack(expand=True)
        elif mode == 'excel':
            import random
            import tkinter.ttk as ttk
            tree = ttk.Treeview(root, columns=('A','B','C'), show='headings')
            for i, col in enumerate(['タスク', '担当', '進捗']):
                tree.heading(i, text=col)
                tree.column(i, width=180)
            for i in range(5):
                tree.insert('', 'end', values=(f'タスク{i+1}', f'担当{i+1}', f'{random.randint(50,100)}%'))
            tree.pack(expand=True, fill='both')
        elif mode == 'progress':
            progress = tk.DoubleVar()
            pb = tk.ttk.Progressbar(root, length=400, variable=progress, maximum=100)
            pb.pack(pady=60)
            label = tk.Label(root, text='進捗バー: 70%', font=('Arial', 20))
            label.pack()
            progress.set(70)
        self.dummy_window = root
        # 別スレッドでmainloop
        threading.Thread(target=root.mainloop, daemon=True).start()

    def close_dummy_window(self):
        if self.dummy_window:
            try:
                self.dummy_window.destroy()
            except Exception:
                pass
            self.dummy_window = None

    def boss_key(self, mode='weather', duration=HIDE_DURATION):
        print('[INFO] エディタ/ターミナルウィンドウを検出中...')
        targets = self.list_target_windows()
        if not targets:
            print('[INFO] 隠すべきウィンドウが見つかりません。')
        else:
            print(f'[INFO] {len(targets)}個のウィンドウを最小化します。')
            self.hide_windows(targets)
        print(f'[INFO] {"天気予報" if mode=="weather" else "Excel風"}ウィンドウを前面に表示します。')
        self.show_dummy_window(mode=mode)
        if mode == 'progress':
            print('[INFO] ダミー進捗バー: [███████-----] 70%')
        print(f'[INFO] {duration}秒後に元の状態に戻せます。')
        time.sleep(duration)
        self.close_dummy_window()
        self.restore_windows()
        print('[INFO] 元のウィンドウ状態に復帰しました。')

    def list_windows(self):
        print('現在のウィンドウ一覧:')
        for w in gw.getAllWindows():
            print(f'- {w.title}')

    def summary(self):
        print('boss-key-instant-hide の概要:')
        print('・検出対象: エディタ/ターミナル/開発ツール')
        print('・偽装画面: 天気予報/Excel/進捗バー')
        print('・サポートOS:', self.os_name)


def main():
    parser = argparse.ArgumentParser(description='boss-key-instant-hide: 一発で画面を隠し偽装ウィンドウを表示')
    subparsers = parser.add_subparsers(dest='command')

    parser_boss = subparsers.add_parser('hide', help='画面を隠して偽装ウィンドウを表示')
    parser_boss.add_argument('--mode', choices=['weather','excel','progress'], default='weather', help='偽装画面の種類')
    parser_boss.add_argument('--duration', type=int, default=HIDE_DURATION, help='偽装画面を表示する秒数')

    parser_list = subparsers.add_parser('list', help='現在のウィンドウ一覧を表示')
    parser_summary = subparsers.add_parser('summary', help='本Skillの概要を表示')

    args = parser.parse_args()
    manager = BossKeyManager()
    if args.command == 'hide':
        manager.boss_key(mode=args.mode, duration=args.duration)
    elif args.command == 'list':
        manager.list_windows()
    elif args.command == 'summary':
        manager.summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
boss-key-instant-hideは、作業中の開発ツールやエディタ画面を即座に隠し、無難なウィンドウ(天気予報やExcel風)を表示することで、見られたくない状況を回避するユーティリティです。

# 公式ドキュメント抜粋
- pygetwindow: https://github.com/asweigart/pygetwindow
- pyautogui: https://pyautogui.readthedocs.io/
- tkinter: https://docs.python.org/ja/3/library/tkinter.html

# 利用例
- オフィスで急に上司が来たとき、ターミナルやコード画面を一発で隠す
- 家庭で親が部屋に入ってきた際、ゲームやSNS画面を隠し、進捗バーや天気予報を偽装

# 注意点
- ウィンドウ最小化や前面表示はOS依存。全ての環境で完全な動作を保証しない
- データ保存は行わないため、作業内容は事前に保存推奨
- 仮想環境やリモートデスクトップでは一部制限あり

# 設計方針
- 主要なウィンドウ制御APIのみを利用し、OS標準の安全な方法で画面制御
- 偽装画面はtkinterで軽量に実装し、演出を複数選択可能に
- 実害・データ損失を防ぐため、復帰処理を必ず実施

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/antigravity/boss-key-instant-hide .agent/skills/boss-key-instant-hide

.agent/skills/boss-key-instant-hide の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agent/skills/boss-key-instant-hide
# 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記事を探す

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

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

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