OrbitLens

OrbitLens API

Upload EIS signals straight from your CI. Your code never leaves your machine — only the signals (light) reach the observatory. Built for GitHub Enterprise and no-clone environments.

EIS のシグナルを CI からそのままアップロード。コードはあなたのマシンから出ない — 観測所に届くのはシグナル(光)だけ。GitHub Enterprise やクローン不可の環境のために。

Base URL  https://api.orbitlens.io

Overview概要

The OrbitLens API lets the EIS CLI push locally-computed signals to your observatory, and lets anyone embed a signal badge.

OrbitLens API は、EIS CLI がローカルで算出したシグナルを観測所へ送り、誰でもシグナルバッジを埋め込めるようにする。

EIS analyses your repository locally — git log and git blame, nothing else. The CLI uploads only the resulting signals (the 7-axis scores and archetypes), never source code. This is the path for teams who can't or won't let the SaaS clone their repos (GitHub Enterprise, air-gapped, strict policy).

EIS はリポジトリをローカルで解析する — git log と git blame だけ、他には何も使わない。CLI がアップロードするのは結果のシグナル(7軸の数値とアーキタイプ)のみで、ソースコードは決して送らない。SaaS にリポジトリをクローンさせられない・させたくないチーム(GitHub Enterprise、エアギャップ、厳格なポリシー)のための経路だ。

Uploaded observations are CLI-sourced: the observatory can't re-derive them from git (it never sees the repo), so their credibility is surfaced through the Trust Signal rather than server-side reproducibility.
アップロードされた観測は CLI 由来だ。観測所は git から再導出できない(リポジトリを見ないため)ので、その信頼性はサーバ側の再現性ではなく Trust Signal を通して示される。

Authentication認証

All write endpoints take a Bearer token. Create one in Ace → Settings → API tokens (shown once). Tokens are prefixed eis_ and scoped to the galaxy that created them.

書き込み系エンドポイントはすべて Bearer トークンを要求する。Ace → Settings → API tokens で発行する(表示は一度きり)。トークンは eis_ で始まり、発行した galaxy にスコープされる。

Authorization: Bearer eis_xxxxxxxxxxxxxxxxxxxx

The recommended path is the CLI, which sends the token for you:

推奨は CLI 経由で、トークンは CLI が代わりに送る:

# token via flag or $EIS_TOKEN
eis analyze --upload --token eis_xxxx

Rate limitsレート制限

Requests are rate-limited per token/user, by plan. Every response carries the standard headers:

リクエストはトークン/ユーザー単位、プランに応じてレート制限される。すべてのレスポンスに標準ヘッダが付く:

HeaderヘッダMeaning意味
X-RateLimit-LimitRequests allowed per minute for your planプランごとの毎分許可リクエスト数
X-RateLimit-RemainingRequests left in the current window現在のウィンドウで残っているリクエスト数
X-RateLimit-ResetUnix time when the window resetsウィンドウがリセットされる Unix 時刻

Over the limit returns 429 Too Many Requests. Uploads run once per analysis (e.g. per CI build), so the plan limits leave generous headroom.

制限を超えると 429 Too Many Requests を返す。アップロードは解析ごとに一度(例: CI ビルドごと)なので、プランの制限には十分な余裕がある。

Upload signalsシグナル送信

POST/v1/signals/upload
Auth: Bearer eis_ token (or JWT)認証: Bearer eis_ トークン(または JWT)

Writes per-member signals for one domain as an observation, keyed on the analyzed commit. git_sha and sha_author_date are required — the observatory uses them to place the observation on the timeline (it can't derive them itself).

1つのドメインのメンバー別シグナルを、解析対象コミットをキーに観測として書き込む。git_shasha_author_date は必須 — 観測所はこれらを使って観測を年表上に配置する(自分では導出できない)。

Request bodyリクエストボディ

FieldフィールドType
git_shastringHEAD commit of the analyzed repo (required)解析対象リポジトリの HEAD コミット(必須)
sha_author_dateRFC3339Author date of that commit (required)そのコミットの author date(必須)
analysis_timeRFC3339When the analysis ran解析を実行した時刻
domainstringLogical domain (e.g. "backend")論理ドメイン(例: "backend")
signals[]objectPer-member 7-axis scores + archetypesメンバー別の7軸数値+アーキタイプ

Example

curl -X POST https://api.orbitlens.io/v1/signals/upload \
  -H "Authorization: Bearer eis_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "git_sha": "a1b2c3d4...",
    "sha_author_date": "2026-06-15T09:00:00Z",
    "analysis_time": "2026-06-15T09:05:00Z",
    "domain": "backend",
    "signals": [
      { "author": "alice", "production": 100, "catalysis": 68,
        "survival": 40, "design": 20, "breadth": 55,
        "debt_cleanup": 30, "indispensability": 25, "total": 62.7,
        "role_archetype": "Anchor" }
    ]
  }'

Responseレスポンス 201

{ "members": 1, "git_sha": "a1b2c3d4..." }

In practice you never hand-build this — run eis analyze --upload and the CLI assembles the payload (including git_sha) from your local analysis.

実際には手で組み立てることはない — eis analyze --upload を実行すれば、CLI がローカル解析からペイロード(git_sha を含む)を組み立てる。

Signal badgeシグナルバッジ

GET/badge/:account_login/:author
Public — no auth公開 — 認証不要

