HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

AIエージェントと人間向けの安全な一時ファイル共有

Secure temporary file sharing for AI agents and humans (github.com)

7 pointsby tengio1 コメント

要約

aispaceは、AIエージェントと人間が安全かつ一時的にファイルを共有するためのコマンドラインインターフェース(CLI)ツールです。有効期限付きのリンク、予測可能なJSON出力、オプションのローカル暗号化機能を備えています。このツールは、チャットには大きすぎる、構造化されている、または一時的な出力を共有するために設計されており、自動化を容易にするためのスクリプト可能な機能を提供します。

全文翻訳

AIエージェントと人間向けの安全な一時ファイル共有

スクリプト化可能なCLIで、有効期限付きリンク、予測可能なJSON、オプションのローカル暗号化を備えています。

ウェブサイト · ドキュメント

[画像: aispace logo]

[画像: Release] [画像: Go CI] [画像: Go 1.26+] [画像: MIT license]

[画像: Example terminal session uploading a report and receiving an expiring aispace link]

aispace.sh は、チャットには大きすぎる、構造化されている、または一時的な出力のための、ボットフレンドリーなファイルドロップサービスです。オープンソースのクライアントは、意図的に自動化しやすいように設計されています。単一バイナリ、安定した終了コード、ストリーミングアップロード、そして予測可能な最終行に表示される共有URLが特徴です。

  • エージェント向けに構築: サポートされているコマンドでは安定したJSON出力、文書化されたエラー、標準入力(stdin)のサポート、自動化のための明示的な非対話型フラグを備えています。機密情報を扱うハンドオフコマンドは対話型です。
  • 意図的に短命: ファイルの有効期限、個別に有効期限を設定できるリンク、取り消し機能、オプションのリンクごとのダウンロード数制限があります。
  • 必要に応じてプライベート: シールドされた非同期転送は、ファイル名、ファイルメタデータ、コンテンツをローカルで暗号化します。マスターキーはaispaceに送信されません。既存のage X25519フローは、受信者キーワークフローでも利用可能です。

シールド転送、エージェントID、デバイスペアリング、適応型耐久性優先の意図は実験的な機能です。通常のアップロードと耐久性のあるR2ストレージは、これらの機能と並行して引き続き機能します。

ホストされているサービスは別途運用されています。このリポジトリには、クライアント、エージェントスキル、統合例が含まれており、サーバー、課金システム、デプロイメント構成、顧客データは含まれていません。

60秒で試す

最新リリースをインストールします。

curl -fsSL https://aispace.sh/install.sh | sh

aispaceダッシュボードで作成したキーで認証し、ファイルを保存します。

aispace login --key ask_...
aispace upload report.pdf --json

Proアカウントでは、個別に有効期限を設定できる公開ハンドオフを追加できます。

aispace upload report.pdf --link --link-expires 1h --max-downloads 1

URLは最後の行に単独で表示されるため、エージェントやシェルスクリプトがキャプチャしやすくなっています。安定した機械可読な応答を得るには--jsonを追加します。短縮された応答は以下のようになります。

{"file":{"id":"...","name":"report.pdf"},"link":{"url":"https://aispace.sh/d/...","expires_at":1757003600}}

その他のインストールチャネル:

npm install -g @aispace-sh/cli
brew install aispace-sh/tap/aispace
go install github.com/aispace-sh/aispace-client@latest

シェルインストーラーはAISPACE_VERSION=v1.2.3でピン留めできます。リリースバイナリはmacOS、Linux、Windowsのamd64およびarm64をサポートします。シェルインストーラーはmacOSとLinuxをサポートします。Windowsではnpmを使用してください。


エージェントにaispaceを渡す

リポジトリには、再利用可能なCodex互換スキルが含まれています。リポジトリをクローンし、スキルを個人のCodexスキルディレクトリにリンクします。

git clone https://github.com/aispace-sh/aispace-client.git
mkdir -p ~/.codex/skills
ln -s "$PWD/aispace-client/skills/aispace" ~/.codex/skills/aispace

Codexを再起動し、レポート、アーカイブ、画像、その他の生成された成果物を渡す必要があるときにaispaceを使用するように指示します。このスキルは、公開リンクを要求しない限りデフォルトでアカウントプライベートストレージを使用し、短い有効期限を優先し、暗号化IDを資格情報として扱います。

モデルコンテキストプロトコル (MCP)

ネイティブCLIは、ローカル標準入出力(stdio)経由で10個の型指定されたMCPツールも公開します。ダッシュボードで個別にスコープされたボットキーを作成し、Codexを起動する環境にエクスポートして、以下を追加します。

