比喩ではありません。Kortix プロジェクトは git repo であり、その repo が会社です。エージェント、構築したスキル、学習したすべて、そしてそれらが動作するマシンの定義が含まれます。バージョン管理され、diff を確認でき、完全に所有できます。
skill: reconcile-invoices — 一部返金を処理
skills/reconcile-invoices/SKILL.md
9f4c2b7e → main · invoice-clerk が作成
kortix.yaml は Kortix 層です。セッションを起動するマシン、コネクター、トリガー、シークレット名、各エージェントが触れてよい対象を定義します。OpenCode config はエージェントが思考するランタイムです。この2つ以外はすべて repo 内のファイルです。
# スキーマバージョン 2。ランタイムは OpenCode。kortix_version: 2runtime: opencode project: name: Northwind # 何も指定されていないときに回答するエージェント。default_agent: kortix # ランタイム設定の場所。これより先はファイル。opencode: config_dir: harnesses/opencode # シークレット名のみ。値は暗号化されて# プラットフォームに保存され、マシン起動時に注入されます。env: required: [STRIPE_API_KEY] optional: [LINEAR_API_KEY] # セッションを起動するマシン。sandbox: default: python templates:- slug: python image: python:3.12-slim cpu: 2 memory: 4 # 外部の世界へのアクセス。定義は# git にあります。認証情報は含まれません。connectors:- slug: gmail-read provider: pipedream app: gmail authorization_strategy: user # ガバナンス:各エージェントが触れられる対象。# エージェントが言う内容ではありません。省略した権限は none になります。agents: kortix: connectors: all secrets: all skills: all kortix_permissions: all invoice-clerk: sandbox: python connectors: [gmail-read] secrets: [STRIPE_API_KEY] skills: [reconcile-invoices] kortix_permissions: [project.cr.open]Kortix 層 — repo ルートにある1つのファイル。
{ // ドキュメント:https://opencode.ai/docs/ "$schema": "https://opencode.ai/config.json", "theme": "system", "default_agent": "kortix", // セッションはすでに分離されたマシン上にあります。 // 使い捨てブランチなので、エージェントは最初から広い権限で開始します。 // より厳格にしたい場合は、ここでツールごとに // ポリシーを絞り込みます。 "permission": "allow"}ランタイム — モデル、ツール、権限。
---description: 請求書と支払いを照合します。mode: primarypermission: bash: ask--- あなたは Northwind の請求担当です。 すべての支払いを金額ではなく、必ず請求書番号で請求書と照合します。照合できない場合は変更リクエストを作成し、照合できなかった内容を正確に伝えます。エージェント — 標準の OpenCode エージェントファイル。記載内容がここに反映されます。
どのマシン、どのコネクタ、どのシークレット、どのスキル、どの CLI 動詞を使えるか。ガバナンスのみを定義します。付与しなければ権限はゼロになり、エージェントは与えられたものだけを使えます。
プロンプト、モデル、ツール、プラグイン、権限。エージェントは標準の OpenCode エージェントです。基本は Markdown で、そこに同じリポジトリ内のツール、プラグイン、モデル設定が加わります。ディレクトリを読めば、そのエージェントが何をするか正確にわかります。
マニフェストがシークレットを指定し、エージェントごとに付与します。値はプラットフォーム上で暗号化され、実行時にマシンへ注入されます。リポジトリやログに書き込まれることはありません。
エージェント、スキル、メモリは、見えないデータベースの行ではありません。コードの隣にある Markdown ファイルで、各セッションにクローンされ、人が読め、エージェントが編集できます。
隠れたレイヤーに尋ねる必要はありません。すべての信念、権限、指示がファイルの 1 行として存在し、すでに使っているツールで答えが得られます。
# 会社は価格について何を信じている?$ grep -ri "annual" memoryMEMORY.md: セキュリティレビュー前に annual の見積もりを出さない # Stripe キーを扱えるのは誰?$ grep -n "STRIPE_API_KEY" kortix.yaml18: 必須: [STRIPE_API_KEY]48: シークレット: [STRIPE_API_KEY] # 請求担当をいつ誰が変更した?$ git log --oneline agents/8f2a1c4 invoice-clerk: 返金を推測するのをやめる1d90b73 invoice-clerk: ペルソナの初稿すべてのエージェントプロンプト、スキル、記憶された事実、付与情報が、1 つのリポジトリ内のテキストです。クリックして進むコンソールも、請求して取得するエクスポートもありません。
エージェント、スキル、メモリファイルへの変更はすべて、作成者、タイムスタンプ、差分を持つコミットです。何も消えず、暗闇で起きることもありません。
火曜日に悪い指示を入れてしまった?差分を読み、コミットを revert し、変更リクエストを作成します。会社は元の状態に戻ります。
エージェントが仕事のより良い方法を見つけても、ひそかに記憶することはありません。スキルを編集し、自分のブランチにコミットして、変更リクエストを作成します。人が差分を読み、判断します。
## 支払いと請求書の照合 1. 金額ではなく、必ず番号で請求書を取得します。2. 金額が異なる場合は、人による確認を促します。2. 差額がすでに記録された返金と一致する場合は、 一部返金として処理を完了し、請求書に 返金 ID を記録します。3. その他の理由で異なる場合は、 人による確認を促し、確認内容を伝えます。 自分で返金を実行してはいけません。エージェントが自分の指示を書き換える場合も、データベースのマイグレーションと同じ流れです。ブランチ、コミット、差分、レビュアー。会社には 2 つではなく 1 つのレビュープロセスがあります。
マシンは提案できます。判断するのは人です。承認された変更リクエストを経たものだけが main に届くため、見ていない間に会社が変質することはありません。
エージェントは自分の設定を読み、編集し、変更を提案できます。これをスケジュール化すれば、全員が眠っている間も、リポジトリはあなたの会社としてより良くなります。
agents: memory-reflector: # 変更リクエストを作成できます。それ以外は何もできません。 kortix_permissions: [project.cr.open] triggers:- slug: memory-reflector名前: Memory reflector type: cron agent: memory-reflector enabled: falsecron: "0 0 3 * * *" timezone: UTC prompt: | 過去 24 時間のプロジェクト活動を 振り返ります。git の履歴、マージ済みの変更 リクエスト、セッションのダイジェストを確認し、 memory/ を更新して、`memory: ...` という タイトルの変更リクエストを 1 件作成します。 永続的な知識がなければ、作成せずに終了します。スターターテンプレート由来です。新しいプロジェクトにはすべて含まれますが、無効になっています。
enabled を true にすると、誰も見ていない午前 03:00 UTC に実行されます。トリガーは cron スケジュールと署名付き Webhook で、他のすべてと同じファイルに宣言します。
専用のクラウドコンピューターと専用ブランチが割り当てられ、マニフェストが与えた 1 つの権限、つまり変更リクエストを作成する権限だけを持ちます。
過去 1 日の git 履歴とセッションを読み、学んだことを memory/ にプレーンな Markdown として書き込みます。
朝には、1 件の変更リクエストが待っています。マージすれば会社は新しい知識を得て、閉じれば何も起きません。
エクスポートの手順も、サポートチケットも、解析に困る独自形式もありません。会社はすでにブランチ上のテキストなので、あなたとともにクローン、フォーク、revert して持ち出せます。
# 任意のディレクトリを Kortix に変える$ kortix init # コンパイルを確認し、不足しているシークレットを尋ね、# プッシュして、すべてを稼働させる$ kortix ship # ここから先は、ただのリポジトリです$ git clone git@github.com:northwind/northwind.git$ git revert 8f2a1c4$ kortix cr