TuBrief
Subscribed Channels
Videos
Community

GitHubを離れてBuzzとNostrへ移行する際に知っておくべきこと

TuBrief Editorial
August 24, 2026
0
Computing/Software

Written with AI assistance from the source video. The video is the authority.

日本語한국어English中文EspañolالعربيةFrançaisDeutschBahasa Indonesiaहिन्दीРусскийPortuguês

Related Video

ジャック・ドーシーの新アプリがGitHubを狙う(バズ)12:24

ジャック・ドーシーの新アプリがGitHubを狙う(バズ)

Better Stack

More from the community

사내 시스템에 llm api 붙일 때 마주하는 현실적인 한계와 대응법

September 13, 2026

레거시 백엔드에 GPT-6 Astra 붙일 때 예산 승인과 보안 통과를 먼저 끝내는 법이 있습니다

September 13, 2026

에이전트끼리 대화하다 6천만 원 청구서가 나오는 이유

September 13, 2026

사내 RAG 벡터 검색에 Okta 권한 필터를 직접 거는 방법

September 13, 2026

브라우저 에이전트에게 내 구글 계정을 통째로 넘기면 안 되는 이유

September 12, 2026

Apple Won the AI Race

September 12, 2026

Comments (0)

Log in to leave a comment

No posts yet

© 2026 . All rights reserved.

TuBrief
Subscribed Channels
Videos
Community
Log in

GitHubを離れてBuzzとNostrへ移行する際に知っておくべきこと

中央集権的なリポジトリにコードをプッシュするやり方に違和感を覚える時期がやってくる。ポリシーは頻繁に変わり、自分のコードがどこで使われているのか分からない。1人のフリーランスや小規模チームにとって、データ主権は生存の問題だ。BuzzとNostrのNIP-34プロトコルは、単一企業に依存しない現実的な代替手段である。しかし、いざ移行しようとすると途方に暮れる。手順、コスト、セキュリティの問題を自力で解決しなければならない。

既存のリポジトリをBuzzへロスレスで移行する方法

単に git push --mirror を実行しても、サーバー側で拒否されてしまう。GitHub内部の参照である refs/pull/* が原因だ。ターゲットサーバーは隠されたリファレンスを受け付けてくれない。競合なしにコードを移行するには、不要な参照を取り除き、明示的にプッシュする必要がある。

一時ディレクトリにベア・リポジトリを作成し、GitHub専用のリファレンスを削除した上で、Buzzのエンドポイントにプッシュしなければならない。大容量ファイルがある場合は、LFSオブジェクトも別途処理する必要がある。

`bash
#!/usr/bin/env bash
set -euo pipefail

GITHUB_REPO_URL="1"BUZZREMOTEURL="1" BUZZ_REMOTE_URL="1"BUZZR​EMOTEU​RL="2"
TEMP_DIR=$(mktemp -d -t buzz-migration-XXXXXX)

trap 'rm -rf "$TEMP_DIR"' EXIT

git clone --mirror "GITHUBREPOURL""GITHUB_REPO_URL" "GITHUBR​EPOU​RL""TEMP_DIR/bare_repo.git"
cd "$TEMP_DIR/bare_repo.git"

git for-each-ref --format='%(refname)' refs/pull/ | while read -r ref; do
git update-ref -d "$ref"
done

git remote add buzz "$BUZZ_REMOTE_URL"
git push --force --prune buzz "+refs/heads/:refs/heads/" "+refs/tags/:refs/tags/"

ROOT_COMMIT=(gitrev−list−−max−parents=0HEAD∣head−n1)echo"マイグレーション完了:RootCommitID((git rev-list --max-parents=0 HEAD | head -n 1) echo "マイグレーション完了: Root Commit ID ((gitrev−list−−max−parents=0HEAD∣head−n1)echo"マイグレーション完了:RootCommitID(ROOT_COMMIT)"

`

このスクリプトを実行すると、コミット履歴が100%保持される。最初のコミットハッシュがプロジェクトの固有識別子となる。

比較項目 GitHub Buzz / Nostr NIP-34
リポジトリ識別 中央サーバーDBレコード (org/repo) 最初のコミットIDおよびNostrイベントID
認証方式 OAuth, PAT, SSH Key secp256k1楕円曲線非対称署名
パッチ交換 GitHub専用API NIP-34パッチイベント (kind: 1617)

Nostrベースの暗号学的アイデンティティとエージェント連携

Nostrエコシステムでは、人間であろうとAIエージェントであろうと同一の暗号学的主体である。32バイトの公開鍵とシュノル署名でお互いを認証する。秘密鍵をコードに埋め込んだ瞬間、セキュリティ事故につながる。環境変数としてメモリ上にのみ保持するか、リモート署名者を使用する必要がある。

エージェントが送信したパッチが途中で改ざんされていないか確認するには、NIP-01シリアライズハッシュを検証しなければならない。

`python
import json
import hashlib
from coincurve import PrivateKey

def create_signed_agent_event(secret_key_hex: str, kind: int, content: str, tags: list) -> dict:
sk = PrivateKey.from_hex(secret_key_hex)
pubkey_hex = sk.public_key.format(compressed=True)[1:].hex()
created_at = 1710000000

serialized_data = json.dumps(
    [0, pubkey_hex, created_at, kind, tags, content],
    separators=(',', ':'),
    ensure_ascii=False
)

event_id = hashlib.sha256(serialized_data.encode('utf-8')).hexdigest()
sig_hex = sk.schnorr_sign(bytes.fromhex(event_id), None, raw=True).hex()

return {
    "id": event_id,
    "pubkey": pubkey_hex,
    "created_at": created_at,
    "kind": kind,
    "tags": tags,
    "content": content,
    "sig": sig_hex
}

def verify_agent_event(event: dict) -> bool:
preimage = [0, event["pubkey"], event["created_at"], event["kind"], event["tags"], event["content"]]
serialized = json.dumps(preimage, separators=(',', ':'), ensure_ascii=False)
computed_id = hashlib.sha256(serialized.encode('utf-8')).hexdigest()
return computed_id == event["id"]

`

機密性の高いコードのやり取りが必要な場合は、NIP-44 v2規格を使用してChaCha20で暗号化する。

マルチエージェント自動化のコスト管理

エージェントにコーディングを任せると、自律修正ループに陥ってトークンを瞬く間に消費してしまう。失敗した記録が蓄積されるほどコンテキストは汚染され、コストは高騰する。これを防ぐには、プロキシレベルで制限をかける必要がある。

LiteLLMプロキシを手前に置き、仮想キー単位で日次予算と速度を制限する。

`bash
curl -X POST 'http://localhost:4000/key/generate'
-H 'Authorization: Bearer sk-master-key-1234'
-H 'Content-Type: application/json'
-d '{
"key_alias": "auto-coder-agent-01",
"max_budget": 5.0,
"budget_duration": "1d",
"tpm_limit": 50000,
"rpm_limit": 30,
"models": ["agent-code-model"]
}'

`

1日の予算が5ドルを超えると即座にエラーを返して停止する。設定ファイルでチーム全体の予算も一緒に締め付ける。

`yaml
model_list:

  • model_name: agent-code-model
    litellm_params:
    model: openai/gpt-4o
    api_key: os.environ/OPENAI_API_KEY

litellm_settings:
max_budget: 100.0
budget_duration: "30d"

default_team_settings:

  • team_id: "decentralized-dev-team"
    max_budget: 20.0
    budget_duration: "1d"

`

コード全体をコンテキストに含める行為もやめるべきである。Tree-Sitterを使用して必要な関数シグネチャと変更されたハンクの周辺のみを切り出して送信することで、トークンの無駄遣いを減らすことができる。この方式を採用すると、不要なツール呼び出しが半分以上に減少する。