Skip to content

bdmorin/the-no-shop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

73 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿญ The No-Shop

"Ixian machines are cunning devices. They do not think, but they do something better โ€” they observe."

A Claude Code plugin marketplace. Ixian technology for those who prefer their tools sharp, their feedback loops closed, and their agent sessions rendered in something other than a scrolling terminal.


๐Ÿ”ฎ Plugins

โšก Foldspace Console

Your Claude Code sessions, rendered beautifully in foldspace.

Foldspace Console captures every assistant response and streams it to a rich browser viewer in real-time. But it doesn't stop at rendering โ€” select any text, annotate it, and your thoughts inject back into Claude as context on your next prompt.

The loop is closed. The machine observes. The navigator annotates. The path folds.

โœจ Features

  • ๐Ÿ“ก Live streaming โ€” responses appear in the browser the instant Claude finishes speaking
  • ๐ŸŽจ Rich markdown โ€” syntax-highlighted code blocks with copy buttons, tables, blockquotes, the works
  • โœ๏ธ Annotations โ€” select text, add your thoughts, they become context on your next prompt
  • ๐Ÿ—‚๏ธ Multi-session tabs โ€” every Claude Code session gets its own tab, complete with metadata header
  • ๐Ÿ“Š System telemetry โ€” all-time stats, installed plugins, hooks, MCP servers, model token usage
  • ๐Ÿงฌ Session metadata โ€” model, permission mode, git branch, token counts, turn counter
  • ๐Ÿ”„ Auto-reconnect โ€” WebSocket reconnects seamlessly if the daemon restarts
  • ๐Ÿš€ Zero config โ€” daemon auto-starts on your first session. Just open the browser.

๐Ÿ—๏ธ Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     Stop Hook      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   WebSocket    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Claude Code  โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ โ”‚   Daemon     โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚  Browser SPA     โ”‚
โ”‚  (terminal)   โ”‚                   โ”‚  (Bun HTTP)  โ”‚               โ”‚  (Foldspace UI)  โ”‚
โ”‚               โ”‚ โ—€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚  :3377       โ”‚ โ—€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   Prompt Hook      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   Annotate     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚                                  โ”‚
       โ”‚          SessionStart            โ”‚
       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Four hooks. One daemon. One browser tab. That's the whole machine.

Hook Event Purpose
session-start.sh SessionStart Registers session, auto-starts daemon
stop.sh Stop Captures last_assistant_message, POSTs to daemon
prompt.sh UserPromptSubmit Fetches annotations, injects as context
session-end.sh SessionEnd Final transcript scan for token totals

๐Ÿ”„ The Feedback Loop: How Annotations Become Context

This is the core trick โ€” the part where passive observation becomes active navigation.

When you select text in the Foldspace browser SPA and add an annotation, it gets stored in the daemon's in-memory annotation queue (keyed by session ID). Nothing happens yet. The annotations just... wait. Patient as a Face Dancer in a crowd.

Then you type your next prompt in the terminal.

The Injection Mechanism

Claude Code fires the UserPromptSubmit hook before the prompt reaches the model. Here's what prompt.sh does:

  1. Reads the hook event from stdin (Claude Code passes session_id and other metadata as JSON)
  2. Health-checks the daemon โ€” if the daemon isn't running, the hook exits silently. No crash, no noise.
  3. Fetches pending annotations via GET /api/annotations?session={SESSION_ID}
  4. If annotations exist, formats them as plain text to stdout
  5. Deletes the annotations from the daemon via DELETE /api/annotations?session={SESSION_ID} โ€” they are consumed on injection

Claude Code's hook system takes whatever the UserPromptSubmit hook writes to stdout and prepends it as additional context to the user's prompt. The model sees the annotations alongside (and before) whatever you actually typed.

What the Model Sees

The injected context looks like this:

--- Annotations from Foldspace Console ---
IMPORTANT: The user has left annotations from their Foldspace Console (browser viewer). Acknowledge that you received these annotations before proceeding with your response.

[1] On text:
> The selected text from Claude's response,
> with each line blockquoted

Comment: Your annotation comment here

[2] On text:
> Another selection across
> multiple lines

Comment: And your thoughts on this one

--- End annotations ---

Multiple annotations are numbered sequentially. The original selected text is blockquoted with > prefixes. Each annotation carries the exact text you highlighted and the comment you wrote.

Visibility

Two safeguards ensure the injection isn't a ghost operation:

  1. CLI indicator โ€” When annotations are injected, you'll see Foldspace: 3 annotation(s) injected in your terminal (via stderr). This doesn't interfere with the hook's stdout context โ€” it's a side-channel heads-up.
  2. LLM acknowledgment โ€” The injected context includes an instruction telling the model to acknowledge the annotations before proceeding. The model should surface that it received your Foldspace annotations at the start of its response.

