Codync
免費、開源的 1:1 替代方案,取代 Grok Bot 與 Muse。從 iPhone、Mac 或 Linux 桌面將 Claude Code、Codex、Cursor 與 40+ 程式碼代理人作為持續機器人傳訊。群組聊天、主題串…
AI 翻譯
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Trajekt records every run of your AI agent — each step, the model's reasoning, tool calls with their arguments and results, tokens, latency and cost — and lets you replay the trajectory step by step. Built for the moment an agent goes off the rails in production.
Try it without installing anything: the live demo replays two weeks of simulated traffic from two agents, one of which regressed after a release. Its read-only MCP endpoint is open too:
claude mcp add --transport http trajekt https://trajekt-demo.vercel.app/api/mcp.
Logs tell you what an agent said. Trajekt shows you what it did.
v7 against v8, app 3.1.0 against 3.2.0, your current model against a cheaper one.git clone https://github.com/LeoLR/trajekt.git
cd trajekt
cp .env.example .env # set DASHBOARD_PASSWORD and DASHBOARD_SESSION_SECRET
docker compose up -d --build
The dashboard and the ingestion endpoint both listen on http://localhost:3000. Create a project to get an API key (shown once):
docker compose exec dashboard pnpm create-project my-project
# optional: two weeks of simulated runs, including a regression, to explore the dashboard
docker compose exec dashboard pnpm seed
Recording uses plain OpenTelemetry — there is no proprietary SDK in your agent:
npm i @opentelemetry/sdk-node @opentelemetry/exporter-trace-otlp-http
@trajekt-ai/core is the library the server uses to read traces. Install it only if you want to read or score traces in your own code or tests:
npm i @trajekt-ai/core
// instrumentation.ts
import { NodeSDK } from '@opentelemetry/sdk-node';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
new NodeSDK({
serviceName: 'sentry-triage', // becomes the agent name
traceExporter: new OTLPTraceExporter({
url: 'http://localhost:3000/v1/traces',
headers: { Authorization: `Bearer ${process.env.TRAJEKT_API_KEY}` },
}),
}).start();
Or with environment variables only:
OTEL_SERVICE_NAME=sentry-triage
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:3000
OTEL_EXPORTER_OTLP_PROTOCOL=http/json
OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer tk_live_..."
With the Vercel AI SDK, turn telemetry on for each call:
await generateText({
model, prompt, tools,
experimental_telemetry: { isEnabled: true, functionId: 'sentry-triage' },
});
Trajekt recognises spans that follow the OpenTelemetry GenAI semantic conventions (gen_ai.*) and the Vercel AI SDK telemetry spans (ai.*). Set service.version for the app version, and trajekt.agent.version / trajekt.prompt.version when the agent or its prompt change on their own. An LLM step is titled by its model; set trajekt.step.name on its span to name it instead (an agent phase such as PLAN or DEVELOP#2; with the helpers, traceLlm({ name }) or traceAnthropic(client, tracer, { stepName }), a string or a function of the call's params; in Langfuse, the generation's name):
OTEL_RESOURCE_ATTRIBUTES=service.version=3.2.0,trajekt.agent.version=1.5.0,trajekt.prompt.version=v8
A Langfuse trace export, a Vercel AI SDK generateText result or an OTLP/JSON file can be posted as-is (examples of each in docs/assets/samples):
curl -X POST http://localhost:3000/v1/traces \
-H "Authorization: Bearer tk_live_..." \
-H "Content-Type: application/json" \
-H "X-Trajekt-Agent: support-bot" \
--data @trace.json
import { normalize, computeMetrics, annotateSteps } from '@trajekt-ai/core';
const run = normalize(trace); // Langfuse export, OTLP/JSON or AI SDK result
const metrics = computeMetrics(run); // status, durationMs, costUsd, redundantToolCalls, retryCount, pathSignature…
const flags = annotateSteps(run); // per step: error, retry attempt, "repeats step #n"
Replay a fixed set of scenarios — mocked tools and data — on every change, and let Trajekt tell you whether the new version is worse.
Assert on a run in any test runner:
import { normalize, assertTrajectory } from '@trajekt-ai/core';
assertTrajectory(normalize(trace), {
status: 'ok',
order: ['sentry.getIssue', 'gitlab.readFile', 'jira.createIssue'],
calledWith: [{ tool: 'jira.createIssue', args: { project: 'PAY' } }],
maxRepeatedToolCalls: 0,
maxCostUsd: 0.08,
});
Compare eval suites. Tag eval runs with trajekt.scenario and the version under test, and give them a quality score (trajekt.score.correct, or scoreTrajectory() from your assertions). Trajekt keeps them out of production metrics and compares each scenario with itself across two versions — a paired test that catches a regression with a dozen scenarios — then says pass or fail, which scenarios got worse, and links to a step-by-step diff.
Gate your pull requests. The GitHub Action compares the PR head with its base, comments the result on the pull request — which scenarios got worse, with a link to their diff — and fails the job on a regression:
- uses: LeoLR/Trajekt/actions/eval-suite@main
with:
url: ${{ vars.TRAJEKT_URL }}
read-key: ${{ secrets.TRAJEKT_READ_KEY }}
agent: sentry-triage
baseline: ${{ github.event.pull_request.base.sha }}
candidate: ${{ github.event.pull_request.head.sha }}
Other CIs call GET /api/agents/:name/evals; without a server, use compareScenarios() from @trajekt-ai/core. A runnable example is in examples/eval-suite.
See Testing your agent in the docs, and the eval suite of the live demo.
Several projects per instance, each with its own API keys (/projects). Customer data is masked before storage: secrets by default, emails, IBANs, cards, phones and your own patterns on demand. Retention (TRAJEKT_RETENTION_DAYS), ingestion rate and size limits, and an option to drop raw payloads are in the configuration.
| Source | How |
|---|---|
| OpenTelemetry | Any OTLP/HTTP exporter, JSON or protobuf, gzip accepted. gRPC is not supported. |
| OpenTelemetry GenAI semantic conventions | gen_ai.operation.name, gen_ai.request.model, gen_ai.usage.*, gen_ai.tool.*, gen_ai.agent.name, gen_ai.input/output.messages |
| Vercel AI SDK | experimental_telemetry spans through an OTel exporter, or a generateText result posted to /v1/traces |
| OpenInference / OpenLLMetry | LangChain, LlamaIndex, CrewAI… through their OTLP exporter: models, tokens, tools and their arguments |
| Langfuse | pnpm import-langfuse --since 7d pulls traces and scores from a Langfuse project (re-runnable, no duplicates), or post a trace export to /v1/traces |
| Hand-written agents | traceRun / traceTool from @trajekt-ai/core with any OpenTelemetry tracer |
packages/
core/ @trajekt-ai/core — normalize(), merge, metrics, regression tests, run diff,
eval suite comparison, trajectory assertions
apps/
dashboard/ Next.js — ingestion (POST /v1/traces), API and dashboard
migrations/ SQL schema (one Postgres, nothing else)
src/server/ ingestion, queries, alerts, simulated traffic
src/views/ dashboard pages
test/ tests against a real Postgres
site/ Landing page and docs (Vite + React, prerendered)
actions/
eval-suite/ GitHub Action — compare eval suites on pull requests
examples/
eval-suite/ a toy agent, mocked scenarios, behaviour tests and suite comparison
docs/ API contract, architecture notes, assets
docker-compose.yml Postgres + dashboard
pnpm install
pnpm --filter @trajekt-ai/core build
pnpm test # core unit tests + dashboard tests (needs a Postgres, see below)
pnpm --filter dashboard dev # http://localhost:3000
pnpm --filter site dev # landing page on http://localhost:5173
The dashboard tests create and drop a throwaway database on a local Postgres (TEST_PG_HOST, TEST_PG_PORT, TEST_PG_USER; defaults 127.0.0.1:54329, user postgres, trust auth). Issues and pull requests are welcome.
MIT — see the license field in packages/core/package.json.