diff --git a/README.md b/README.md index 9896fc2..885b5b2 100644 --- a/README.md +++ b/README.md @@ -422,6 +422,21 @@ ghost sessions # list sessions stored in .ghost ghost setup # optional: pair the device with Ghost Cloud (metadata-only sync; source code never leaves the machine) ``` +**Using OpenCode?** (Mode A — real turn ids, richest context) copy the one-file +adapter into your project, then start `ghost watch` and use OpenCode as usual: + +```bash +mkdir -p .opencode/plugins +curl -o .opencode/plugins/ghost.ts \ + https://raw.githubusercontent.com/arko33/ghostinthecodebase/main/packages/opencode-plugin/index.ts +``` + +The adapter reports `turn.started` (the prompt admission — the authoritative +turn boundary) and `turn.completed` to the local recorder on +`127.0.0.1:5417/events`. No plugin? Recording still works — the filesystem +watcher + runtime probes capture everything from the outside and turns are +marked **estimated, never invented**. + ## 🛠️ Stack
diff --git a/src/components/site/LandingPage.tsx b/src/components/site/LandingPage.tsx index 7dbb87e..c7a1c69 100644 --- a/src/components/site/LandingPage.tsx +++ b/src/components/site/LandingPage.tsx @@ -971,13 +971,18 @@ export default function LandingPage() { }, { n: "02", - t: "Record a real session", - d: "Run ghost watch in your project. Any agent works: the OpenCode plugin streams events live, everyone else is captured from the filesystem + runtime probes.", + t: "Connect OpenCode (Mode A)", + d: "Copy the one-file adapter into .opencode/plugins/ghost.ts - OpenCode then reports every turn boundary to the recorder, so the timeline uses real turn ids.", }, { n: "03", + t: "Record any session", + d: "Run ghost watch in your project. With the plugin installed, turns stream live; with any other agent (Cursor, Claude Code, a human) the filesystem watcher + runtime probes record everything from the outside - turns marked estimated, never invented.", + }, + { + n: "04", t: "Inspect, blame, heal", - d: "Scrub the tape in the playground, read the autopsy verdict naming the turn that broke it, copy the heal prompt to your agent - or roll the file back in one click.", + d: "Scrub the tape in the playground, read the autopsy verdict naming the turn that broke it, copy the heal prompt to your agent - or roll the file back in one click. ghost setup pairs your device for metadata-only sync to Ghost Cloud.", }, ].map((s) => (
diff --git a/src/components/site/Terminal.tsx b/src/components/site/Terminal.tsx index 5f9c423..61f6cd2 100644 --- a/src/components/site/Terminal.tsx +++ b/src/components/site/Terminal.tsx @@ -6,6 +6,7 @@ import { useInView, useReducedMotion } from "./hooks"; const COMMANDS = [ "curl -fsSL https://raw.githubusercontent.com/arko33/ghostinthecodebase/main/packages/ghost/install.sh | bash", + "curl -o .opencode/plugins/ghost.ts https://raw.githubusercontent.com/arko33/ghostinthecodebase/main/packages/opencode-plugin/index.ts", "ghost watch --repo . --app-url http://localhost:3000", "ghost status", ];