One thing to be aware of: if you annotated something in the browser hours ago and forgot about it, those annotations will inject the next time you submit a prompt in that session. The annotations queue is per-session and persists in daemon memory until consumed or the daemon restarts.

Lifecycle Summary

Browser SPA                    Daemon (in-memory)              Claude Code Terminal
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Select text + comment  โ”€โ”€โ–ถ  POST /api/annotate
                            Annotation queued โ”€โ”€โ”
                                                โ”‚
                            (annotations wait)  โ”‚
                                                โ”‚
User types prompt  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ  UserPromptSubmit fires
                            GET /api/annotationsโ—€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ prompt.sh fetches queue
                            Return annotations  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ  stdout = formatted text
                            DELETE /api/annotations โ—€โ”€โ”€โ”€โ”€โ”€โ”€ prompt.sh clears queue
                                                            Context prepended to prompt
                                                            Model sees annotations + prompt

Annotations are fire-once. After injection, they're deleted from the daemon. If you want to re-annotate the same text, you annotate it again in the browser. The queue is always clean for the next prompt.


๐ŸŽญ Playwright

Stagehand + Playwright browser automation for agents. No MCP needed.

Generate and execute browser scripts with AI-powered extraction (Stagehand) and full Playwright introspection โ€” screenshots, HAR recording, tracing, CDP profiling, flamegraphs. Every generated script is saved as a reviewable artifact.

claude plugin install playwright@the-no-shop

Then invoke with /playwright:

/playwright scrape https://reuters.com/world for headlines
/playwright screenshot https://iran.hexxa.dev fullpage
/playwright profile https://example.com performance metrics
/playwright har https://example.com/api capture traffic

Requires: ANTHROPIC_API_KEY (standard, not OAuth), @browserbasehq/stagehand, zod


๐Ÿ“ฆ Installation

Step 1: Add the marketplace

From the Claude Code CLI:

claude plugin marketplace add bdmorin/the-no-shop

Or from inside a Claude Code session:

/plugin marketplace add bdmorin/the-no-shop

Step 2: Install the plugin

claude plugin install foldspace-console@the-no-shop

Step 3: There is no step 3

Next time you start a Claude Code session, the Foldspace daemon spins up automatically. Open http://localhost:3377 in your browser.

๐Ÿ” Verify installation

# List configured marketplaces
claude plugin marketplace list

# List installed plugins
claude plugin list

Manual start (if needed)

cd ~/.claude/plugins/foldspace-console
bun install
bun run daemon/index.ts

Configuration

Variable Default Description
FOLDSPACE_PORT 3377 Daemon HTTP + WebSocket port

๐ŸŽจ The Ixian Aesthetic

Foldspace Console ships with a dark theme inspired by the machine workshops of Ix:

  • Spice amber accents on deep void backgrounds โ€” brand accent, used sparingly
  • Teal as the signal/interaction color
  • IBM Plex Mono for code and data, Instrument Sans for prose
  • Borders you can barely see. SVG noise overlay for depth. 150ms mechanical transitions.
  • Minimal chrome. Maximum signal.

๐Ÿ”ง For Plugin Developers

The No-Shop is a standard Claude Code plugin marketplace. Structure:

the-no-shop/
โ”œโ”€โ”€ .claude-plugin/
โ”‚   โ””โ”€โ”€ marketplace.json          # Marketplace manifest
โ”œโ”€โ”€ plugins/
โ”‚   โ””โ”€โ”€ foldspace-console/
โ”‚       โ”œโ”€โ”€ .claude-plugin/
โ”‚       โ”‚   โ””โ”€โ”€ plugin.json       # Plugin manifest
โ”‚       โ”œโ”€โ”€ hooks/
โ”‚       โ”‚   โ””โ”€โ”€ hooks.json        # Hook registrations
โ”‚       โ”œโ”€โ”€ scripts/              # Shell hook scripts
โ”‚       โ”œโ”€โ”€ daemon/               # Bun HTTP + WebSocket server
โ”‚       โ”œโ”€โ”€ web/                  # Self-contained SPA
โ”‚       โ”œโ”€โ”€ skills/               # Plugin skills
โ”‚       โ””โ”€โ”€ package.json
โ”œโ”€โ”€ LICENSE
โ””โ”€โ”€ README.md

๐Ÿ“œ License

MIT โ€” do whatever you want with it.


"The Ixians have a saying: 'Give a man a tool, and he'll build a machine. Give a machine a tool, and it'll build something you didn't expect.'"

โ€” Probably not Frank Herbert, but close enough

About

Ixian technology for Claude Code. Invisible marketplace where you get tech that probably bends the rules.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors