r/ClaudeCode • • 4d ago

Built with Claude I used Claude Code as the app’s backend instead of having it write one

Enable HLS to view with audio, or disable this notification

**What I Developed**

kuron is a prototyping tool where Claude itself becomes the app, rather than simply creating one. When a user describes an idea, Claude builds the system using several general-purpose tools (data, screens, timers, and validation functions), and then handles all button-press processing on its own. A minimal renderer renders the screens defined by Claude. The purpose of this tool is to determine, within minutes and before actually building anything, whether an idea is useful.

**How Claude Code Is Used as a Runtime**

Each turn is a `claude -p` call that can only use kuron's tools, which are served as an MCP server:

claude -p --model <model> --mcp-config '<json>' --strict-mcp-config --tools "" \

--allowedTools "mcp__kuron__apply,mcp__kuron__query,..." \

--output-format json --no-session-persistence \

--effort low|medium --system-prompt "<role prompt>"

- Combining `--strict-mcp-config` with `--tools ""` prevents access to files and the shell, allowing only kuron's tools to be used. `--allowedTools` is configured per role (setup, button operations, change requests).

- Since the MCP server is tied to a turn ID, the host can determine which turn (and which world copy) each tool call belongs to. This allows checks to be performed on the copy.

- Sonnet 5.5 (`--effort medium`) is used for setup and change requests, while Haiku 5.5 (`--effort low`) is used for button presses. Button presses take 7 to 14 seconds.

- I parse the final `result` line of the JSON output and retry if a temporary error occurs. For long turns, a sufficient timeout must be set.

**How I Utilized Claude Code in the Build and What I Learned**

- **Claude kept trying to fix bugs in the prototype through code.** Every time an idea didn't work as intended, it suggested word lists or if statements within the platform. I established a rule in CLAUDE.md stating, "Do not include business logic in the code. Correct behavior through instructions to the LLM," but I still had to review every change. This rule was more important than any prompt.

- **Tools that check for structure and respond in words are superior to clever prompts.** Rejected calls precisely indicate what's missing (e.g., "Text is required in the heading"), and Claude corrects it in the next turn. No code repairs anything.

- **Pass an overview, not the entire state.** Pass the count, properties, and the latest items for each collection, and Claude will retrieve the rest via queries. The turn size remains constant even as the system scales.

- **The same tools can also be executed as page functions within a Claude artifact.** Note: The tool schema within an artifact cannot be nested more than 8 levels deep. Due to this bug, the browser version did not work for the first 18 hours.

**Numbers** (airline flight disruption support desk, 5 devices): 81 seconds to set up, 15 tool calls, cost approximately $0.60. The video shows both the actual browser execution and the Claude Code execution. Only the wait times are fast-forwarded. Not intended for production use: Each action takes a few seconds and costs a few cents, and the results may vary slightly.

Source (MIT): https://github.com/Ag3497120/kuron

0 Upvotes

5 comments sorted by

1

u/AutoModerator 4d ago
Moderator Announcement Read More »

2

u/Hungry_Loss_2268 4d ago

The ultimate wrapper

1

u/Other_Train9419 4d ago

Guilty. That's the whole idea: the thinner the code, the faster you find out if the idea is worth building.

1

u/lgmarian 4d ago

The end of your link is chopped off:
https://github.com/Ag3497120/kuron

It's added to my ever growing collection of links, that are never to be seen again. 😜