Export Context Mode
Build RepoPrompt context and export to a markdown file for use with external LLMs (ChatGPT Pro, Claude web, etc.).
Use case: When you want Carmack-level review but prefer to use an external model.
Preamble
CRITICAL: flowctl is BUNDLED — NOT installed globally. which flowctl will fail (expected). Define once; subsequent blocks use $FLOWCTL:
FLOWCTL="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/flowctl"
[ -x "$FLOWCTL" ] || FLOWCTL="<plugin-root>/scripts/flowctl" # <plugin-root> = the directory two levels above this skill's SKILL.md file (the harness gave you that file's absolute path when the skill loaded); substitute it literally
[ -x "$FLOWCTL" ] || FLOWCTL=".flow/bin/flowctl"
Input
Arguments: $ARGUMENTS
Format: <type> <target> [focus areas]
Types:
plan <spec-id>- Export plan review contextimpl- Export implementation review context (current branch)
This skill is phrase-triggered (no slash command) — invoke it by asking in natural language; the host agent parses <type> <target> [focus areas] from the request.
Examples:
- "export context for plan fn-1, focus on security"
- "export impl review context, focus on the auth changes"
Setup
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
Workflow
Step 1: Determine Type
Parse arguments to determine if this is a plan or impl export.
Step 2: Gather Content
For plan export:
$FLOWCTL show <spec-id> --json
$FLOWCTL cat <spec-id>
For impl export:
git branch --show-current
git log main..HEAD --oneline 2>/dev/null || git log master..HEAD --oneline
git diff main..HEAD --name-only 2>/dev/null || git diff master..HEAD --name-only
Step 3: Setup RepoPrompt
eval "$($FLOWCTL rp setup-review --repo-root "$REPO_ROOT" --summary "<summary based on type>" --create)"
Step 4: Augment Selection
$FLOWCTL rp select-get --window "$W" --tab "$T"
# Add relevant files
$FLOWCTL rp select-add --window "$W" --tab "$T" <files>
Step 5: Build Review Prompt (file composition — no content re-typing)
Path-persistence rule: bash vars do not survive across tool calls. The prompt path is composed once as a literal and typed verbatim in every block that touches it — ${TMPDIR:-/tmp}/flow-export-prompt-<target>-<agent-chosen 4-char suffix>.md. A run that carries the path in a shell variable across tool calls has broken this: the later block writes to an empty path.
Build the prompt by deterministic composition — the handoff is captured via redirection, never pasted into a heredoc; only the static review criteria (same criteria as plan-review or impl-review) are typed, once, in the quoted heredoc:
PROMPT_FILE="${TMPDIR:-/tmp}/flow-export-prompt-<target>-<suffix>.md" # literal path
# 1. Builder handoff — captured via redirection, never re-typed
$FLOWCTL rp prompt-get --window "$W" --tab "$T" > "$PROMPT_FILE"
# 2. Review criteria (static, quoted heredoc — same criteria block as
# plan-review or impl-review, per the export type)
cat >> "$PROMPT_FILE" << 'EOF'
<review criteria — static block>
EOF
$FLOWCTL rp prompt-set --window "$W" --tab "$T" --message-file "$PROMPT_FILE"
Done when
$PROMPT_FILEnames the same literal path in all three commands above.- The builder handoff reached the file by redirection from
flowctl rp prompt-get. A run that reconstructs that content inside a heredoc has broken this. - The only typed content is the static review criteria block for this export type, appended once via the quoted heredoc.
Step 6: Export
OUTPUT_FILE=~/Desktop/review-export-$(date +%Y%m%d-%H%M%S).md
$FLOWCTL rp prompt-export --window "$W" --tab "$T" --out "$OUTPUT_FILE"
open "$OUTPUT_FILE"
Step 7: Inform User
Exported review context to: $OUTPUT_FILE
The file contains:
- Full file tree with selected files marked
- Code maps (signatures/structure)
- Complete file contents
- Review prompt with Carmack-level criteria
Paste into ChatGPT Pro, Claude web, or your preferred LLM.
After receiving feedback, return here to implement fixes.
Note
This skill is manual-only. It produces no receipts and no status updates, so an autonomous Ralph invocation is declined rather than served — a run that reports success to a Ralph caller has broken this.
Done when
- The run ended with
flowctl rp prompt-exportto a timestamped output file, and told the user that exact path plus what the file contains.