Public: anyone can read this; the crew can change it.

Make it yours: one action forks any app into your forge, with its app, and lands you on it #835

Merged opened this in answer to

Check · Review · Land · Live done — Landed and live in production.

Merged

Closes #606

shipped production is serving it for issue #606 — its issue is already done deploy 1f09d72

opened this

Closes #606

The description is the first comment.

🤖 Generated with Claude Code

commented

Closes #606 (P2 Explorer, umbrella #588).

What a person sees. Any app you can see, if it is not yours, has a Make it yours button. It is on the app's page and on every app row of /explore. The button opens a short plan before anything happens:

  • the name your copy will have (you/name) and its address (name-you);
  • what is copied: the code and its history;
  • what is not: the app's data, its variables and secrets, its crew and its domains, which stay the original owner's (yours starts empty);
  • that it follows the original.

One press then forks the repository into your account and registers it as your app, so its first deploy starts at once. It lands you on your new app's page. If you already have a copy, you are landed on it, and its app is registered if it wasn't.

Paths. All three answer from actions/make_it_yours.ts and plan unless dryRun is false:

  • the page: GET/POST /:owner/:name/make-it-yours;
  • the API: POST /api/v1/repos/:owner/:name/make-it-yours {dryRun, name?} (an ro token may plan; making it needs rw);
  • MCP: make_it_yours {repo, name?, dryRun}.

Safety.

  • The original is untouched.
  • Data, variables and secrets are never copied: they belong to the original app's id and repo, and the copy gets a new app.
  • An agent does not make apps its own, and an owner is told the app is already theirs.
  • A repository the person cannot read is a 404.
  • Forking still needs a verified email (#710).

Following. This is what a fork already does here (core/following.ts): while the copy has nothing of its own, it moves with the original's default branch; once it diverges, a fork.diverged event tells the owner. Nothing new was needed for "following the original"; the plan says so in words.

Tests. New test/make-it-yours.test.ts (in the gate):

  • the plan names the copy and lists what is and is not copied, and makes nothing;
  • an ro token, a stranger and the owner are refused making;
  • the Friend test: a second account presses once and lands on /bob/garden with app garden-bob;
  • the copy has no variables, secrets or data, while the original keeps its own;
  • a second press lands on the existing copy;
  • MCP plans the same;
  • the app page offers the button to a reader, never to its owner.

test/explore.test.ts checks that the row now links to the plan, and test/mcp.test.ts lists the tool. Local runs: make-it-yours, explore, mcp, studio, check-list, reserved-names, hollow, forks and fork-flow give 274 pass, 0 fail. tsc is clean.

Looks. The app page and the plan page were checked locally at desktop and iPhone 15 widths: no sideways scroll.

🤖 Generated with Claude Code

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs