flfl
Run /fl on a ticket with moflo's three standing considerations loaded first — cross-platform (Rule
SKILL.md.claude/skills/flfl/SKILL.md
GitHub$ARGUMENTS
/flfl — /fl with moflo's standing considerations loaded first
Purpose: run the normal /fl ticket workflow, but seat the three things that break moflo changes before any research, code, or review happens — not after a reviewer catches them.
These are not a preamble to acknowledge and move past. Hold all three for the whole run: research, implementation, tests, /flo-simplify, /verify, and the PR body.
The three considerations
| # | Consideration | What it changes about the work you are about to do |
|---|---|---|
| 1 | Rule #1 — everything ships cross-platform | Linux, macOS and Windows, identically. Audit every edit for: path.join/path.sep over hardcoded separators; fs.realpathSync on both sides of any path comparison; no Foo.ts beside foo.ts; platform EOL; no bash/grep/sed/cat/find shell-outs (use Node fs/spawn); tasklist vs /proc for process checks; shell: true on Windows vs detached on POSIX when spawning; os.tmpdir() and test ports in 40000–44999. Verify against CI's macOS and Ubuntu runs, not just your own OS. |
| 2 | moflo is installed into a destination project | This is a library, not an app. Before writing code, name (a) the consumer surface touched — bin/, src/cli/, .claude/scripts/, hooks, init/, settings/CLAUDE.md generators, anything synced into node_modules/moflo/; (b) the failure mode for someone already on the current version who upgrades — does their .moflo/ state still parse, do their hooks still wire, is a migration needed; (c) the round-trip cost — does this need publish-then-reinstall to take effect. If you cannot name all three, re-scope before writing code. |
| 3 | moflo dogfoods itself | The daemon, hooks, statusline, MCP server and indexer all run from node_modules/moflo/…, not the source tree. A source edit changes nothing for those layers until publish + reinstall + Claude Code restart. Before diagnosing any "X is broken" symptom, establish which copy is actually running — diff bin/ against .claude/ against node_modules/moflo/ first. Expect local flapping: the session-start launcher re-syncs .claude/helpers/ from the installed package, so a local fix to a synced file reverts until published. |
How to run
Restate the three considerations in one line each, mapped to this specific ticket — which surface it touches, which platform risks it carries, whether it needs a publish round-trip. Generic restatement is worthless; if a consideration genuinely does not apply, say so and why.
Invoke the real workflow with the arguments above, unchanged and in full — including every flag (
-sd,-s,-w,-m, …):Skill({ skill: "fl", args: "<the $ARGUMENTS block above, verbatim>" })Follow
/flfrom there./flfladds nothing to the workflow itself — same phases, same gates, same run-mode resolution. Re-check the three at each gate: they most often fail at/flo-simplify(a cross-platform miss) and at the PR body (an unnamed consumer failure mode).
Anti-patterns
| Don't | Do |
|---|---|
Acknowledge the three, then run /fl and never revisit them |
Re-check them at implementation, simplify, and PR |
| Restate them verbatim from this file | Map each to the ticket's actual surface and risk |
Drop or reorder $ARGUMENTS when calling /fl |
Pass the argument string through untouched |
| Verify only on your own OS | Read the macOS and Ubuntu CI runs before claiming green |
| Debug a runtime symptom against the source tree | Confirm which copy is running first |
See Also
.claude/skills/fl/SKILL.md— the workflow this wrapsCLAUDE.md— Rule #1, Rule #2, and the dogfooding section these three condense.claude/guidance/internal/dogfooding.md— required reading before diagnosing runtime symptoms or adding files underbin/