テーマ切替
OpenTofu Output とランタイム Interface
Takos のアプリ repository は、ふつうの OpenTofu/Terraform module のままです。Takosumi はその module を Capsule として実行し、成功した Run と StateVersion、通常の root Output を記録します。ランタイムの実体と認可は Takosumi の service-side な Interface / InterfaceBinding レコードが所有します。app-owned launcher などの 宣言案は repository manifest v2 から compile できますが、manifest は実行権限ではありません。
通常の OpenTofu Output
アプリは、そのオペレーターや明示的に設定された利用者にとって役立つ、デプロイの事実を返せます。名前と値の形は module 側が決めます。
hcl
output "mcp_url" {
description = "Public Streamable HTTP endpoint for this deployment"
value = "${cloudflare_worker_deployment.app.url}/mcp"
}
output "launch_url" {
value = cloudflare_worker_deployment.app.url
}Takosumi は tofu output -json を通じてこれらの値を取得します。通常の OpenTofu の sensitive metadata はそのまま 保たれ、どの Output 名もランタイムの登録簿として特別扱いしません。sensitive な Output はふつうの OpenTofu として 有効ですが、公開の Interface input としては解決できません。
InstallConfig.outputAllowlist は、通常の root Output のうち UI、install summary、外部表示に公開する名前と型を service-side で明示します。これは Interface の宣言ではなく、Output 名から Interface や lifecycle action を推測する 仕組みでもありません。
Takosumi で Interface を宣言する
Workspace オーナー、オペレーター、または install flow が、Takosumi の service-side 設定に Interface を作成します。 app-owned launcher のような plain Capsule の宣言案は、repository の v2 interfaces[] から exact snapshot と module compatibility をレビューしたうえで InstallConfig.interfaceBlueprints に compile されます。最初の 成功した apply 後に blueprint を一度 materialize し、明示的な capsule_output input にその Capsule id を入れます。 launch_url のような Output は宣言された Interface input の値にすぎず、Output 名から Interface を推測する fallback はありません。/v1/interfaces の service-side API から同じ record を明示的に作ることもできます。 宣言には、その利用者が理解できる任意の protocol type / version を使えます。document は任意の non-secret な JSON で、動的な値は明示的な input で接続します。
Form-backed Resource では、verified な Takoform Form Definition の interfaces[] descriptor が portable な宣言を 所有できます。descriptor は open な name / version、non-secret document schema、literal / Form output からの deterministic input mapping だけを持ちます。Takosumi は Ready な Resource から普通の host-owned Interface を materialize しますが、InterfaceBinding、token、認可、record lifecycle は Form や provider へ移しません。plain Capsule に Form は必須ではなく、Takosumi 専用 provider resource を authoring path として要求しません。
InstallConfig.lifecycleActions は同じく service-side の設定ですが、provider gap や application initialization のための Plan-pinned action であり、Interface や Output から生成しません。
json
{
"workspaceId": "ws_1",
"name": "researchTools",
"ownerRef": { "kind": "Capsule", "id": "cap_1" },
"spec": {
"type": "mcp.server",
"version": "2025-11-25",
"document": {
"transport": "streamable-http",
"display": { "title": "Research tools" }
},
"inputs": {
"endpoint": {
"source": "capsule_output",
"capsuleId": "cap_1",
"outputName": "mcp_url"
}
},
"access": {
"visibility": "workspace",
"resourceUriInput": "endpoint"
}
}
}input に使える source は次のとおりです。
literal: Interface と一緒に保存された公開設定capsule_output: Capsule のふつうの root Output を名前で参照するresource_output: Resource が公開した観測済みの値を名前で参照する
Output を参照する input には、RFC 6901 の JSON Pointer も指定できます。Takosumi は input を status.resolvedInputs に解決し、その来歴を記録し、実効値が変わるたびに解決済みリビジョンを進めます。module を 書き換えたり、固定の Output 名を要求したりはしません。
利用者を認可する
発見 (discovery) と認可 (authority) は別です。InterfaceBinding が、その Interface を利用できる主体・権限・ 配送方式を名指しで決めます。
json
{
"subjectRef": { "kind": "Principal", "id": "account_1" },
"permissions": ["mcp.invoke"],
"delivery": { "type": "none" }
}Takos が現在利用するのは、対応する Principal binding が Ready で、同じ Interface revision を観測しており、 mcp.invoke を許可し、認証情報なしの配送 (none) か、同梱の Principal oauth2 フローのどちらかを使っている、 解決済みの mcp.server Interface だけです。OAuth を使うには、認証情報を含まない HTTPS の resource URI、 Accounts が支える短命な issuer、Interface のオーナーがそのホスト名を管理していることを示す新しい host proof が 必要です。Workload-token や Secret を使った配送は、host 側が対応する実装を提供するまで使えません。未対応の配送 方式は安全側に停止します。
認証情報の値は、Output、Interface document、解決済み input、Binding record のどこにも入りません。 ProviderConnection / CredentialRecipe / ProviderBinding は OpenTofu の Run を認可するためのもので、ランタイム Interface の認可には転用しません。
ソース検出
Takos は、次のふつうの module path から順に、install できる OpenTofu source を認識します。
main.tfoutputs.tftakos.tfopentofu/main.tfopentofu/outputs.tfinfra/main.tfinfra/outputs.tfdeploy/opentofu/cloudflare/main.tfdeploy/opentofu/cloudflare/outputs.tf
source の検出は module を特定するだけです。HCL の内容や、よく使われる Output 名からランタイムのサービスを推測 したりはしません。
境界
- OpenTofu が持つのは、リソース、state、変数、root Output です。
- Takosumi が持つのは、Capsule の実行、永続的な Output の取得、Interface の input 解決、InterfaceBinding の認可、 ポリシー、監査です。
- Takos が使うのは、自分が実装している Interface の type / version だけで、launcher、MCP、file-handler、agent の ユーザー体験を持ちます。
- 明示的な Capsule Dependency や
terraform_remote_stateは OpenTofu 同士の input 配線のためのもので、ランタイム の認可ではありません。