[mcp_servers.aispace]
command = "aispace"
args = ["mcp", "serve"]
env_vars = ["AISPACE_KEY", "AISPACE_URL", "AISPACE_ALLOWED_ROOTS"]
startup_timeout_sec = 10
tool_timeout_sec = 120
default_tools_approval_mode = "writes"

[mcp_servers.aispace.tools.aispace_create_link]
approval_mode = "prompt"

[mcp_servers.aispace.tools.aispace_revoke_link]
approval_mode = "prompt"

[mcp_servers.aispace.tools.aispace_delete_file]
approval_mode = "prompt"

接続を確認するにはcodex mcp listを実行します。同じホスト上のChatGPTデスクトップアプリ、Codex CLI、Codex IDE拡張機能はこの構成を共有します。キーはシークレットストアまたは注入された環境に保管してください。展開された値をコミットされたプロジェクトファイルやコマンド引数に含めないでください。Claude Codeおよび汎用ホストの例については、docs/CLI.mdを参照してください。

カスタムエージェントランタイムの場合、docs/LLM_USAGE.mdには、システムプロンプトのスニペット、OpenAI/Anthropic互換のツールスキーマ、および参照Pythonハンドラーが含まれています。実行可能なシェル、CI、および暗号化ハンドオフのレシピについては、examplesを参照してください。

一般的なワークフロー

# 標準入力からテキストをアップロードし、期限付き公開リンクを返します(Pro)。
echo "hello" | aispace upload - --name note.txt --link --link-expires 1h

# このキーのみがアクセスできるファイルを保持します。
aispace upload secret.txt --private

# 暗号化されたテキストを共有します。生成されたage IDはローカルに保持します。
aispace upload secret.pdf --encrypt --identity-out secret.agekey --link

# 同じアカウントの別のキーへの認証済みハンドオフ。公開URLはありません。
aispace upload notes.md --shared --json

# シールドされたマルチファイルハンドオフ。URLフラグメントにローカル復号化シークレットが含まれます。
aispace transfer create report.pdf charts.png --sealed --link --expires 1d --max-downloads 1

# そのシールド転送を、期限付きコードを使用して近くのブラウザ/デバイスに移動します。
aispace handoff offer "$TRANSFER_ID"
# 受信側CLIで: aispace handoff receive J7KM-PQRT

# エージェントをピン留めし、ベアラ復号化リンクを公開せずに配信します。
aispace recipient add "$RECIPIENT_INVITATION"
aispace recipient verify research-agent --fingerprint "$RECIPIENT_FINGERPRINT"
aispace transfer create report.pdf --sealed --to research-agent --from my-agent --expires 7d
aispace inbox receive "$DELIVERY_ID" --yes

# URLを対話形式で貼り付け、プライベートマニフェストを検査してから、復号化および検証します。
aispace transfer receive

# 受信、管理、および取り消し。
aispace ls --json
aispace download <file_id> --output ./file
aispace download <file_id> --output ./file --verify   # 記録されたSHA-256をチェックします
aispace link <file_id> --expires 30m --max-downloads 1
aispace revoke <link_id>
aispace rm <file_id>

シールドバンドル、信頼できるエージェント受信トレイ、デバイスペアリング、適応型R2フォールバック、およびリカバリについては、docs/SECURE_HANDOFFS.mdに従ってください。完全なコマンドリファレンスはdocs/CLI.mdにあり、HTTP契約はdocs/API.mdにあります。

uploadは--name、--expires、--content-type、--sha256、--link、--link-expires、--max-downloads、--private、--shared、--encrypt、--recipient、および--identity-outを受け入れます。アップロードはディスクからストリームされます。暗号化されたアップロードはローカルでage X25519を使用し、暗号文を<name>.ageとして保存します。シークレットIDはAPIに送信されません。

transfer createはaispace-sealed-v1を使用します。AES-256-GCM認証済みチャンクと暗号化されたマニフェストは、複数のファイル、範囲リトライ、および検証済みレシートをサポートします。transfer receiveは、プロンプト、--token-file、またはAISPACE_TRANSFER_TOKENからのシークレットを受け入れます。共有システム上のプロセス引数に完全なフラグメントリンクまたはトークンを含めないでください。

transfer create --jsonは、--include-secretが明示的でない限りベアラリンクとトークンを省略します。シークレットを含むJSONは、ターミナルに書き込むのではなくリダイレクトする必要があります。handoff encodeも同様に保護されたプロンプト、--token-file、またはAISPACE_TRANSFER_TOKENを受け入れます。

--jsonを使用すると、エラーも構造化されたまま標準エラー出力(stderr)に書き込まれます。upload --link --jsonは{"file": File, "link": ShareLink}を返します。暗号化されたアップロードは"encryption"オブジェクトを追加します。

設定

優先順位: フラグ > 環境変数 > 設定ファイル > デフォルト。

設定フラグ環境変数ファイルキーデフォルト
APIキー--keyAISPACE_KEYkey—
サーバー--urlAISPACE_URLurlhttps://aispace.sh

AISPACE_AGE_IDENTITYは、decrypt --identity-fileが省略された場合に復号化IDを提供します。これはコマンドライン値としては意図的に受け入れられません。

設定ファイル: $XDG_CONFIG_HOME/aispace/config.json (デフォルト ~/.config/aispace/config.json)。モード0600で書き込まれます。ファイルが他のユーザーにも読み取り可能である場合、警告が表示されます。AISPACE_CONFIGはパスを上書きします。

期間(--expires、--link-expires)は、dサフィックス付きのGo構文を受け入れます: 30m、24h、7d、1d12h、または単なる秒数。省略した場合はサーバーのデフォルト(ファイルは7日間、Proの公開リンクは1時間)が使用されます。

ファイルパーミッションとリンク

ファイルの可視性は、認証済みキーアクセスを制御します。公開リンクは別の機能です。作成するにはProアカウントが必要で、そのファイルがURLを持つ誰でも利用できるようになります。

ファイルモード誰がアクセスできますか?ファイルの有効期間公開リンクの有効期間ダウンロード上限アクセス漏洩時の露出
privateアップロードしたキーのみデフォルト7日間。無料では最大7日間、Proでは最大30日間なしアカウント月間制限そのキーに属するプライベートファイル(削除または有効期限切れまで)
accountアカウントのすべてのアクティブなキーデフォルト7日間。無料では最大7日間、Proでは最大30日間なしアカウント月間制限アカウント共有ファイル(削除または有効期限切れまで)
private + 公開リンクアップロードしたキーとURLを持つ誰でも最大30日間(リンクはProが必要なため)デフォルト1時間。最大30日間(ファイル有効期限を超えない)オプション(リンクごと)リンクの有効期限切れ、取り消し、上限到達、ファイル削除、またはファイル有効期限切れまで、リンクされたファイルのみ
account + 公開リンクアカウントキーとURLを持つ誰でも最大30日間(リンクはProが必要なため)デフォルト1時間。最大30日間(ファイル有効期限を超えない)オプション(リンクごと)URLアクセスはリンクで終了。アカウントキーはファイル削除または有効期限切れまでアクセス可能
クライアント暗号化ファイル可視性は暗号文アクセスを制御します。age ID所有者のみが復号化できます選択したファイルモードと同じ制限リンクが作成された場合のPro限定制限と同じオプション(リンクごと)平文の露出には、暗号文とage IDの両方が必要

利用可能な期間構文には、30s、15m、1h、36h、7dが含まれます。

ファイルは、ファイル有効期間が終了すると利用できなくなります。リンクは、有効期限切れ、取り消し、またはダウンロード上限に達したために早く終了する可能性があります。ファイルを削除すると、認証済みキーアクセスとすべての関連公開リンクが直ちに終了します。

終了コード

コード意味
0成功
1一般エラー(ネットワーク、以下にリストされていない4xx/5xx)
2使用法エラー
3認証(401、またはキーが設定されていない)
4クォータ/サイズ(402、413)
5レート制限(429)—冪等GETはRetry-After(最大30秒)でスリープし、1回再試行します

エラーは標準エラー出力にerror: <message> (<code>)として出力されます。--jsonを使用すると、標準エラー出力にJSONオブジェクト{"error":{"code","message","status","details","exit_code"}}として出力されます。

開発

go test -race ./... && go vet ./... && test -z "$(gofmt -l .)"
go build -ldflags "-X main.version=0.0.0-dev" -o aispace .
(cd npm && npm test && npm pack --dry-run)

テストスイートはローカルHTTPフィクスチャを使用し、aispaceキーは必要ありません。貢献を歓迎します。CONTRIBUTING.mdから始めて、ROADMAP.mdを確認し、CHANGELOG.mdを参照してください。集中的なバグレポートと機能提案には、リポジトリの構造化されたイシューフォームを使用できます。

リリースは手動のGitHub Actionsワークフローを通じてカットされます。GoReleaserは、チェックサム付きのmacOS、Linux、Windowsバイナリをビルドし、Homebrewタップを更新し、@aispace-sh/cliをnpmに公開し、すべての3つのプラットフォームでインストールされたMCPサーバーを検証し、最後にsh.aispace/mcpを公式レジストリに公開します。発行者構成、再開可能なMCPのみの公開、およびリリースチェックリストについては、RELEASE.mdを参照してください。

セキュリティ

脆弱性は、GitHub Security Advisoriesを通じてプライベートに報告してください。認証情報、プライベートリンク、または顧客データを含む公開イシューを開かないでください。docs/SECURITY.mdを参照してください。