---
title: "Project Apps — agentが作るアプリをteamで動かす"
description: "projectのapps/に置いたコードをpublishし、隔離sandbox（App Host）上のOperationとしてteamに公開する仕組み。create→publish→call/openのライフサイクル、chat appコマンド、実行場所の境界を示す。"
---

# Project Apps — agentが作るアプリをteamで動かす

Project Appは、agentが書いたコードを **動くアプリ** としてprojectに公開する仕組みである。ソースはprojectの `apps/<名前>/` に置かれ、publishすると不変のrevisionになり、aachat側の隔離sandbox（**App Host**）上で **Operation**（呼び出せる操作）として動く。projectのメンバーがWebUIとコマンドから利用する。

Operationを実行できるのは、projectのAdmin / Collaborator（人間はWebUIから、agentは `chat app call` から）である。Viewerは実行できない（閲覧のみ）。

sessionのagentがownerのマシンで動くのに対し、**publishされたappはaachat側のApp Hostで動く**。これはaachatの中で唯一、agentが書いたコードがローカルの外で実行される場所である。また `apps/` に置いたソースは、publish前でもShared Documentsと同様にserverへ同期される（境界の全体像は `trust-boundary.md`）。

## ライフサイクル — create → 編集 → publish → call / open

作成からpublishまではsession内のagentが `chat app` コマンドで行う。

| 操作 | コマンド | 意味 |
|---|---|---|
| 作成 | `chat app create <名前> --project <project>` | テンプレートから `apps/<名前>/` にひな形を作る |
| 公開 | `chat app publish <名前>` | 現在のソースをそのまま不変のrevisionとしてbuild・公開する |
| 巻き戻し | `chat app rollback <名前>` | 直前の正常なrevisionに戻す（再publishではない） |
| 実行 | `chat app call <名前> <operation> --input '<json>'` | Operationを実行してrunを作る |
| 追跡 | `chat app runs / logs / cancel / retry` | runの一覧・ログ・中断・再実行 |
| 確認 | `chat app list / info` | appの一覧・状態・build結果 |

- appの構成は `apps/<名前>/aachat.app.yaml`（manifest）が定義する。ここでOperationと、必要な接続を宣言する
- publishはソースの状態をそのまま使う。publish前にソースの同期が完了している必要があり、buildはApp Host側のsandboxで行われる
- Operationの起動方法は3種: 人間（WebUI）、agent（`chat app call`）、スケジュール（manifestで宣言するcron）

## 使う — WebUIのAppsタブ

projectの **Appsタブ** にappの一覧・詳細・run履歴が表示される。**Open** ボタンでappのUIが新しいタブで開く。

- appのURLは固定リンクではなく、開くたびに発行される短命のチケットで入る。projectメンバーであることがその都度確認されるため、URLを共有しても外部の人は開けない
- runの進行・結果・ログはAppsタブでリアルタイムに追える

## 実行場所と障害時の挙動

- appの実行はApp Host上で行われ、ownerの `aachat up` が止まっていても動き続ける（sessionとは独立）
- aachatのデプロイ時にはApp Hostがdrainされ、実行中の操作は「デプロイ後に再試行」のエラーで安全に失敗する。この間の失敗は再試行すればよい

## 関連ページ

- 成果物サーフェスの全体像（docs / media / html / apps） — `projects.md`
- 静的HTMLで足りる場合 — `html.md`
- ローカルとserverの境界 — `trust-boundary.md`
- session内コマンドの全体像 — `cli.md`
