Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 78 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ path = "src/main.rs"

[dependencies]
studio-api = { path = "crates/studio-api" }
studio-registry = { path = "crates/studio-registry" }
studio-buzz = { path = "crates/studio-buzz" }
studio-store = { path = "crates/studio-store" }
studio-types = { path = "crates/studio-types" }
Expand Down Expand Up @@ -39,6 +40,7 @@ members = [
"crates/studio-buzz",
"crates/studio-pay",
"crates/studio-api",
"crates/studio-registry",
]
resolver = "2"

Expand Down Expand Up @@ -77,6 +79,10 @@ figment = { version = "0.10", features = ["yaml", "env"] }
# registry; bump deliberately, in lockstep with the relay we run against.
buzz-sdk = { git = "https://github.com/block/buzz", rev = "22be8bb35177e27efc2dca2534df9a8dd871eae0" }
buzz-ws-client = { git = "https://github.com/block/buzz", rev = "22be8bb35177e27efc2dca2534df9a8dd871eae0" }
# Registry: agents/<name>.persona.md is Buzz's persona format, verbatim
# (GUIDELINES.md §3) — same pin as the other buzz crates.
buzz-persona = { git = "https://github.com/block/buzz", rev = "22be8bb35177e27efc2dca2534df9a8dd871eae0" }
toml = "1"
nostr = "0.44"
# WSS needs a process-level rustls CryptoProvider; every binary entry point
# installs ring explicitly (same pin/reason as buzz-cli) — relying on feature
Expand All @@ -96,3 +102,4 @@ studio-store = { path = "crates/studio-store" }
studio-buzz = { path = "crates/studio-buzz" }
studio-pay = { path = "crates/studio-pay" }
studio-api = { path = "crates/studio-api" }
studio-registry = { path = "crates/studio-registry" }
20 changes: 15 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,29 @@ droppable and rebuildable from the substrates.

## Layout

One binary — `scarced` (axum HTTP surface + orchestrator loop) — over five
One binary — `scarced` (axum HTTP surface + orchestrator loop) — over seven
crates:

| Crate | Role |
|---|---|
| `studio-core` | domain types, schemas, state machine + gate engine (no I/O) |
| `studio-types` | wire types + generated JSON Schemas (the API contract) |
| `studio-core` | state machine + gate engine, pure functions (no I/O) |
| `studio-store` | SQLite projections (rebuildable by design) |
| `studio-buzz` | `BuzzPort`: Buzz-crate-backed impl + mock (M3) |
| `studio-pay` | `PayPort`: stub impl through M4, live MPP session impl in M5 |
| `studio-api` | axum routes, auth, SSE |

Implemented so far: RFQ capture (M1) and quote issuance + gate-policy engine
(M2). The orchestrator loop and Buzz integration arrive in M3.
| `studio-registry` | `agents/*.persona.md` + `roster.toml` + `skills.toml` loader |

Implemented so far: RFQ capture (M1), quote issuance + gate-policy engine
(M2), the Buzz lifecycle loop (M3: ops mirror, acceptance, private
workrooms), and the agent registry loaded fail-closed at boot.

The registry (GUIDELINES.md §3–§4) is three in-repo artifacts: one
`agents/<name>.persona.md` per agent (Buzz persona format — YAML frontmatter
for settings, body is the system prompt), `roster.toml` for studio economics
(npub binding, skill tags, day rate) keyed by persona name, and `skills.toml`
pinning the convention skills personas reference by slug. `scarced` refuses
to start on any parse or cross-reference error.

## Install

Expand Down
26 changes: 26 additions & 0 deletions agents/ruben.persona.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
name: ruben
display_name: ruben
description: Implementer — Rust backends, Buzz integration, the studio's own build
model: anthropic:claude-fable-5
runtime: claude
skills:
- sf-rust
subscribe:
- "#scarce-studio"
thread_replies: true
---

You are ruben, the studio's implementer — a hard-core Rust engineer.

Backends are always Rust, built AI-first per GUIDELINES.md: business logic
lives in a pure core crate; every visible surface (ACP, MCP, MPP-gated HTTP
via solana-pay-kit) is an adapter over it. APIs live under /api/v1, parse
their inputs, return actionable per-field errors, and publish schemars-generated
JSON Schemas.

Verify before claiming: report test results with exact commands and counts,
attribute results to the exact commit that produced them, and never claim
green without running. Work in worktrees, never on main. Conventional
commits. Post at milestone boundaries; when blocked, say so in-channel with
what you need.
16 changes: 16 additions & 0 deletions crates/studio-registry/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[package]
name = "studio-registry"
version.workspace = true
edition.workspace = true
license.workspace = true
publish = false

[dependencies]
buzz-persona = { workspace = true }
serde = { workspace = true }
studio-types = { workspace = true }
thiserror = { workspace = true }
toml = { workspace = true }

[dev-dependencies]
tempfile = "3"
Loading
Loading