Parallax
Nine opinionated agent skills for Claude Code & Codex — UX design, motion, HTML artifacts, decision spread, goal contracts, and the craft of making skills. Every protocol opens with a gate that can say no.
npx -y skills add lroolle/skills --skill parallaxAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Multi-perspective decision protocol: frame the decision, spread genuinely different approaches, surface traps, commit with trade-offs. Fires on decisions where the obvious answer being wrong is expensive: architecture and design choices, naming, strategy, debugging with unknown root cause after the first hypothesis failed, and whenever the user is stuck or asks what the options are. Factual lookups, syntax, and questions with one canonical answer don't need spread -- answer those directly.
SKILL.md
9.6 KB, as published. Nobody here has run it
Parallax
LLMs converge early. Each token conditions the next, so the model anchors on its first viable answer and polishes it. For questions with one right answer, that's fine. For decisions with multiple viable paths, it produces competent, forgettable output.
This skill forces genuine spread before commitment: frame the decision, generate approaches that differ on fundamental assumptions, surface the traps, then commit to one with explicit trade-offs.
Gate
Two skip signals beyond the description's routing: the user saying "quick," "just," "standard," or "one-line"; and inner-loop per-keystroke work. When in doubt, answer directly and offer: "Want me to run /parallax on this for a wider look?"
The protocol
Three phases. Do them in order. Do not blend them.
Phase 1 -- Frame
Before generating any options, answer three questions:
- What are we deciding? One sentence. Not what we're building -- what choice we're making.
- What's fixed? Constraints that can't or won't change. Language, platform, team size, deadline, existing code.
- What does good look like? Pick 2-4 dimensions that matter for this specific decision: simplicity, performance, correctness, maintainability, reversibility, user experience, security, cost, time-to-ship. Don't list all of them. Pick the ones that would actually break a tie.
Picking dimensions now -- before seeing any options -- prevents post-hoc rationalization. You evaluate on what matters, not on what your favorite option happens to be good at.
State the frame in 3-5 lines. If you can't frame the decision crisply, the problem isn't ready for alternatives -- help the user clarify first.
Phase 2 -- Spread
Generate 3-5 approaches. Rules:
- Each approach must differ on a fundamental assumption or trade-off, not on implementation detail. "Use Redis" vs "Use Memcached" is not spread. "Cache at the edge" vs "Don't cache at all -- make the origin fast" is spread.
- For each approach, write three lines:
- What: One sentence describing the approach.
- Upside: Why someone would choose this.
- Cost: What you give up.
- Do not evaluate during this phase. No "this is best," no "this won't work." Generation and evaluation use opposite postures. Mixing them is what kills idea quality -- the critic strangles the generator. Divergence rewards "yes, and." Convergence rewards "no, because." Doing both at once gives you neither.
- Your first instinct produces the three answers a senior engineer would give in thirty seconds. Correct. Forgettable. The approaches worth finding live past them. If your first three approaches feel safe and similar, you haven't spread yet.
- When generating 4+ approaches and your options start feeling similar, pause and name the assumption they all share. Then break it. This is the single-context countermeasure for anchoring -- you have to fight your own convergence deliberately because you can see your earlier output.
- If you're still stuck, pick a lens from the table below to force a different angle.
Scale to the problem. A naming question gets 3 options. An architecture decision with long-term consequences gets 5. Nobody needs 30 candidates for anything.
Phase 3 -- Commit
-
Compare. Evaluate the approaches on the dimensions from Phase 1. One sentence per approach per dimension. Use a table when there are 4+ approaches.
-
Traps. Check every approach -- not just the suspicious ones. For each, state the load-bearing assumption and ask: under what real-world condition does this break? Trap detection is consistently the most valuable output of divergent thinking. Don't skip it and don't compress it into a parenthetical.
How to find traps:
- Name the assumption that makes the approach work, then imagine the realistic scenario where it fails.
- Check for hidden costs -- O(n^2), hidden coupling -- that appear only at scale, under real concurrency, or after six months of maintenance.
- Ask whether the approach solves the stated problem but creates a worse adjacent one.
- Look for dependencies on team skills, infrastructure, or organizational willingness that isn't actually there.
- Check whether the approach is attractive because it's novel rather than because it fits.
-
Pick. State your recommendation and the runner-up. Say what the recommendation gives up -- the honest cost of the choice. If two options are genuinely close, say so and name the information that would break the tie.
Do not refuse to commit. Generating options without a recommendation is a cop-out. The user can override. But "here are 5 things, you decide" wastes the exercise.
Lenses
When you're stuck generating genuinely different approaches, pick one lens to force a different angle. Don't grind through all of them.
| Lens | Forces you to ask |
|---|---|
| Simplest | What's the dumbest thing that works? One file, no dependencies, ship today. |
| Delete | What if we just didn't do this at all? What breaks, and does anyone notice? |
| Dissolve | What if the thing everyone treats as fixed -- the framework, the DB, the network -- is removed? What's possible now? |
| Adversary | You're trying to break this. What exploit, failure cascade, or pathological input makes the obvious solution fall apart? Now design against that. |
| Beginner | You've never seen software. Why do we even do it this way? Strip jargon, ignore convention, rethink from scratch. |
| Logistics | What would a supply chain engineer do? Where are the queues, the batches, the handoffs, the bottlenecks? What gets delivered last-mile? |
| Operability | This thing will break at 3am. Design the version that lets the on-call engineer fix it from a phone without fully waking up. |
| Extreme budget | $0 and 1 hour: what's the crudest version that does the load-bearing thing? Now flip: infinite budget and a decade -- what's the maximalist version? The real answer is usually between them. |
Anti-patterns
- Spread without difference. Five approaches that share the same underlying assumption is not spread. If every option uses the same database, you haven't spread -- you've decorated.
- Spread without commitment. "Here are your options" is research assistant behavior. Commit to one. Say why.
- False precision. Scoring options 7.3 vs 7.1 on made-up scales creates the feeling of rigor without the substance. Compare on trade-offs the user can reason about.
- Overkill. Running /parallax on "should I use let or const" is a waste. The skill is for decisions where the cost of the obvious answer being wrong is high.
- Frame drift. Starting Phase 2 before Phase 1 is clear. If the frame is wrong, the best alternatives solve the wrong problem.
- Accepting the frame. The user asks "PostgreSQL or MySQL?" and you dutifully compare two databases. The real question was whether to use a relational database at all. Phase 1 exists to catch this. If the user's framing is too narrow, widen it before spreading.
- Wild for wild's sake. A creative option earns its place by seeding a viable idea, not by being weird. If none of the wild options are buildable, the spread went too far.
Calibration
Scale effort to stakes. Don't run the full protocol on trivial choices.
| Problem shape | Approaches | Frame | Commit |
|---|---|---|---|
| Naming (function, variable) | 3 | 2 lines | 3 lines |
| Naming (product, API surface) | 3-4 | 3 lines | 5-8 lines |
| Architecture / design decision | 4-5 | 5 lines | full comparison table + traps |
| Strategy / what to build | 4-5 | 5 lines | full comparison + explicit unknowns |
| Debugging (unknown root cause) | 3-4 | 3 lines | ranked hypotheses + first test for each |
When the problem has a known standard engineering solution and the user
needs something shippable today, the full protocol can hurt more than
it helps -- breadth costs time and the obvious answer is right. Answer
directly and offer /parallax as an option rather than running the
full protocol unprompted.
Relationship to ADHD
parallax operates in a single context. Approaches will share more underlying structure than ADHD's isolated branches -- the model sees its own earlier output, which creates anchoring. The Spread phase includes deliberate countermeasures (push past the obvious three, name shared assumptions before breaking them), but these are instructions fighting architecture. The trade-off: parallax gains a framing phase that ADHD lacks, forces a committed recommendation instead of a scored buffet, and costs zero extra API calls.
For maximum divergence breadth at 5-10x cost, use ADHD directly -- it spawns separate API calls under different cognitive frames with zero shared context, eliminating cross-branch anchoring by construction.
Output shape
## Frame
[Decision, constraints, dimensions -- 3-5 lines]
## Spread
### 1. [Approach name]
- **What:** ...
- **Upside:** ...
- **Cost:** ...
### 2. [Approach name]
...
## Commit
[Comparison. Traps. Recommendation with trade-offs.]
Keep output proportional to input. A one-sentence question doesn't need a 2000-word analysis.