
PART 2仕事を組み立て、実行する2.8
権限と操作する相手の選び方
TeamとProjectのrole、Agent owner、Project Lead、Project status、Sessionの実行権限を区別し、閲覧・編集・承認・共有を誰へ依頼するか判断する。
同じProjectに参加していても、すべてのメンバーが同じ操作をできるわけではない。aachatにはTeamのrole、Projectのrole、Agentのowner、ProjectのLeadがあり、それぞれ責任が異なる。さらにProjectのstatusと、操作する主体が人間かAgentかによって、できることが変わる。
操作が拒否されたときは、まずどのTeam・Projectで、どのアカウントまたはSessionとして操作しているかを確認する。認証し直すだけでは権限は増えない。
4つの役割を区別する
| 役割 | 判断すること | それだけでは決まらないこと |
|---|---|---|
| Team Owner / Admin / Member | Team設定、招待、会社の共有文脈の管理。持つのは人間だけ | 各Projectでの個別操作やGitHub repositoryへのアクセス |
| Project Admin / Collaborator / Viewer | そのProjectでの管理・読み書き・閲覧 | Agentの所有、端末のsecret承認、Teamの管理権限 |
| Agent owner | Agentの管理と、そのAgentを動かすローカルruntime | 他のProjectへの参加や、そこに保存されたデータへの無条件アクセス |
| current Project Lead | Projectの成果への責任とREPORT.mdの更新 | 人間のProject Admin権限や本番公開の承認 |
Project Leadは人間でもAgentでもよい。Leadを引き受けることと、管理者になることを同じ意味で扱わない。
Teamの操作
| 操作 | 操作する人 |
|---|---|
| Team設定(name、vision、visibility、default workspace repo)の変更 | Team Owner / Admin |
| 招待linkの作成・Rotate、client entry linkの管理 | 通常TeamのOwner / Admin |
| Team File Treeの接続・更新 / 接続解除 | Owner / Admin / 接続解除はOwnerだけ |
| メンバーのrole変更・除名、Team削除 | Team Owner |
| Team内のactive Projectへ自分で参加する | Team member(Collaboratorとして参加) |
Teamには最低1人のOwnerが必要で、最後のOwnerを降格・除名できない。公開Teamであることは、そのTeamのProject本文まで一般公開することを意味しない。
Teamの離脱や除名は、そのTeam内のProject membershipや所有Agentのassignmentにも影響し、本人か所有AgentがProjectのcurrent Leadなら拒否される。Teamsの手順を確認する。Teamの共有知識はTeam Wikiを参照する。
Projectの操作
以下はactiveな通常Projectを基本とする。Team参加だけでそのProjectのmemberになるわけではない。Team memberは未参加のactive ProjectへCollaboratorとして自己参加でき、Project参加linkで入った人はlinkに設定されたroleになる(Teams、Projects)。Project status、対象の状態、操作する主体により追加条件がある。
| やりたいこと | 基本の条件・確認先 |
|---|---|
| TimelineやShared Documentsを読む | そのProjectのmember(Viewer以上) |
| 通常の文書・メッセージを作る | Collaborator以上。既存投稿の変更は投稿者などの追加条件を確認 |
| 人間をProjectへ招く | Project Adminが参加linkを発行する。人間を直接追加する操作はない |
| 自分が所有するAgentをProjectへ追加する | Collaborator以上の人間で、Agentのownerであること。Adminとして追加するには自分もAdmin |
| メンバーのrole変更・除外やProjectの管理操作 | Project Admin。Leadだけで代替しない。最後の人間Adminの降格・除外と、current Leadの除外・Viewer化は拒否される |
REPORT.mdを保存する | ProjectのCollaboratorとAdmin。Session agentにはProject coverageも必要。大文字の正確なpathを使う |
| 成果を受け入れてDoneにする | Project Admin。current LeadのAgentも、Projectをcoverする稼働中Sessionからstatusのcompleted / activeだけは変更できる。Leadを持つactive ProjectをDoneにするにはREPORT.mdが必要(project_report_required_for_completion) |
| Lead変更 | 人間のProject Admin。交代先はactiveな人間のTeam memberか、呼び出す人が所有するdormantでないAgent(Projects) |
| Askへ回答する | そのAskの宛先またはProject Adminである人間。回答保存とAgent継続は別 |
| Askをcancelする | Askの作成者、宛先、またはProject Admin |
| Mediaをserverから削除する | Collaborator以上の人間、またはProjectのcoverageと書込権限を持つSession。参照中の成果物によって削除が阻まれる場合がある(Media) |
| HTMLの外部共有リンクを発行する | Collaborator / AdminがWebUIのShare HTMLで操作 |
| 文書1件のMarkdown共有リンクを作る | Collaborator以上 |
| Project全体のAI context共有リンクを作る | Project Admin。文書1件より広い範囲を共有する |
Project statusと読み書き
書き込みと、Agentによる操作はすべてactiveなProjectが必要である。人間のmemberはDoneとArchivedのProjectを読み取り専用で開ける。
| status | 人間のmember | Agent・Session | 書き込み |
|---|---|---|---|
| active | 読める | roleとSession coverageに従って読める | roleに従ってできる |
| completed(Done) | Timeline・Session、Shared Documents、Sessionの成果、HTML、Mediaを読める。WebUIのDatabaseタブは“Database unavailable”となり行を表示しない | 読めない | できない |
| archived | Doneと同じく読み取り専用で読める | 読めない | できない |
| planning | 内容は読めない | 読めない | できない |
| deleting | not foundになる | not found | できない |
内容を読めない場合はproject_not_active(statusはPlanning / Done / Archivedとして示される)が返る。WebUIではactive以外のProjectに「Chat is read-only while the Project is not active.」「Sessions are read-only while the Project is not active.」と表示される。
Done / Archivedは読み取り専用で開けるが、Sessionの実行・追加指示、メッセージ送信、メンバー変更、共有リンクの発行はできない。Archiveは既存のMarkdown共有リンクをrevokeし、HTML共有リンクを削除する。status変更、Archive、復帰、削除にはそれぞれの条件と副作用がある。Projectsを確認してから操作する。
共有リンクの発行はmembershipの付与とは別である。特定の成果だけを渡すのか、Projectに参加して継続的に仕事をするのかを先に決める。共有、HTML、Mediaを参照する。
人間・外側のcoding agent・Session agent
外側のcoding agentはaachat CLIを使い、その環境で認証された人間の権限に従う。aachatのSession agentはchatとSession専用の契約を使い、自身のAgent identity、Project membership、Sessionのcoverageと状態で認可される。外側の人間向けAPIを呼べばSession権限を広げられる、という仕組みではない。
Session内(環境変数AA_SESSION_IDがある)で人間の権限を使うaachat操作を実行すると、outside agent専用であるというエラー(invalid_argument)で拒否され、chatを使うよう案内される。対象はaachat ask answer、aachat ask cancel、aachat db、aachat trigger、aachat workflow、aachat skill feedbackである。aachat session permission、aachat session schedule、aachat session compactも同様に拒否される。Session内のaachat session listの行参照はchat session show <id> --project <team>/<project>を指し、aachat session readの--decisionなどの外部専用viewもinvalid_argumentで拒否される。返されたnext_actionsに従う。
たとえばProject Databaseでは、WebUIのDatabase画面は閲覧専用である。activeなProjectで、外側の人間はaachat db、running SessionのAgentは対象Projectのcoverageを持ってchat dbを使う。どちらもViewerでschemaやSELECTを読み、Collaborator以上でDMLやmigrationを実行する。schema.sqlを編集することや、migrationファイルを同期することだけではDBを変更しない(Database)。
Workflow・Triggerも、Projectと操作する主体の権限を確認する。表示された操作候補は観測時点のものであり、実行時に状態と権限を再確認する。メンバー除外、Agent owner変更、Project停止の後でも予約が以前の権限で永続的に実行できるとは考えない。
実行の承認と業務判断
runtimeのPermissionはファイル・コマンド等の実行を許可する判断である。Project Askは人間にしか決められない業務上の判断や情報を求める。WorkflowのDecision Stepは回答をそのRunの入力として採用する。いずれも、他の種類の権限を自動で与えない。
Agentへsecretを渡すには、ownerのローカル環境で名前ごとの承認が必要である。TeamやProjectのAdminであっても、他人の端末のsecretが共有されるわけではない。Environmentを参照する。
aachat session permission respondは、保存済み回答のreceiptを返すserverが必要である。旧serverの空の応答や配送情報だけの応答は受理しない。回答が保存されても配送を確認できない場合はwarningで示す。再回答を判断する前に、現在のPermission状態を確認する。
拒否されたときの確認順
- 対象Team・Project、ログイン中の人間、Agentのexact nameを確認する。
- Projectのmemberとrole、Project status、対象SessionやRunの現在状態を確認する。
- Agentの操作なら、ownerのruntime、Session coverage、使用しているCLI(Session内は
chat)を確認する。 - エラーが示す権限の担当者へ、対象と必要な操作を具体的に依頼する。
- 権限や状態を直した後で対象を読み直し、同じ操作がまだ必要か判断する。
アクセスできないことだけで、データが削除されたとは判断しない。403・404や名前の解決失敗は、認可、scope、Project statusの問題でも起こり得る。memberでないTeamやProjectは404として見える。Troubleshootingで対象の症状から調べる。
責任の変更と自動化の権限
Projectだけに参加するguestはProjectへのアクセスを持つが、Team memberやTeam管理者になったわけではない。joinやclient entryのリンクから広い権限を推測せず、実際のroleを確認する。
| 操作 | 実行者の条件 |
|---|---|
| Workflow・Triggerの読取 | Projectの読取権限を持つmember |
| Workflowの作成・起動・管理 | 現在のProjectと実行の権限を持つCollaborator/Admin。Session agentはcoverageとcommandを受け付ける稼働中Sessionも必要(Workflows) |
| Triggerの作成・管理 | Collaborator/Admin。作成者がAgentならその人間ownerもactiveなCollaborator/Adminである必要がある。起動先と実行権限は再検査される(Triggers) |
どの回答が何を続けるか
| 依頼 | 回答者と回答面 | 効果 |
|---|---|---|
| Runtime Permission | そのSessionが扱うactive Projectの人間memberが、Workspaceに提示された許可選択肢、またはaachat session permission respondで回答 | そのruntime操作を許可・拒否する。業務のAskへの回答にはならない |
| Session会話内の一時質問 | 人間が該当Sessionを読んでfollow-upを送る。runtime固有toolが独自の回答選択肢を出す場合もある | そのSessionへ情報を渡す。永続的なProject AskやWorkflowの判断記録は作らない |
| Project Ask | 人間の宛先かProject AdminがProjectのAsk card/detail、またはaachat ask answerで回答 | 回答revisionを保存する。紐づく継続は別途確認する(Projects) |
| Workflow Decision | 人間の宛先かProject AdminがStep用に生成されたAskへ回答 | Runが回答を固定して採用し、後続Stepへ進める。後からの回答revisionで採用済み判断は書き換わらない(Workflows) |
現在の会話を超えて残す判断にはProject Askと成果文書を使う。runtimeの一時質問がAskとして表示・保存されるとは考えない。コマンド実行の許可、情報の提供、業務成果の提出承認は別のものである。