Skip to content

feat: add guided setup prompt for coding agents (start.md) - #40

Open
Yohan Lasorsa (sinedied) wants to merge 16 commits into
microsoft:mainfrom
sinedied:start-md
Open

Yohan Lasorsa (sinedied) wants to merge 16 commits into
microsoft:mainfrom
sinedied:start-md

Conversation

@sinedied

Copy link
Copy Markdown

Description

content/start.md is a self-contained, end-to-end setup prompt a coding agent (e.g. GitHub Copilot CLI) can run to go from zero to a customized Rayfin app: it checks prerequisites, installs what's missing, scaffolds the most appropriate template, then customizes with the user through guided questions. Linked from the README "Getting Started" section as an optional path.

Complementary to the existing rayfin-getting-started skill: same routing/handoff philosophy, packaged as one runnable prompt that covers the full flow.

Note: the aka.ms/rayfin/start.md short link will be repointed to the raw GitHub file after this PR merges.

Type of change

  • Bug fix
  • New feature
  • Documentation update
  • Other

Checklist

  • I have read the Contributing Guide
  • My changes follow the existing code style
  • I have tested my changes locally
  • I have updated documentation as needed

AI disclosure

Drafted with GitHub Copilot CLI and reviewed by the author; the prompt was validated against its goals with two independent rubber-duck reviews (GPT-5.5 and Claude).

@sinedied
Yohan Lasorsa (sinedied) marked this pull request as ready for review July 21, 2026 14:25
@sinedied

Copy link
Copy Markdown
Author

aka.ms/rayfin/start.md url has been updated to https://raw.githubusercontent.com/microsoft/rayfin/content/start.md (which should be the URL after merge)

@seanwat-msft

Copy link
Copy Markdown
Contributor

How do we want to consolidate content/start.md with the existing rayfin-getting-started skill so they do not drift? They cover the same project detection, template selection, and in-project handoff flow, and they already differ on the default template and CLI command.

Could start.md be generated from the skill, or could the aka.ms link point directly to the raw skill and move the extra prerequisite and guided-question content there? I think keeping one canonical workflow will make it much easier to carry forward best practices.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a couple of things caught my eye before this ships. the two bigger ones (the existing-app fallback pointing at an unpublished npm package, and the default template routing diverging from the current rayfin-getting-started skill) both feel blocking to me; the rest are smaller polish points. specifics left inline.

Comment thread content/start.md Outdated
Comment thread content/start.md Outdated
Comment thread content/start.md Outdated
Comment thread content/start.md Outdated
Comment thread README.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Delegate scaffolding to the getting-started skill instead of duplicating it.
Step 3 now fetches skills/rayfin-getting-started/SKILL.md and follows it, so the
default template, detection signals and CLI commands have a single source of
truth and can no longer drift between the two entry points.

Fix the stale init command in the skill. There is no public 'rayfin' package
(404), and 'npx @microsoft/rayfin-cli' resolves a 'rayfin-cli' command that does
not exist, exiting 1 with no output. The bin is 'rayfin', so npx needs the
explicit -p form.

Add a PowerShell equivalent for the README one-liner, and drop the 'plan mode'
wording since 'copilot -i' does not enter that mode.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rely on editor and GitHub soft wrapping instead of fixed-width line breaks.
Content is unchanged; only whitespace differs.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The curl one-liner was POSIX-only: PowerShell aliases curl to Invoke-WebRequest,
which rejects those flags, so the step failed on Windows. Ask the agent to fetch
and read the URL with its own web fetch capability instead, which is
cross-platform by construction.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@sinedied

Yohan Lasorsa (sinedied) commented Sep 4, 2026

Copy link
Copy Markdown
Author

and the default template routing diverging from the current rayfin-getting-started skill) both feel blocking to me; the rest are smaller polish points. specifics left inline.

This one have been bothering me too, and since the divergence already happened I've taken another approach: leaning entirety on the rayfin-getting-started skill for step 3, so there's only one source of truth. This creates an indirection though, and while I would prefer having everything at hand in the prompt I think that's the most reasonable choice. We can always think of a way to inline the skill content in start.md (in a CI workflow for example) later.

This solves the divergence, command and templates issues at once and definitely needed given the speed Rayfin is progressing 🙂

I thought about the other option too: directly targeting the SKILL.md and adding the prereqs & customize steps there. It could always be done at a later point if you think that's better, but keeping the skill lean without these steps is best IMHO as it can be composed for cutomized starter workflows (for example in enterprise context).

Note: I've also removed the final links section, as some smaller models tends to load every link they find and end up rotting the context. The built-in docs have everything needed anyways.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

requesting changes on two blockers: the existing-app command in the getting-started skill still fails without --project-name in non-interactive mode, and replies.md looks like an accidentally tracked scratch file. inline comments below, plus a couple of smaller things on the prereqs section.

Comment thread skills/rayfin-getting-started/SKILL.md Outdated
Comment thread replies.md Outdated
Comment thread content/start.md Outdated
Comment thread content/start.md Outdated
@sinedied

Copy link
Copy Markdown
Author

Fixed all remaining blockers and did an extra pass of review to make sure nothing slipped this time, thanks!

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

requesting changes: the PowerShell one-liner on line 40 breaks the documented default Windows path because Windows PowerShell 5.1 splits the fetched prompt at the straight quotes inside start.md. two smaller cross-platform issues inline as well.

Comment thread README.md
Comment thread content/start.md Outdated
Comment thread README.md
> describe what you want to build:
>
> ```bash
> copilot -i "$(curl -sSfL https://aka.ms/rayfin/start.md)"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if curl fails here, command substitution still expands (to an empty string) and copilot gets launched with an empty prompt, so the user lands in an unprimed session instead of the rayfin flow. worth fetching first and gating launch on both success and non-empty content, something like:

prompt=$(curl -sSfL https://aka.ms/rayfin/start.md) && [ -n "$prompt" ] && copilot -i "$prompt"

@sinedied Yohan Lasorsa (sinedied) Sep 8, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd like to push back on this one: splitting the command like this would only catch network failures, but a wrong aka.ms or temp failures return HTML without a 404 or any error. Not sure the catch here is worth the added complexity, keeping the command simple is part of the quickstart appeal IMHO.

Worst case, having an empty starter prompt is harmless as it just start copilot CLI and idle.
I considered doing something like `copilot -i "$(curl -sSfL https://aka.ms/rayfin/start.md || echo 'Error while fetching rayfin starter')", but showing "error" or something alike in a starter command doesn't send a good message for folks just scanning text and it also triggers copilot CLI instead of standing by. I don't think the tradeoff is worth it.

For reference, other frameworks using this "start.md" command just keep the command simple, ie: https://plainframework.com/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The latest updates address my blocking feedback. This looks good to merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants