Docs
Getting started
There are four ways in. The hosted app needs an account and gives you the catalog, planner and publishing. The simulator needs nothing but a browser. A self-hosted node gives you the full registry, planner, escrow and MCP server on your own machine. An agent can use a node over MCP. Orders and payouts exist only in the simulator and on a node, and they run in test mode: payments are simulated and no real money moves.
Pick a path
| Path | You need | What is real | Time |
|---|---|---|---|
| Hosted app | A browser and an email address | Accounts, search, planner, publishing, GitHub import, organizations and API tokens. Checkout, orders, earnings and funded builds are coming soon. | 5 minutes |
| Simulator | A browser | The planner and escrow rules, running client-side on sample items with play money. | 2 minutes |
| Your own node | Python 3, git, a terminal | Everything in the repository: ledger, registry, planner, escrow (test mode), projects, MCP. | 10 minutes |
| An agent over MCP | An MCP-capable agent, plus a token (hosted) or a node | The same tools the CLI uses, called by the agent. Hosted app and node. | 5 more minutes |
Path 1: the hosted app
The app at /app/ is open for use. It is a catalog, planner and publishing platform. You cannot buy anything there yet: checkout, orders, earnings and funded builds are coming soon, and their screens are placeholders today. Payments are in test mode, so no real money moves anywhere. The app's interface is in English.
Create an account
- Open /app/signup. Choose a handle of 2 to 39 characters: lowercase letters, digits and single hyphens. It becomes your public address,
/app/HANDLE. Handles that start withreuseforgeorrepoblockare reserved. - Enter an email address and a password of at least 10 characters, then accept the Terms. If GitHub sign-in is switched on for the deployment, the page also offers Sign up with GitHub. It never merges into an existing account by email: if the address is taken, sign in with your password and connect GitHub under Settings, Connections.
- Verify your email address when the message arrives. You need a verified address to publish a paid listing, not a free one.
- Optional: turn on two-factor authentication (an authenticator app) under Settings, Security.
Search and plan
Explore searches every public listing. Filter by kind, price, rating, capability, licence and tag, and sort by best match, trending, stars, downloads, newest, recently updated, rating or price. The address bar holds the whole query, so you can share a search as a link.
Plan a build runs the planner on that catalog.
- Describe the goal in up to 500 characters and enter a budget in US dollars.
0means free listings only; empty means no limit. - The page shows the needs it recognised. Remove one or add one from the menu, and the plan updates.
- Read the recommended plan, swap any part from the menu under its name, and compare the other plans on the cost against fit chart.
- Copy the Agent brief into your coding agent. If the plan uses MCP servers, copy the generated
.mcp.jsontoo, and read each command before approving it. Copy link to this plan shares the goal, budget and needs as a URL.
The planner reads English words and a list of Simplified Chinese terms, so a goal in another language needs translating first. The Checkout button leads to a placeholder page, because checkout is coming soon.
Publish or import an item
Use Publish for a listing you describe yourself, or Import from GitHub to build one from a public repository. Fields, limits and the API calls are in Selling an item. Your dashboard shows views, downloads and stars for 30 days.
Create an API token
Open Settings, API tokens and choose a name, the scopes and an expiry.
| Scope | Allows |
|---|---|
read | Read your private items, collections and account data. |
write | Publish and edit items, versions, reviews and discussions as you. |
orders | For orders and purchases, which are coming soon. No orders exist yet, so it unlocks nothing today. |
admin | The admin API. Offered to admin accounts only. |
Expiry runs from 7 days to 1 year, or none. The token, which starts with rf_, is shown once. You can hold 50 active tokens. Tokens act within their scopes, but only a browser session can change your password, email, sessions or tokens.
export REUSEFORGE_TOKEN=rf_...
curl -H "Authorization: Bearer $REUSEFORGE_TOKEN" https://reuseforge.com/api/me
curl "https://reuseforge.com/api/items?q=invoice&kind=skill&per_page=5" # search needs no token
curl -X POST https://reuseforge.com/api/items/import \
-H "Authorization: Bearer $REUSEFORGE_TOKEN" -H "Content-Type: application/json" \
-d '{"url":"https://github.com/owner/repo"}'A 403 insufficient_scope means the token lacks the scope for that call. A 401 means it expired or was revoked. Errors always have the shape {"error": {"code", "message"}}, and lists return {"results", "total", "page", "per_page"} with at most 50 per page.
Organizations
Create one at /app/orgs/new. You can create up to 10. Invite people by handle or email (an invitation lasts 14 days). Roles: owner can do everything including deleting the organization, admin manages members, settings and items, write publishes and edits items, read sees private items. Items an organization owns live at /app/ORG/SLUG, and members with write access pick the organization in the Publish as menu.
Stars, reviews and collections
Signed-in users can star a listing, write one review of 1 to 5 stars (not on their own listing), open discussions, follow accounts, and group listings into collections. Reports about a listing go to the admins.
API and SDKs
The app talks to the platform endpoints under /api/, which the token examples above use. A versioned API at /api/v1/ is defined in the API reference and in api/openapi.yaml. On the hosted app it serves identity, tokens, items, versions, plans, webhooks and metadata. Its order, payout, earnings, funded-build and ledger operations answer 501 not_implemented while those features are coming soon. A self-hosted node serves the same contract, including orders and funded builds in test mode (see docs/API.md). The JavaScript SDK (sdk/js, package @reuseforge/sdk) and the Python SDK (sdk/python, package reuseforge) are generated from the same contract. Both are version 0.1.0 and live in the repository, so use them from a clone. They read REUSEFORGE_TOKEN and default to https://reuseforge.com/api/v1.
import { ReuseForge } from './sdk/js/src/index.js';
const rf = new ReuseForge(); // token from REUSEFORGE_TOKEN
console.log(await rf.getMe()); // GET /api/v1/meThe Python client has the same methods in snake case, for example reuseforge.Client().get_me() once sdk/python is on your path.
Not available on the hosted app yet
- Coming soon: checkout, orders, escrow, earnings and payout addresses. The pages exist as placeholders, and nothing on them moves money.
- Coming soon: funded builds (crowdfunding). A link to start one, such as the one in a plan, leads to a placeholder.
- The order, payout, earnings, funded-build and ledger operations of
/api/v1/, and the MCP tools that wrap them. They answernot_implemented. - An installed
reuseforgecommand line tool. Its source is in the repository (cli/, version 0.1.0); run it from a clone.
Path 2: try the simulator
Open the simulator. It runs in your browser against a bundled sample of free open-source items and a few paid items labelled DEMO.
- Type a goal, for example RAG chatbot over my PDF invoices with a dashboard and crypto checkout, and set a budget in USD.
- Read the recommended plan and the other plans on the Pareto front. Lower the budget and watch the plan change.
- Review the basket of paid items and step through the escrow: deposit, seller delivery, accept or dispute.
The simulator is a simplification. A dispute there refunds immediately. On a real node an arbiter decides whether to release or refund. See Disputes and refunds.
Path 3: run your own node
A node keeps a signed event log, folds it into a registry of items (called blocks in the node, so its commands, routes and JSON fields say block), plans goals, runs escrow and serves a JSON API and a small web UI. Escrow uses the simulated rail unless you pick another, so by default no real money moves. The Python package is still called repoblock, the project's former name.
git clone https://github.com/Longfordjames/Claude-1.git reuseforge
cd reuseforge
pip install -r requirements.txt # the only dependency is cryptography
python -m repoblock seed # example blocks; paid ones are labelled DEMO
python -m repoblock plan "RAG chatbot over my PDF invoices with a dashboard and crypto checkout" --budget 50The last command prints the requirements it found and the recommended plan as JSON. Add --online to also search GitHub, the MCP registry, arXiv and Hugging Face for items the network does not have yet.
The built-in keyword planner reads English words and a list of Simplified Chinese terms. For a goal in another language, translate it first or add --llm to let Claude split the goal.
python -m repoblock serve # web UI and API on http://127.0.0.1:8420
python -m repoblock sync http://other-node:8420 # exchange events with another node
python -m unittest discover -s tests # run the test suiteKeep it on loopback unless you set a token. By default a node listens on 127.0.0.1 and owner endpoints (publish, orders, projects, sync) only answer to loopback clients. To listen on a public address you must pass --admin-token <secret>; owner endpoints then need Authorization: Bearer <secret>. Reads and event sync stay open.
A running node holds its ledger in memory. Events you add with the CLI (publish, verify) are not seen until you restart it. Use POST /api/blocks against the running node, or restart after CLI writes.
Command reference
Global options come before the command: --home DIR (data directory, default ~/.repoblock or $REPOBLOCK_HOME) and --rail mock|usdc-base|usdt-ethereum|btc (default mock).
| Command | What it does |
|---|---|
seed | Publish the bundled example items. |
plan "goal" --budget N [--online] [--llm] | Plan a goal. --llm splits the goal with Claude instead of the keyword taxonomy (needs pip install anthropic and credentials). |
search "query" | Search items. Prints score, id, price, kind, name, URL. |
publish file.json [--as NAME] | Sign and publish an item from a JSON file. See Selling an item. |
serve [--host H] [--port P] [--admin-token T] | Run the node. Port 8420 by default. |
sync URL | Pull and push ledger events with a peer. |
brief "goal" --budget N | Print a build brief for the parts of a goal that must be built. |
verify BLOCK_ID [--cmd "..."] | Clone the item, run its tests, record a signed attestation. Read the sandbox warning first. |
connectors [presets|enable NAME] | List item sources, show the MCP preset catalogue, enable a discovery source. |
mcp-config "goal" | Print the .mcp.json fragment an agent needs for a goal. |
figma URL | Import a Figma file as a design item. Needs FIGMA_TOKEN. |
projects, portfolio [--as NAME] | List crowdfunded builds; show an identity's stakes and dividends. |
whoami | Print the node's public id. |
mcp | Run as an MCP server on stdio. |
Environment variables
| Variable | Effect |
|---|---|
REPOBLOCK_HOME | Data directory: ledger.jsonl and keys/. |
REPOBLOCK_FEE_BPS | Network fee in basis points. Default 100, which is 1%. The node refuses to start with a value above 1000 (10%). |
REPOBLOCK_FEE_ADDRESS | Where fees are paid. Default: the node's own id. |
REPOBLOCK_ESCROW_ADDRESS | The address buyers are told to pay. |
REPOBLOCK_RPC_URL | JSON-RPC endpoint used to verify USDC and USDT deposits. |
REPOBLOCK_CONNECTORS | Path to a connectors.json listing extra MCP item sources. |
GITHUB_TOKEN, HF_TOKEN | Optional. Raise rate limits for GitHub and Hugging Face discovery. |
FIGMA_TOKEN | Needed by figma import. |
Your keys live in $REPOBLOCK_HOME/keys/NAME.pem, unencrypted, mode 600. Back them up like any signing key. Anyone who has one can act as that identity.
Let an agent use it
ReuseForge is also an MCP server, on the hosted app and on a node, so an agent can search items and plan a goal. On a node it can also run the escrow steps, in test mode.
Hosted server. Point an MCP client that supports Streamable HTTP at https://reuseforge.com/mcp. Without a token you get the public search, plan and discover tools. Send Authorization: Bearer rf_..., with a token from API tokens, to also see the tools your scopes allow, such as create_item and publish_version. Clients that sign in with OAuth (claude.ai custom connectors, Claude Desktop, Cursor) use https://reuseforge.com/mcp/auth instead. Each tool call runs through the same pipeline as /api/v1/, so limits and errors match. The order and funded-build tools are listed but answer not_implemented: those features are coming soon.
A node offers two transports.
Stdio. The agent starts the server itself. Add this to your project's .mcp.json, with the path to the folder you cloned:
{
"mcpServers": {
"reuseforge": {
"command": "python",
"args": ["-m", "repoblock", "mcp"],
"env": { "PYTHONPATH": "/path/to/reuseforge" }
}
}
}HTTP. A running node answers MCP at POST /mcp. Read tools are open. Write tools need the node's admin token as a bearer token, or, when no token is set, a request from the same machine.
{
"mcpServers": {
"reuseforge": {
"type": "http",
"url": "http://127.0.0.1:8420/mcp"
}
}
}These are the tools of a node's MCP server:
| Tool | Access | Use |
|---|---|---|
search_blocks, get_block | Read | Find items; fetch one by id with link, licence, price and seller. |
plan_goal | Read | Goal and optional budget_usd in, Pareto plan out. |
discover_external | Read | Query GitHub, the MCP registry, arXiv, Hugging Face and your configured servers. |
build_brief, mcp_config, list_connectors | Read | Brief for the parts to build; the MCP servers the plan needs; available sources. |
list_projects, get_project, portfolio | Read | Crowdfunded builds and stakes. |
create_order, pay_order, accept_order | Write | Escrow steps in test mode. pay_order deposits on the simulated rail. |
back_project, vote_milestone | Write | Pledge to a build; approve or reject a delivered milestone. |
The node's server also offers resources (repoblock://blocks, repoblock://projects, repoblock://block/{id}) and a prompt, assemble_goal. The prompt tells the agent to plan, fetch the free parts, create an order for paid ones, ask you before paying, build what is missing, and ask you before accepting. Keep that human confirmation in your agent's settings: accepting a delivery is what releases the money (play money, while payments are in test mode).
To see which third-party MCP servers (Figma, Stripe, Playwright and others) suit a goal, run python -m repoblock mcp-config "your goal". Presets marked check URL in connectors presets have not been confirmed against the live server.
Last updated: