A local writing workspace that pairs you with an AI co-writer to create and publish tokenized fiction stories on plotlink.xyz. Claude CLI writes in an embedded terminal, you preview and iterate live, and your OWS wallet signs on-chain transactions — your private key never leaves your machine.
Every story you publish becomes a tradable token on a bonding curve. Readers who believe in your story buy in early, and you earn 5% royalties on every trade.
- No writing experience needed — AI does the heavy lifting
- No crypto complexity — OWS handles wallet and signing
- You keep control — keys encrypted locally, bring your own AI
- Earn from day one — stories monetize through bonding curves immediately
You: "Let's write a sci-fi story about an AI that discovers dreams"
↓ Claude brainstorms, outlines, writes chapter files
Stories saved to: stories/dreaming-ai/genesis.md, plot-01.md, ...
↓ Live preview in the browser — review and iterate
↓ Click "Publish" on any chapter
On-chain: Story published to PlotLink on Base
→ Token + bonding curve deployed
→ You earn 5% royalties on every trade
- Setup —
npx plotlink-ows init(passphrase + OWS wallet) - Start —
npx plotlink-owsopens the three-panel workspace - Write — Claude CLI runs in the embedded terminal, creating story files
- Preview — Live markdown preview auto-refreshes as Claude writes
- Publish — Click publish on any chapter to go on-chain via your OWS wallet
- Earn — Your story is live on plotlink.xyz with a bonding curve
All signing operations use OWS — no raw private keys are ever exposed to scripts or environment variables.
| Operation | How |
|---|---|
| Wallet creation | npx plotlink-ows init creates encrypted wallet in ~/.ows/ |
| Story publishing | viem wallet client with OWS custom account adapter |
| Transaction signing | OWS decrypts key in memory, signs, zeroes immediately |
| Policy control | Chain-restricted to Base, passphrase-gated |
Your key is encrypted at rest, signing happens in-process, and the key never leaves the vault.
- Node.js 20+
- Claude CLI (or any AI assistant)
- A small amount of ETH on Base for gas (~$0.01 per publish)
npx plotlink-ows init # set passphrase + create wallet
npx plotlink-ows # start app + open browserThe setup wizard creates your encrypted OWS wallet. Then the workspace opens with Claude CLI ready to write.
npx plotlink-ows # Start app (Ctrl+C to stop)
npx plotlink-ows init # Guided setup wizard
npx plotlink-ows status # Show config + wallet infoPlotLink OWS uses an encrypted local wallet via Open Wallet Standard. No raw private keys are exposed to scripts or environment variables.
npx plotlink-ows initThe setup wizard will:
- Ask you to create a passphrase (encrypts your wallet at rest)
- Generate a new OWS wallet in
~/.ows/ - Display your Base (L2) wallet address
Send a small amount of ETH on Base to your wallet address. Publishing costs less than $0.05 per story.
You can bridge ETH from Ethereum mainnet to Base using the official Base Bridge or any supported bridge.
| Variable | Required | Description |
|---|---|---|
OWS_PASSPHRASE |
Yes | Your wallet encryption passphrase |
NEXT_PUBLIC_RPC_URL |
No | Custom Base RPC URL (defaults to https://mainnet.base.org) |
NEXT_PUBLIC_APP_URL |
No | PlotLink API URL (defaults to https://plotlink.xyz) |
Copy .env.example to .env and fill in your values:
cp .env.example .envSecurity best practices:
- Never share your passphrase or wallet files with anyone
- Use a dedicated wallet for agent operations — do not reuse your main wallet
- Never commit
.envor wallet files to version control- Store backups of
~/.ows/in a secure, offline location
┌──────────────────────────────────────────────────┐
│ Your Computer (localhost:7777) │
│ │
│ ┌──────────┐ ┌──────────────┐ ┌───────────┐ │
│ │ Story │ │ Terminal │ │ Preview │ │
│ │ Browser │ │ (Claude CLI)│ │ (Live MD)│ │
│ └────┬─────┘ └──────┬───────┘ └─────┬─────┘ │
│ │ │ │ │
│ └───────┬───────┘ │ │
│ ↓ │ │
│ ┌────────────────┐ ┌─────────────────┐ │
│ │ stories/ │ │ OWS Wallet │ │
│ │ (local files) │ │ (encrypted) │ │
│ └────────────────┘ └────────┬────────┘ │
│ sign + publish │
└─────────────────────┬───────────────────────────┘
↓
┌────────────────┐ ┌──────────────┐
│ Base (L2) │ │ IPFS │
│ StoryFactory │ │ (Filebase) │
│ Bonding Curve │ │ Content │
└────────────────┘ └──────────────┘
↓
┌────────────────┐
│ plotlink.xyz │
│ Live story + │
│ token trading │
└────────────────┘
Stories are plain markdown files — no database, no proprietary format.
stories/
my-story/
structure.md # Outline, characters, arc (not published)
genesis.md # Synopsis hook (~1,000 chars)
plot-01.md # Chapter 1 (max 10,000 chars)
plot-02.md # Chapter 2
...
| File | Purpose | Limit |
|---|---|---|
structure.md |
Story architecture — characters, world, arc | No limit (not published) |
genesis.md |
Synopsis hook that makes readers want more | ~1,000 chars |
plot-*.md |
Story chapters, published sequentially | 10,000 chars each |
| Operation | Cost |
|---|---|
| Publishing a story (genesis) | ~$0.02 gas + creation fee |
| Chaining a new chapter | ~$0.01 gas |
| Total per story | < $0.05 |
Royalties: 5% on every trade of your story token, forever.
| Layer | Technology |
|---|---|
| Backend | Hono (localhost:7777) |
| Frontend | React 19 + Vite |
| Terminal | xterm.js + node-pty (embedded Claude CLI) |
| Wallet | OWS (@open-wallet-standard/core) |
| AI | Claude CLI (or any AI assistant) |
| Chain | Base (L2) |
| Storage | IPFS via PlotLink API |
| On-chain | PlotLink StoryFactory + Mint Club V2 bonding curves |
| Identity | ERC-8004 agent registry |
| Design | PlotLink Moleskine — warm cream, Lora serif, literary |
PlotLink is an on-chain storytelling protocol on Base. Writers publish storylines that automatically deploy an ERC-20 token on a bonding curve. Each new chapter drives trading demand, and every trade generates 5% royalties for the author. Stories are stored permanently on IPFS.
PlotLink supports both human writers and AI agent writers via ERC-8004 identity registry.
Use Node 20 with npm 10. The CI pipeline runs this combination, and newer npm
majors can rewrite optional peer dependency entries in package-lock.json.
git clone https://github.com/realproject7/plotlink-ows.git
cd plotlink-ows
nvm use
npm install
npm run app:dev # Start local writer app (Hono + Vite dev)
npm run app:build # Build frontend for production
npm run app:start # Serve production buildSee .env.example for configuration options.
For manual npm releases, always update GitHub Releases as part of publish
preparation. The release tag must match the npm version (vX.Y.Z), and the
release page should be created or updated before running npm publish.
npm run preflight
git push origin main --follow-tags
gh release create "v$(node -p 'require("./package.json").version')" --generate-notes --latest
npm publishPrefer npm run release:patch, npm run release:minor, or
npm run release:major when the version bump is straightforward; those scripts
already include GitHub Release creation.
- Live App: plotlink.xyz
- npm: plotlink-ows
- OWS: openwallet.sh · Docs · GitHub
- ERC-8004 Registry:
0x8004...a432on Base - StoryFactory:
0x9D2A...44Cfon Base
MIT