rig.
MACHINED TO SPEC · PRIVATE BETA
Your machine, milled to spec.
A dedicated machine, your repos, your keys. Claude works the plate around the clock. Nothing leaves the shop until you sign it off from your phone.
RUNTIME
ALWAYS ON
REGIONS
GLOBAL
ACCESS
BY INVITE
9:41
Sessions
Active 3
Review 1
Done
your-rig
online · 14 ms
↑6d 4h
ingest-api
feat/rate-limit
Add per-key rate limiting to /ingest, 100 req/min
sonnet·38.4k ctx·12m 04s·+42−3
web-dashboard
chore/sessions
REVIEW
Migration drops legacy sessions table
3 files·waiting 4m·needs approval
infra
fix/tf-drift
MERGED
Reconcile terraform drift in sfo3
PR #412·22 min ago·6m 51s
+New session
▣
Sessions ◍
Rigs ⌥
Repos ⚙
Settings
Sessions ◍
Rigs ⌥
Repos ⚙
Settings
‹
ingest-api
feat/rate-limit
⋯
main ← feat/rate-limit·3 files·12m 04s
Add rate limiting to the /ingest endpoint — 100 req/min per API key, 429 with Retry-After.
Token bucket in Redis keyed on req.apiKey. Reusing the existing client so there's no new dependency.
✓
read src/api/ingest.ts
340 L
✓
read middleware/index.ts
88 L
✓
edit middleware/limit.ts
+42−3
✓
bash npm test -- --run
3.24s
PASS test/limit.spec.ts (11)
PASS test/ingest.spec.ts (37)
48 passed · 0 failed
write test/limit.headers.spec.ts
claude-sonnet · 38.4k / 200k ctx$0.11
+
Reply to Rig…
‹
limit.ts
+42−3
‹2/3›
middleware/limit.ts
@@ -14,3 +14,9 @@ app.post("/ingest")
12import { redis } from "../redis";
13// per-key bucket, 1m window
14− app.post("/ingest", handler);
14+ const limit = bucket({
15+ capacity: 100,
16+ refill: "1m",
17+ store: redis,
18+ key: (req) => req.apiKey,
19+ });
20+
21+ app.post("/ingest", limit, handler);
22
✓ 48 tests·lint clean·tsc 0 errors3.24s
Comment
Approve & open PR
Web
Sim
Shell
Data
your-rig:~/ingest-api
zsh · 0.4% cpu
➜ ~/ingest-api npm run dev
> ingest-api@2.1.0 dev
> tsx watch src/server.ts
09:38:02 ready http://localhost:3000
09:38:02 redis connected 127.0.0.1:6379
09:38:14 POST /ingest 202 11ms
09:38:14 POST /ingest 202 8ms
09:38:15 POST /ingest 429 2ms retry-after=41
09:38:15 bucket key=ak_9f21 drained 100/100
09:38:22 POST /ingest 202 9ms
➜ ~/ingest-api redis-cli ttl rl:ak_9f21
(integer) 41
➜ ~/ingest-api
⌃C
⇥
↑
clear
Friday, August 7
9:41
RIG-SFO3
3 active
QUEUE
1 waiting
r
RIG
now
web-dashboard · approval needed
Migration 0042_drop_sessions.sql will drop 1 table (18,204 rows).
destructive·backup 2m ago·reversible
View diff
Approve
r
ingest-api · 48 tests passed
4m
▲
Face ID to approve
◉
A · SESSION LIST
B · DIFF REVIEW
C · APPROVE PUSH
SCALE 1:1 · REV D
YOUR BOX · YOUR KEYS
YOUR BOX · YOUR KEYS
rig.
MACHINED TO SPEC · BETA
Your machine, milled to spec.
A dedicated machine, your repos, your keys. Claude works the plate around the clock — nothing leaves the shop until you sign it off.
RUNTIMEALWAYS ON
REGIONSGLOBAL
ACCESSBY INVITE
9:41
Sessions
Active 3
Review 1
Done
your-rig
online · 14 ms
↑6d 4h
ingest-api
feat/rate-limit
Add per-key rate limiting to /ingest, 100 req/min
sonnet·38.4k ctx·12m 04s·+42−3
web-dashboard
chore/sessions
REVIEW
Migration drops legacy sessions table
3 files·waiting 4m·needs approval
infra
fix/tf-drift
MERGED
Reconcile terraform drift in sfo3
PR #412·22 min ago·6m 51s
+New session
▣
Sessions ◍
Rigs ⌥
Repos ⚙
Settings
Sessions ◍
Rigs ⌥
Repos ⚙
Settings
‹
ingest-api
feat/rate-limit
⋯
main ← feat/rate-limit·3 files·12m 04s
Add rate limiting to the /ingest endpoint — 100 req/min per API key, 429 with Retry-After.
Token bucket in Redis keyed on req.apiKey. Reusing the existing client so there's no new dependency.
✓
read src/api/ingest.ts
340 L
✓
read middleware/index.ts
88 L
✓
edit middleware/limit.ts
+42−3
✓
bash npm test -- --run
3.24s
PASS test/limit.spec.ts (11)
PASS test/ingest.spec.ts (37)
48 passed · 0 failed
write test/limit.headers.spec.ts
claude-sonnet · 38.4k / 200k ctx$0.11
+
Reply to Rig…
‹
limit.ts
+42−3
‹2/3›
middleware/limit.ts
@@ -14,3 +14,9 @@ app.post("/ingest")
12import { redis } from "../redis";
13// per-key bucket, 1m window
14− app.post("/ingest", handler);
14+ const limit = bucket({
15+ capacity: 100,
16+ refill: "1m",
17+ store: redis,
18+ key: (req) => req.apiKey,
19+ });
20+
21+ app.post("/ingest", limit, handler);
22
✓ 48 tests·lint clean·tsc 0 errors3.24s
Comment
Approve & open PR
Web
Sim
Shell
Data
your-rig:~/ingest-api
zsh · 0.4% cpu
➜ ~/ingest-api npm run dev
> ingest-api@2.1.0 dev
> tsx watch src/server.ts
09:38:02 ready http://localhost:3000
09:38:02 redis connected 127.0.0.1:6379
09:38:14 POST /ingest 202 11ms
09:38:14 POST /ingest 202 8ms
09:38:15 POST /ingest 429 2ms retry-after=41
09:38:15 bucket key=ak_9f21 drained 100/100
09:38:22 POST /ingest 202 9ms
➜ ~/ingest-api redis-cli ttl rl:ak_9f21
(integer) 41
➜ ~/ingest-api
⌃C
⇥
↑
clear
Friday, August 7
9:41
RIG-SFO3
3 active
QUEUE
1 waiting
r
RIG
now
web-dashboard · approval needed
Migration 0042_drop_sessions.sql will drop 1 table (18,204 rows).
destructive·backup 2m ago·reversible
View diff
Approve
r
ingest-api · 48 tests passed
4m
▲
Face ID to approve
◉
ASESSION LIST
BDIFF REVIEW
CAPPROVE PUSH
SCALE 1:1 · REV DYOUR BOX · YOUR KEYS