Returns an SVG badge of a member's current Total + archetype, for embedding in a README.

メンバーの現在の Total +アーキタイプを表す SVG バッジを返す。README への埋め込み用。

<!-- Markdown -->
![EIS](https://api.orbitlens.io/badge/your-org/alice)

MCP — context for AI agentsMCP — AI エージェント向けコンテキスト

A read-only Model Context Protocol server that hands one galaxy's observation to an AI coding agent as tools it can call. The agent stops writing blind: it can ask which modules are fragile, who holds them, and whether code here survives — before it edits.

1つの galaxy の観測を、AI コーディングエージェントが呼べるツールとして渡す、読み取り専用の Model Context Protocol サーバ。エージェントは手探りで書くのをやめられる——どのモジュールが脆く、誰が支え、ここでコードが生き残るのかを、編集する前に問い合わせられる。

POSThttps://ace.orbitlens.io/mcp
Streamable HTTP · Auth: Bearer mcp_ tokenStreamable HTTP · 認証: Bearer mcp_ トークン

The MCP server lives at /mcp on the Ace host (not the api.orbitlens.io upload host above). It is read-only — no writes, no side effects — and scoped to the galaxy the token belongs to (Galaxy Boundary): an agent can never reach another galaxy's context.

MCP サーバは Ace ホストの /mcp にある(上のアップロード用 api.orbitlens.io とは)。読み取り専用で——書き込みも副作用もなく——トークンが属する galaxy にスコープされる(Galaxy Boundary)。エージェントが他の galaxy のコンテキストに届くことはない。

Authentication認証

MCP uses a dedicated mcp_ token — a separate credential from the eis_ upload token above, so read access is never conflated with the write capability. Mint one in Ace → AI Integration (shown once).

MCP は専用の mcp_ トークンを使う——上のアップロード用 eis_ トークンとはの認証情報で、読み取り権限が書き込み権限と混ざらない。Ace → AI連携 で発行する(表示は一度きり)。

Connect (Claude Code / Cursor)接続(Claude Code / Cursor)

// .mcp.json
{
  "mcpServers": {
    "orbitlens": {
      "type": "http",
      "url": "https://ace.orbitlens.io/mcp",
      "headers": { "Authorization": "Bearer mcp_xxxx" }
    }
  }
}

Or via the CLI:

または CLI で:

claude mcp add --transport http orbitlens \
  https://ace.orbitlens.io/mcp \
  --header "Authorization: Bearer mcp_xxxx"

Toolsツール

ToolツールReturns返すもの
module_durabilityEvery module's fragile-vs-robust profile (survival + ownership concentration), most-fragile first各モジュールの脆い⇔堅牢プロファイル(生存+所有集中)、脆い順
assess_changePre-flight durability for the specific files you're about to editこれから編集するファイルの pre-flight durability
knowledge_holderWho (anonymously, Member-N) holds a module, and whether it's bus-factor 1そのモジュールを(匿名・Member-N で)誰が支えているか、bus factor 1 か
blast_radiusThe modules that historically change together with a given module指定モジュールと歴史的に一緒に変わってきたモジュール群
author_survival_profileThe galaxy's anonymous survival distribution — never a per-person rowgalaxy の匿名の生存分布——個人単位の行は返さない
get_write_contextBefore you write in a module: its durability, ownership concentration, and the constraints worth respectingモジュールに書き込む前の耐久性・所有集中・尊重すべき制約
ai_sludge_meterModules where change keeps landing but little survives — accumulating churn / collapse-risk signal変更が積もるのに生き残らないモジュール——churn 累積・崩壊リスクのシグナル
triage_review_attentionGravity-weighted ranking of where human review attention is worth spending firstレビューの注意をどこに優先して割くべきかを重力加重でランク付け
query_graveyardLocally-dead patterns — modules that collapsed here, so the agent doesn't revive themこの galaxy で崩壊したパターン——復活させないための「墓場」
get_propagation_anchorsSurvival-proven robust modules — positive examples to pattern-match new code toward生存が実証された堅牢モジュール——新コードが倣うべき良い実例(アンカー)
Every tool is galaxy-scoped by the token and disclosure-aware: per-author data is only ever an anonymous aggregate (Member-N / distribution), never a named individual's score.
すべてのツールはトークンによって galaxy にスコープされ、開示ルールに従う。個人単位のデータは常に匿名の集計(Member-N / 分布)で、実名の個人スコアを返すことはない。

Rate limitsレート制限

Tool calls are rate-limited per galaxy per hour, by plan (a higher plan or more seats raises the ceiling). Over the limit returns 429; it resets at the top of the hour. Protocol calls (initialize, tools/list) are never counted.

ツール呼び出しは galaxy 単位・1時間あたりでプランに応じてレート制限される(上位プランや席数で上限が上がる)。制限を超えると 429 を返し、毎時の頭でリセットされる。プロトコル呼び出し(initialize・tools/list)はカウントしない。

Errorsエラー

StatusステータスMeaning意味
400Malformed body, or missing git_sha / sha_author_date (upgrade the CLI)ボディの形式不正、または git_sha / sha_author_date の欠落(CLI を更新すること)
401Missing or invalid / expired tokenトークンの欠落・無効・期限切れ
429Rate limit exceeded — back off until X-RateLimit-Resetレート制限超過 — X-RateLimit-Reset まで待つこと