一键导入
log
Append-only work log for agent sessions. Use when recording what happened, what was decided, and what's next — the log is for the next session's orchestrator.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Append-only work log for agent sessions. Use when recording what happened, what was decided, and what's next — the log is for the next session's orchestrator.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Always register VM snapshots in the commit ledger. Use when committing/snapshotting VMs, before destroying VMs, during deploys, or when creating golden images. Ensures no snapshot goes untracked.
Generate a magic login link for the agent-services dashboard UI. Use when the user wants to access the dashboard, needs a login link, says "magic link," or asks for UI access.
Shared task board for coordinating work across agents. Use when creating, assigning, tracking, or querying tasks in a swarm.
Deploy a branch to a preview VM for zero-risk change review. Snapshot infra, clone it, deploy the branch on the clone, share the link. Production untouched. Use for ALL UI changes, feature demos, and PR reviews.
Commit ledger for tracking VM snapshots. Use when recording, querying, or managing Vers VM commit history — golden images, infra snapshots, rollback points.
Deploy agent-services to the infra VM. Use when shipping new code, restarting services, or rolling back a broken deploy. Covers pre-deploy snapshot, pull/build/restart, smoke tests, and rollback.
| name | log |
| description | Append-only work log for agent sessions. Use when recording what happened, what was decided, and what's next — the log is for the next session's orchestrator. |
Carmack .plan-style append-only log. Every agent writes what they're doing as they do it. The log is the narrative record of a session — when a new orchestrator session starts, the first thing it reads is the log to understand what happened while it was gone.
Write as things happen, not in batches. If you find yourself batching 3+ entries at once, you waited too long. The log should read like a timeline, not a retrospective.
Good: entry after each event as it happens. Bad: one giant entry at the end summarizing everything.
The log is for the next session's orchestrator. Assume the reader:
The board tracks tasks. The feed tracks events. The log tracks the narrative — the human-readable story of what happened.
VERS_INFRA_URL env var points to the infra VM (e.g., http://abc123.vm.vers.sh:3000). All endpoints require Authorization: Bearer $VERS_AUTH_TOKEN.
curl -X POST "$VERS_INFRA_URL/log" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"text": "Session started. 3 open tasks on the board — share links, usage tracking, commit ledger.",
"agent": "orchestrator"
}'
Returns 201. Required: text. Optional: agent.
Each entry gets a ULID id and ISO timestamp automatically.
# Last 24 hours (default if no time range given)
curl "$VERS_INFRA_URL/log" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN"
# Last N hours or days
curl "$VERS_INFRA_URL/log?last=8h" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN"
curl "$VERS_INFRA_URL/log?last=7d" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN"
# Since a specific timestamp
curl "$VERS_INFRA_URL/log?since=2026-02-10T15:00:00Z" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN"
# Time range
curl "$VERS_INFRA_URL/log?since=2026-02-10T09:00:00Z&until=2026-02-10T17:00:00Z" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN"
Returns { entries: [...], count: N }. Entries are in chronological order (oldest first).
curl "$VERS_INFRA_URL/log/raw?last=24h" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN"
Returns plain text, one line per entry:
[2026-02-10T15:30:00Z] (orchestrator) Session started. 3 open tasks on the board.
[2026-02-10T15:31:12Z] (orchestrator) Dispatched lt-share-links to work on share link feature.
[2026-02-10T16:45:03Z] (orchestrator) lt-share-links completed — branch feat/report-share-links, 24 tests, PR #16.
The /raw endpoint is ideal for piping into a model's context at session start.
# Read what happened recently
curl -s "$VERS_INFRA_URL/log/raw?last=24h" -H "Authorization: Bearer $VERS_AUTH_TOKEN"
# Log that you're here
curl -X POST "$VERS_INFRA_URL/log" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text": "New session started. Reading board and recent log to recover context.", "agent": "orchestrator"}'
curl -X POST "$VERS_INFRA_URL/log" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text": "Dispatched lt-share-links to build report share links. Task 01KH5V32...", "agent": "orchestrator"}'
curl -X POST "$VERS_INFRA_URL/log" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text": "lt-share-links done. Branch feat/report-share-links pushed, 24 tests passing, PR #16 opened. Found issue: better-sqlite3 dep missing from package.json after merge.", "agent": "orchestrator"}'
curl -X POST "$VERS_INFRA_URL/log" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text": "Decision: using SQLite for share links instead of JSONL. Need row-level revocation and access count queries — JSONL cant do that without full scans.", "agent": "orchestrator"}'
curl -X POST "$VERS_INFRA_URL/log" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text": "Deploy failed — better-sqlite3 missing from package.json on main. Got dropped during merge of PR #17. Fixed manually on infra VM, need to push fix to main.", "agent": "orchestrator"}'
curl -X POST "$VERS_INFRA_URL/log" \
-H "Authorization: Bearer $VERS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text": "Session ending. Completed: share links (PR #16 merged), usage tracking (PR #17 merged), commit ledger (PR #18 merged). Deployed all to infra. Remaining: deploy snapshot before next code deploy. 310 tests passing.", "agent": "orchestrator"}'
If the agent-services extension is loaded:
log_append — Append a log entrylog_query — Query entries with time filtersinterface LogEntry {
id: string; // ULID (sortable, unique)
timestamp: string; // ISO timestamp (auto-generated)
text: string; // The log message
agent?: string; // Who wrote it
}
Entries are stored as newline-delimited JSON (data/log.jsonl). Append-only — entries are never modified or deleted.