3-pass scope oscillation that holds a question constant while shifting zoom — narrow/tactical, wide/strategic, then synthesis — to surface design tensions, scop
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-apertureoscillation-a0b970f63b7c ,按照其中的说明把「ApertureOscillation」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
Before executing, check for user customizations at:
~/.claude/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/ApertureOscillation/
If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults.
Runs a question through 3 passes at different zoom levels — narrow/tactical, wide/strategic, then synthesis — while holding the question itself constant. The first pass captures what a component wants to be on its own. The second captures what the system needs it to be. The third finds where those two views disagree, and that gap is the output: design tensions, scope recommendations, coherence checks.
A component designed in isolation gets its own clean logic. The same component designed inside a stated system vision inherits different constraints. Pick one zoom level and you miss the other — you ship something that works perfectly on its own but fights the system, or something that serves the system but ignores the component's natural shape. The most expensive rework comes from exactly this mismatch, discovered mid-build. Holding the question constant while varying the scope surfaces the mismatch before you commit.
Grounded in the observation that LLMs (and humans) produce different outputs depending on the scope of the framing context. A component designed in isolation has its own logic. The same component designed within a stated system vision inherits different constraints. The delta between these two framings is where the insight lives.
Instead of rotating analytical lenses (IterativeDepth) or generating divergent ideas (BeCreative), ApertureOscillation holds the question constant but shifts the scope envelope around it across 3 structured passes:
Narrow Aperture (Tactical-first): The specific thing is primary. Big-picture context is background. This captures what the component naturally wants to be — its own internal logic and shape.
Wide Aperture (Strategic-first): The vision/system goal is primary. The specific thing is derived from it. This captures what the system needs the component to be — coherence, alignment, constraints you'd miss thinking locally.
Oscillation (Synthesis): Feed both outputs. Ask where the tactical and strategic views diverge. The tensions, gaps, and surprises between the two framings are the output — the things neither pass alone would surface.
| Dimension | IterativeDepth | ApertureOscillation |
|---|---|---|
| What varies | Analytical lens (failure, stakeholder, temporal...) | Scope/zoom level (narrow, wide, synthesized) |
| Pass count | 2-8 | 3 (fixed) |
| Input | Single problem statement | Two inputs: tactical target + strategic context |
| Output | Richer requirements from multiple angles | Design tensions between local and system-level views |
| Best for | Requirement discovery, blind spot elimination | Architecture decisions, feature design, system coherence |
| When to combine | Use IterativeDepth first (understand the problem), then ApertureOscillation (understand where the solution fits) |
When to use: Any time you're building something specific within a larger system and need to ensure the local design serves the global vision — without losing the component's own logic.
Concrete triggers:
What you win:
| Workflow | Trigger | File |
|---|---|---|
| Oscillate | "aperture oscillation", "oscillate scope", "zoom in/out", "tactical vs strategic" | Workflows/Oscillate.md |
| Oscillate | An Algorithm run selects the ApertureOscillation capability while scoping | Workflows/Oscillate.md |
Example 1: Feature design within a system
Tactical target: "Build a caching layer for session data"
Strategic context: "LifeOS is a Life OS that needs responsive, session-spanning AI assistance"
Pass 1 (Narrow): Redis with TTL, standard session cache patterns
Pass 2 (Wide): Cache must survive session boundaries, integrate with memory system, serve the Life OS vision
Pass 3 (Synthesis): Tension — standard session cache expires data that the Life OS needs to persist. Resolution: hybrid cache with session-scoped fast layer + memory-backed persistent layer.
Example 2: Architecture decision
Tactical target: "Add webhook support to the Feed system"
Strategic context: "Feed is one pipeline in Arbol, which processes content for Surface"
Pass 1 (Narrow): Standard webhook receiver, queue, retry logic
Pass 2 (Wide): Webhooks must flow through Arbol's action/function pattern, integrate with existing queue infrastructure
Pass 3 (Synthesis): Tension — standalone webhook service vs. Arbol action. Resolution: implement as Arbol action, not standalone service, because the strategic context demands pipeline coherence over component independence.
After completing any workflow, append a single JSONL entry:
echo '{"ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","skill":"ApertureOscillation","workflow":"Oscillate","input":"8_WORD_SUMMARY","status":"ok|error","duration_s":SECONDS}' >> ~/.claude/LIFEOS/MEMORY/SKILLS/execution.jsonl
Replace 8_WORD_SUMMARY with a brief input description, and SECONDS with approximate wall-clock time. Log status: "error" if the workflow failed.