loopflow 0.7.0__tar.gz → 0.7.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {loopflow-0.7.0 → loopflow-0.7.2}/.gitignore +2 -0
- loopflow-0.7.2/PKG-INFO +206 -0
- loopflow-0.7.2/README.md +167 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/pyproject.toml +5 -3
- loopflow-0.7.2/src/loopflow/LOOPFLOW.md +73 -0
- loopflow-0.7.2/src/loopflow/__init__.py +1 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/branch_names.py +12 -1
- loopflow-0.7.2/src/loopflow/lf/builtins/directions/roles/infra-engineer.md +24 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/directions/values/craft.md +3 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/directions/values/flow.md +3 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/directions/values/scale.md +3 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/README.md +50 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/code/design-and-ship.yaml +4 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/code/grind.yaml +4 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/code/incident.yaml +3 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/code/pair.yaml +2 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/code/ship-roadmap.yaml +2 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/code/ship.yaml +4 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/code/start.yaml +2 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/plan/publish.yaml +2 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/plan/research.yaml +3 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/plan/roadmap-expand.yaml +8 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/plan/roadmap-polish.yaml +8 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/flows/plan/roadmap-reduce.yaml +8 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/release_notes.txt +41 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/code/compress.md +74 -0
- {loopflow-0.7.0/src/loopflow/templates/steps → loopflow-0.7.2/src/loopflow/lf/builtins/steps/code}/debug.md +1 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/code/gate.md +93 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/code/implement.md +49 -0
- {loopflow-0.7.0/src/loopflow/templates/steps → loopflow-0.7.2/src/loopflow/lf/builtins/steps/interactive}/design.md +2 -1
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/interactive/explore.md +29 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/ops/add-to-roadmap.md +84 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/ops/consolidate.md +42 -0
- {loopflow-0.7.0/src/loopflow/templates/steps → loopflow-0.7.2/src/loopflow/lf/builtins/steps/ops}/init.md +2 -2
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/ops/synthesize.md +56 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/ops/validate.md +52 -0
- {loopflow-0.7.0/src/loopflow/templates/steps → loopflow-0.7.2/src/loopflow/lf/builtins/steps/plan}/5whys.md +5 -13
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/plan/expand.md +74 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/plan/ingest.md +66 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/plan/iterate.md +22 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/plan/kickoff.md +74 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/plan/polish.md +60 -0
- loopflow-0.7.0/src/loopflow/templates/steps/reduce-big.md → loopflow-0.7.2/src/loopflow/lf/builtins/steps/plan/reduce.md +5 -1
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/plan/review.md +97 -0
- loopflow-0.7.2/src/loopflow/lf/builtins/steps/plan/roadmap.md +50 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/cli.py +97 -8
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/config.py +38 -16
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/context.py +293 -112
- loopflow-0.7.2/src/loopflow/lf/design.py +185 -0
- loopflow-0.7.2/src/loopflow/lf/directions.py +223 -0
- loopflow-0.7.2/src/loopflow/lf/execution.py +209 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/files.py +57 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/flow.py +276 -173
- loopflow-0.7.2/src/loopflow/lf/flows.py +576 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/frontmatter.py +14 -14
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/git.py +28 -37
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/messages.py +19 -10
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/naming.py +61 -18
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/_helpers.py +42 -61
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/abandon.py +1 -1
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/commit.py +1 -1
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/cp.py +2 -8
- loopflow-0.7.2/src/loopflow/lf/ops/git.py +632 -0
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/land.py +32 -38
- loopflow-0.7.2/src/loopflow/lf/ops/next.py +427 -0
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/pr.py +78 -2
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/rebase.py +23 -22
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/summarize.py +1 -0
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/sync.py +1 -1
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/wt.py +39 -21
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/output.py +40 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/roadmap.py +6 -6
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/step.py +77 -158
- loopflow-0.7.2/src/loopflow/lf/wave.py +119 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/worktrees.py +110 -9
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/README.md +18 -18
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/autoprune.py +5 -5
- loopflow-0.7.2/src/loopflow/lfd/cli.py +1796 -0
- loopflow-0.7.2/src/loopflow/lfd/daemon/grpc_server.py +571 -0
- loopflow-0.7.2/src/loopflow/lfd/daemon/http_server.py +1007 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/daemon/launchd.py +6 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/daemon/manager.py +6 -6
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/daemon/server.py +48 -18
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/daemon/status.py +6 -6
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/db.py +3 -3
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/execution/README.md +19 -19
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/execution/runner.py +329 -160
- loopflow-0.7.2/src/loopflow/lfd/execution/worker.py +447 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/flow_run.py +80 -33
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/migrations/baseline.py +16 -16
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/migrations/m_2025_01_23_zz_stimulus.py +6 -6
- loopflow-0.7.2/src/loopflow/lfd/migrations/m_2026_01_24_agent_worktree.py +27 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/migrations/m_2026_01_24_nullable_goal_area.py +19 -18
- loopflow-0.7.2/src/loopflow/lfd/migrations/m_2026_01_25_agent_paused.py +17 -0
- loopflow-0.7.2/src/loopflow/lfd/migrations/m_2026_01_26_step_index.py +15 -0
- loopflow-0.7.2/src/loopflow/lfd/migrations/m_2026_01_28_wave_stacking.py +21 -0
- loopflow-0.7.2/src/loopflow/lfd/migrations/m_2026_01_29_stimuli.py +80 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/migrations/registry.py +8 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/models.py +156 -62
- loopflow-0.7.2/src/loopflow/lfd/protocol_v1.py +218 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/step_run.py +32 -2
- loopflow-0.7.2/src/loopflow/lfd/stimulus.py +321 -0
- loopflow-0.7.2/src/loopflow/lfd/wave.py +884 -0
- loopflow-0.7.2/src/loopflow/proto/__init__.py +23 -0
- loopflow-0.7.2/src/loopflow/proto/generate.py +88 -0
- loopflow-0.7.2/src/loopflow/proto/loopflow/control/__init__.py +0 -0
- loopflow-0.7.2/src/loopflow/proto/loopflow/control/v1/__init__.py +0 -0
- loopflow-0.7.2/src/loopflow/proto/loopflow/control/v1/control_pb2.py +217 -0
- loopflow-0.7.2/src/loopflow/proto/loopflow/control/v1/control_pb2.pyi +1216 -0
- loopflow-0.7.2/src/loopflow/proto/loopflow/control/v1/control_pb2_grpc.py +1202 -0
- loopflow-0.7.2/src/loopflow/proto/loopflow/engine/__init__.py +0 -0
- loopflow-0.7.2/src/loopflow/proto/loopflow/engine/v1/__init__.py +0 -0
- loopflow-0.7.2/src/loopflow/proto/loopflow/engine/v1/engine_pb2.py +163 -0
- loopflow-0.7.2/src/loopflow/proto/loopflow/engine/v1/engine_pb2.pyi +1218 -0
- loopflow-0.7.2/src/loopflow/proto/loopflow/engine/v1/engine_pb2_grpc.py +779 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/publish.py +67 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/templates/config.yaml +1 -1
- loopflow-0.7.0/PKG-INFO +0 -143
- loopflow-0.7.0/README.md +0 -106
- loopflow-0.7.0/src/loopflow/LOOPFLOW.md +0 -104
- loopflow-0.7.0/src/loopflow/__init__.py +0 -1
- loopflow-0.7.0/src/loopflow/lf/builtins/flows/README.md +0 -16
- loopflow-0.7.0/src/loopflow/lf/builtins/flows/roadmap.py +0 -13
- loopflow-0.7.0/src/loopflow/lf/builtins/flows/ship.py +0 -5
- loopflow-0.7.0/src/loopflow/lf/builtins/release_notes.txt +0 -25
- loopflow-0.7.0/src/loopflow/lf/design.py +0 -127
- loopflow-0.7.0/src/loopflow/lf/flows.py +0 -369
- loopflow-0.7.0/src/loopflow/lf/goals.py +0 -210
- loopflow-0.7.0/src/loopflow/lfd/agent.py +0 -696
- loopflow-0.7.0/src/loopflow/lfd/cli.py +0 -1164
- loopflow-0.7.0/src/loopflow/lfd/daemon/http_server.py +0 -392
- loopflow-0.7.0/src/loopflow/lfd/execution/worker.py +0 -308
- loopflow-0.7.0/src/loopflow/lfd/migrations/m_2026_01_24_agent_worktree.py +0 -27
- loopflow-0.7.0/src/loopflow/lfd/work/asana_backend.py +0 -215
- loopflow-0.7.0/src/loopflow/lfd/work/backend.py +0 -29
- loopflow-0.7.0/src/loopflow/lfd/work/file_backend.py +0 -177
- loopflow-0.7.0/src/loopflow/lfd/work/models.py +0 -34
- loopflow-0.7.0/src/loopflow/lfops/__init__.py +0 -18
- loopflow-0.7.0/src/loopflow/lfops/commands.py +0 -47
- loopflow-0.7.0/src/loopflow/lfops/next.py +0 -289
- loopflow-0.7.0/src/loopflow/lfwork.py +0 -258
- loopflow-0.7.0/src/loopflow/templates/goals/adapt.md +0 -24
- loopflow-0.7.0/src/loopflow/templates/goals/infra-engineer.md +0 -30
- loopflow-0.7.0/src/loopflow/templates/goals/roadmap.md +0 -33
- loopflow-0.7.0/src/loopflow/templates/goals/ship.md +0 -29
- loopflow-0.7.0/src/loopflow/templates/steps/design_from_roadmap.md +0 -44
- loopflow-0.7.0/src/loopflow/templates/steps/expand-big.md +0 -60
- loopflow-0.7.0/src/loopflow/templates/steps/expand.md +0 -27
- loopflow-0.7.0/src/loopflow/templates/steps/explore.md +0 -27
- loopflow-0.7.0/src/loopflow/templates/steps/implement.md +0 -38
- loopflow-0.7.0/src/loopflow/templates/steps/iterate.md +0 -37
- loopflow-0.7.0/src/loopflow/templates/steps/polish-big.md +0 -75
- loopflow-0.7.0/src/loopflow/templates/steps/polish.md +0 -49
- loopflow-0.7.0/src/loopflow/templates/steps/reduce.md +0 -27
- loopflow-0.7.0/src/loopflow/templates/steps/review-big.md +0 -37
- loopflow-0.7.0/src/loopflow/templates/steps/review.md +0 -70
- loopflow-0.7.0/src/loopflow/templates/steps/roadmap.md +0 -45
- loopflow-0.7.0/src/loopflow/templates/steps/synthesize.md +0 -21
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/STYLE.md +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/init_check.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/__init__.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/builtins/__init__.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/builtins/commit_message.txt +0 -0
- {loopflow-0.7.0/src/loopflow/templates/goals → loopflow-0.7.2/src/loopflow/lf/builtins/directions/roles}/ceo.md +0 -0
- {loopflow-0.7.0/src/loopflow/templates/goals → loopflow-0.7.2/src/loopflow/lf/builtins/directions/roles}/designer.md +0 -0
- {loopflow-0.7.0/src/loopflow/templates/goals → loopflow-0.7.2/src/loopflow/lf/builtins/directions/roles}/product-engineer.md +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/builtins/pr_message.txt +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/builtins/prompts.py +0 -0
- {loopflow-0.7.0/src/loopflow/templates/steps → loopflow-0.7.2/src/loopflow/lf/builtins/steps/interactive}/refine.md +0 -0
- {loopflow-0.7.0/src/loopflow/templates/steps → loopflow-0.7.2/src/loopflow/lf/builtins/steps/ops}/commit.md +0 -0
- {loopflow-0.7.0/src/loopflow/templates/steps → loopflow-0.7.2/src/loopflow/lf/builtins/steps/ops}/lint.md +0 -0
- {loopflow-0.7.0/src/loopflow/templates/steps → loopflow-0.7.2/src/loopflow/lf/builtins/steps/ops}/rebase.md +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/builtins/summarize.txt +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/deps.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/launcher.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/logging.py +0 -0
- {loopflow-0.7.0/src/loopflow/lf/builtins/flows → loopflow-0.7.2/src/loopflow/lf/ops}/__init__.py +0 -0
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/add.py +0 -0
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/init.py +0 -0
- {loopflow-0.7.0/src/loopflow/lfops → loopflow-0.7.2/src/loopflow/lf/ops}/shell.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/skills.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lf/tokens.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/__init__.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/daemon/__init__.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/daemon/client.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/daemon/metrics.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/daemon/process.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/daemon/protocol.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/draft_prs.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/execution/__init__.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/execution/collector.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/git_hooks.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/logging.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/migrations/README.md +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/migrations/__init__.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/pr_poller.py +0 -0
- {loopflow-0.7.0 → loopflow-0.7.2}/src/loopflow/lfd/worktree_state.py +0 -0
- {loopflow-0.7.0/src/loopflow/lfd/work → loopflow-0.7.2/src/loopflow/proto/loopflow}/__init__.py +0 -0
loopflow-0.7.2/PKG-INFO
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: loopflow
|
|
3
|
+
Version: 0.7.2
|
|
4
|
+
Summary: Run LLM coding agents from reusable prompt files
|
|
5
|
+
Project-URL: Homepage, https://loopflowstudio.github.io/loopflow/
|
|
6
|
+
Project-URL: Repository, https://github.com/loopflowstudio/loopflow
|
|
7
|
+
Project-URL: Documentation, https://loopflowstudio.github.io/loopflow/
|
|
8
|
+
Project-URL: Issues, https://github.com/loopflowstudio/loopflow/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/loopflowstudio/loopflow/releases
|
|
10
|
+
Author: Jack
|
|
11
|
+
License-Expression: MIT
|
|
12
|
+
Keywords: agents,ai,automation,claude,cli,codex,coding,gemini,llm,prompts,workflow
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Operating System :: MacOS
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Topic :: Software Development
|
|
23
|
+
Classifier: Typing :: Typed
|
|
24
|
+
Requires-Python: >=3.10
|
|
25
|
+
Requires-Dist: croniter>=2.0
|
|
26
|
+
Requires-Dist: fastapi>=0.115.0
|
|
27
|
+
Requires-Dist: grpcio-tools>=1.60.0
|
|
28
|
+
Requires-Dist: grpcio>=1.60.0
|
|
29
|
+
Requires-Dist: pathspec>=0.11.0
|
|
30
|
+
Requires-Dist: protobuf>=4.25.0
|
|
31
|
+
Requires-Dist: pydantic>=2.12.5
|
|
32
|
+
Requires-Dist: pyyaml>=6.0
|
|
33
|
+
Requires-Dist: tiktoken>=0.7.0
|
|
34
|
+
Requires-Dist: typer>=0.9.0
|
|
35
|
+
Requires-Dist: uvicorn>=0.34.0
|
|
36
|
+
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: pytest>=7.0.0; extra == 'dev'
|
|
38
|
+
Description-Content-Type: text/markdown
|
|
39
|
+
|
|
40
|
+
# Loopflow
|
|
41
|
+
|
|
42
|
+
Loopflow helps you maintain flow and craft using coding agents (Claude Code, Codex, Gemini CLI) at high scale.
|
|
43
|
+
|
|
44
|
+
Loopflow helps you create and run **Waves**. Waves are chains of coding agents working together in pre-defined ways.
|
|
45
|
+
|
|
46
|
+
Waves are first built manually through more interactive exploration. Eventually waves become autonomous through looping, scheduling, and watching for changes.
|
|
47
|
+
|
|
48
|
+
## Waves
|
|
49
|
+
|
|
50
|
+
Waves are objects with 4 primary fields.
|
|
51
|
+
|
|
52
|
+
| Field | Usage | Form |
|
|
53
|
+
|-------|------|------|
|
|
54
|
+
| **Area** | Scope and context | pathset |
|
|
55
|
+
| **Flow** | Process followed / steps taken | sequence of prompts |
|
|
56
|
+
| **Direction** | Defines success, quality, and aesthetics | prompt |
|
|
57
|
+
| **Stimulus** | Watch, loop, or cron | mode |
|
|
58
|
+
|
|
59
|
+
## Steps
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
lf debug -c # paste an error, watch it fix
|
|
63
|
+
lf design # interactive design session
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Steps are prompts that run coding agents. Add your own in `.lf/steps/`.
|
|
67
|
+
|
|
68
|
+
### Planning steps (`plan/`)
|
|
69
|
+
|
|
70
|
+
| Step | What it does |
|
|
71
|
+
|------|--------------|
|
|
72
|
+
| `review` | Research an area — architecture, complexity, quality, potential |
|
|
73
|
+
| `reduce` | Find simplification opportunities |
|
|
74
|
+
| `polish` | Find polish priorities |
|
|
75
|
+
| `expand` | Find expansion opportunities |
|
|
76
|
+
| `iterate` | Read review, write design to address it |
|
|
77
|
+
| `ingest` | Pick roadmap item, move to scratch/ |
|
|
78
|
+
| `kickoff` | Elaborate design — alternatives, research, imagine success/failure |
|
|
79
|
+
| `roadmap` | Synthesize analysis into a roadmap proposal |
|
|
80
|
+
| `5whys` | Root cause analysis on a bug fix |
|
|
81
|
+
|
|
82
|
+
### Code steps (`code/`)
|
|
83
|
+
|
|
84
|
+
| Step | What it does |
|
|
85
|
+
|------|--------------|
|
|
86
|
+
| `debug` | Fix an error |
|
|
87
|
+
| `implement` | Build from a design doc |
|
|
88
|
+
| `compress` | Simplify touched code |
|
|
89
|
+
| `gate` | Ship-ready code and reviewer-friendly docs |
|
|
90
|
+
|
|
91
|
+
### Interactive steps (`interactive/`)
|
|
92
|
+
|
|
93
|
+
| Step | What it does |
|
|
94
|
+
|------|--------------|
|
|
95
|
+
| `design` | Interactive design session |
|
|
96
|
+
| `explore` | Investigate the codebase |
|
|
97
|
+
| `refine` | Refine existing work |
|
|
98
|
+
|
|
99
|
+
### Ops steps (`ops/`)
|
|
100
|
+
|
|
101
|
+
| Step | What it does |
|
|
102
|
+
|------|--------------|
|
|
103
|
+
| `consolidate` | Reorganize scratch/ for roadmap |
|
|
104
|
+
| `add-to-roadmap` | Promote from scratch/ to roadmap/ |
|
|
105
|
+
| `synthesize` | Combine multiple perspectives into one |
|
|
106
|
+
| `validate` | Validate flows, steps, and directions |
|
|
107
|
+
|
|
108
|
+
## Flows
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
lf design && lf implement && lf gate # chain steps manually
|
|
112
|
+
lf flow ship # or use a named flow
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Steps chain into flows. Flows feed into waves.
|
|
116
|
+
|
|
117
|
+
### Code flows (`code/`)
|
|
118
|
+
|
|
119
|
+
| Flow | Steps |
|
|
120
|
+
|------|-------|
|
|
121
|
+
| `ship` | implement → compress → gate → consolidate |
|
|
122
|
+
| `design-and-ship` | design → implement → reduce → polish |
|
|
123
|
+
| `pair` | design → ship |
|
|
124
|
+
| `grind` | review → iterate → ship → gate |
|
|
125
|
+
| `incident` | debug → 5whys → ship |
|
|
126
|
+
| `start` | ingest → kickoff |
|
|
127
|
+
| `ship-roadmap` | start → ship |
|
|
128
|
+
|
|
129
|
+
### Plan flows (`plan/`)
|
|
130
|
+
|
|
131
|
+
| Flow | Steps |
|
|
132
|
+
|------|-------|
|
|
133
|
+
| `roadmap-reduce` | review → fork(reduce×3) → publish |
|
|
134
|
+
| `roadmap-polish` | review → fork(polish×3) → publish |
|
|
135
|
+
| `roadmap-expand` | review → fork(expand×3) → publish |
|
|
136
|
+
| `research` | explore → review → publish |
|
|
137
|
+
| `publish` | consolidate → add-to-roadmap |
|
|
138
|
+
|
|
139
|
+
### Forks
|
|
140
|
+
|
|
141
|
+
Forks run a step in parallel with different directions, then synthesize the results.
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
lf flow roadmap-reduce # runs reduce 3x with different perspectives
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
`roadmap-reduce` forks `reduce` across infra-engineer, designer, and product-engineer directions, then synthesizes and publishes to roadmap.
|
|
148
|
+
|
|
149
|
+
## Playing in the Waves
|
|
150
|
+
|
|
151
|
+
Once you have played with chaining steps into flows, you're ready to start running waves.
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
lfd create engbot # create a wave
|
|
155
|
+
lfd area engbot src/ # set area
|
|
156
|
+
lfd direction engbot product-engineer # set direction
|
|
157
|
+
lfd flow engbot ship # set flow
|
|
158
|
+
lfd loop engbot # start looping
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Runs the `ship` flow on `src/` continuously using the `product-engineer` direction, creating PRs until stopped.
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
lfd watch ship designs/ -d designer # ship when designs/ changes on main
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
You can compose multiple directions to add additional nuance or perspectives.
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
lf review -d designer,product-engineer
|
|
171
|
+
lf review -d ceo
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Install
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
uv tool install loopflow
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Built-in steps and flows included. `lf init` sets up your coding agent and preferences.
|
|
181
|
+
|
|
182
|
+
[Documentation →](docs/index.md)
|
|
183
|
+
|
|
184
|
+
## Integrations
|
|
185
|
+
|
|
186
|
+
**Coding Agents**
|
|
187
|
+
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) — Anthropic's coding agent (default)
|
|
188
|
+
- [Codex CLI](https://github.com/openai/codex) — OpenAI's coding agent
|
|
189
|
+
- [Gemini CLI](https://github.com/google-gemini/gemini-cli) — Google's coding agent
|
|
190
|
+
|
|
191
|
+
**Tools**
|
|
192
|
+
- [worktrunk](https://github.com/loopflowstudio/worktrunk) — git worktree management (`wt` commands)
|
|
193
|
+
|
|
194
|
+
**Skill Libraries**
|
|
195
|
+
- [superpowers](https://github.com/obra/superpowers) — prompt library (`lf sp:<skill>`)
|
|
196
|
+
- [SkillRegistry](https://skillregistry.io/) — remote skill directory (`lf sr:<skill>`)
|
|
197
|
+
- [rams](https://rams.ai) — accessibility and visual design review
|
|
198
|
+
|
|
199
|
+
## Requirements
|
|
200
|
+
|
|
201
|
+
- macOS
|
|
202
|
+
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex](https://github.com/openai/codex), or [Gemini CLI](https://github.com/google-gemini/gemini-cli)
|
|
203
|
+
|
|
204
|
+
## License
|
|
205
|
+
|
|
206
|
+
MIT
|
loopflow-0.7.2/README.md
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Loopflow
|
|
2
|
+
|
|
3
|
+
Loopflow helps you maintain flow and craft using coding agents (Claude Code, Codex, Gemini CLI) at high scale.
|
|
4
|
+
|
|
5
|
+
Loopflow helps you create and run **Waves**. Waves are chains of coding agents working together in pre-defined ways.
|
|
6
|
+
|
|
7
|
+
Waves are first built manually through more interactive exploration. Eventually waves become autonomous through looping, scheduling, and watching for changes.
|
|
8
|
+
|
|
9
|
+
## Waves
|
|
10
|
+
|
|
11
|
+
Waves are objects with 4 primary fields.
|
|
12
|
+
|
|
13
|
+
| Field | Usage | Form |
|
|
14
|
+
|-------|------|------|
|
|
15
|
+
| **Area** | Scope and context | pathset |
|
|
16
|
+
| **Flow** | Process followed / steps taken | sequence of prompts |
|
|
17
|
+
| **Direction** | Defines success, quality, and aesthetics | prompt |
|
|
18
|
+
| **Stimulus** | Watch, loop, or cron | mode |
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
lf debug -c # paste an error, watch it fix
|
|
24
|
+
lf design # interactive design session
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Steps are prompts that run coding agents. Add your own in `.lf/steps/`.
|
|
28
|
+
|
|
29
|
+
### Planning steps (`plan/`)
|
|
30
|
+
|
|
31
|
+
| Step | What it does |
|
|
32
|
+
|------|--------------|
|
|
33
|
+
| `review` | Research an area — architecture, complexity, quality, potential |
|
|
34
|
+
| `reduce` | Find simplification opportunities |
|
|
35
|
+
| `polish` | Find polish priorities |
|
|
36
|
+
| `expand` | Find expansion opportunities |
|
|
37
|
+
| `iterate` | Read review, write design to address it |
|
|
38
|
+
| `ingest` | Pick roadmap item, move to scratch/ |
|
|
39
|
+
| `kickoff` | Elaborate design — alternatives, research, imagine success/failure |
|
|
40
|
+
| `roadmap` | Synthesize analysis into a roadmap proposal |
|
|
41
|
+
| `5whys` | Root cause analysis on a bug fix |
|
|
42
|
+
|
|
43
|
+
### Code steps (`code/`)
|
|
44
|
+
|
|
45
|
+
| Step | What it does |
|
|
46
|
+
|------|--------------|
|
|
47
|
+
| `debug` | Fix an error |
|
|
48
|
+
| `implement` | Build from a design doc |
|
|
49
|
+
| `compress` | Simplify touched code |
|
|
50
|
+
| `gate` | Ship-ready code and reviewer-friendly docs |
|
|
51
|
+
|
|
52
|
+
### Interactive steps (`interactive/`)
|
|
53
|
+
|
|
54
|
+
| Step | What it does |
|
|
55
|
+
|------|--------------|
|
|
56
|
+
| `design` | Interactive design session |
|
|
57
|
+
| `explore` | Investigate the codebase |
|
|
58
|
+
| `refine` | Refine existing work |
|
|
59
|
+
|
|
60
|
+
### Ops steps (`ops/`)
|
|
61
|
+
|
|
62
|
+
| Step | What it does |
|
|
63
|
+
|------|--------------|
|
|
64
|
+
| `consolidate` | Reorganize scratch/ for roadmap |
|
|
65
|
+
| `add-to-roadmap` | Promote from scratch/ to roadmap/ |
|
|
66
|
+
| `synthesize` | Combine multiple perspectives into one |
|
|
67
|
+
| `validate` | Validate flows, steps, and directions |
|
|
68
|
+
|
|
69
|
+
## Flows
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
lf design && lf implement && lf gate # chain steps manually
|
|
73
|
+
lf flow ship # or use a named flow
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Steps chain into flows. Flows feed into waves.
|
|
77
|
+
|
|
78
|
+
### Code flows (`code/`)
|
|
79
|
+
|
|
80
|
+
| Flow | Steps |
|
|
81
|
+
|------|-------|
|
|
82
|
+
| `ship` | implement → compress → gate → consolidate |
|
|
83
|
+
| `design-and-ship` | design → implement → reduce → polish |
|
|
84
|
+
| `pair` | design → ship |
|
|
85
|
+
| `grind` | review → iterate → ship → gate |
|
|
86
|
+
| `incident` | debug → 5whys → ship |
|
|
87
|
+
| `start` | ingest → kickoff |
|
|
88
|
+
| `ship-roadmap` | start → ship |
|
|
89
|
+
|
|
90
|
+
### Plan flows (`plan/`)
|
|
91
|
+
|
|
92
|
+
| Flow | Steps |
|
|
93
|
+
|------|-------|
|
|
94
|
+
| `roadmap-reduce` | review → fork(reduce×3) → publish |
|
|
95
|
+
| `roadmap-polish` | review → fork(polish×3) → publish |
|
|
96
|
+
| `roadmap-expand` | review → fork(expand×3) → publish |
|
|
97
|
+
| `research` | explore → review → publish |
|
|
98
|
+
| `publish` | consolidate → add-to-roadmap |
|
|
99
|
+
|
|
100
|
+
### Forks
|
|
101
|
+
|
|
102
|
+
Forks run a step in parallel with different directions, then synthesize the results.
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
lf flow roadmap-reduce # runs reduce 3x with different perspectives
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
`roadmap-reduce` forks `reduce` across infra-engineer, designer, and product-engineer directions, then synthesizes and publishes to roadmap.
|
|
109
|
+
|
|
110
|
+
## Playing in the Waves
|
|
111
|
+
|
|
112
|
+
Once you have played with chaining steps into flows, you're ready to start running waves.
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
lfd create engbot # create a wave
|
|
116
|
+
lfd area engbot src/ # set area
|
|
117
|
+
lfd direction engbot product-engineer # set direction
|
|
118
|
+
lfd flow engbot ship # set flow
|
|
119
|
+
lfd loop engbot # start looping
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Runs the `ship` flow on `src/` continuously using the `product-engineer` direction, creating PRs until stopped.
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
lfd watch ship designs/ -d designer # ship when designs/ changes on main
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
You can compose multiple directions to add additional nuance or perspectives.
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
lf review -d designer,product-engineer
|
|
132
|
+
lf review -d ceo
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Install
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
uv tool install loopflow
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Built-in steps and flows included. `lf init` sets up your coding agent and preferences.
|
|
142
|
+
|
|
143
|
+
[Documentation →](docs/index.md)
|
|
144
|
+
|
|
145
|
+
## Integrations
|
|
146
|
+
|
|
147
|
+
**Coding Agents**
|
|
148
|
+
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) — Anthropic's coding agent (default)
|
|
149
|
+
- [Codex CLI](https://github.com/openai/codex) — OpenAI's coding agent
|
|
150
|
+
- [Gemini CLI](https://github.com/google-gemini/gemini-cli) — Google's coding agent
|
|
151
|
+
|
|
152
|
+
**Tools**
|
|
153
|
+
- [worktrunk](https://github.com/loopflowstudio/worktrunk) — git worktree management (`wt` commands)
|
|
154
|
+
|
|
155
|
+
**Skill Libraries**
|
|
156
|
+
- [superpowers](https://github.com/obra/superpowers) — prompt library (`lf sp:<skill>`)
|
|
157
|
+
- [SkillRegistry](https://skillregistry.io/) — remote skill directory (`lf sr:<skill>`)
|
|
158
|
+
- [rams](https://rams.ai) — accessibility and visual design review
|
|
159
|
+
|
|
160
|
+
## Requirements
|
|
161
|
+
|
|
162
|
+
- macOS
|
|
163
|
+
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex](https://github.com/openai/codex), or [Gemini CLI](https://github.com/google-gemini/gemini-cli)
|
|
164
|
+
|
|
165
|
+
## License
|
|
166
|
+
|
|
167
|
+
MIT
|
|
@@ -30,10 +30,12 @@ dependencies = [
|
|
|
30
30
|
"pyyaml>=6.0",
|
|
31
31
|
"pydantic>=2.12.5",
|
|
32
32
|
"tiktoken>=0.7.0",
|
|
33
|
-
"asana>=5.0.0",
|
|
34
33
|
"croniter>=2.0",
|
|
35
34
|
"fastapi>=0.115.0",
|
|
36
35
|
"uvicorn>=0.34.0",
|
|
36
|
+
"grpcio>=1.60.0",
|
|
37
|
+
"grpcio-tools>=1.60.0",
|
|
38
|
+
"protobuf>=4.25.0",
|
|
37
39
|
]
|
|
38
40
|
|
|
39
41
|
[project.urls]
|
|
@@ -51,8 +53,6 @@ dev = [
|
|
|
51
53
|
[project.scripts]
|
|
52
54
|
lf = "loopflow.lf.cli:main"
|
|
53
55
|
lfd = "loopflow.lfd.cli:main"
|
|
54
|
-
lfops = "loopflow.lfops:main"
|
|
55
|
-
lfwork = "loopflow.lfwork:main"
|
|
56
56
|
|
|
57
57
|
[build-system]
|
|
58
58
|
requires = ["hatchling"]
|
|
@@ -92,10 +92,12 @@ select = [
|
|
|
92
92
|
|
|
93
93
|
[tool.ruff.lint.per-file-ignores]
|
|
94
94
|
"tests/*" = ["F841"] # unused variables OK in test fixtures
|
|
95
|
+
"src/loopflow/proto/**/*_pb2*" = ["E501", "F401", "F811", "I001", "E402"] # generated protobuf code
|
|
95
96
|
|
|
96
97
|
[dependency-groups]
|
|
97
98
|
dev = [
|
|
98
99
|
"pytest>=9.0.2",
|
|
99
100
|
"boto3>=1.35.0",
|
|
100
101
|
"ruff>=0.9.0",
|
|
102
|
+
"maturin>=1.4,<2.0",
|
|
101
103
|
]
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Loopflow
|
|
2
|
+
|
|
3
|
+
Run prompts, hand off cleanly. Each step does one thing and leaves state for the next.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Area
|
|
8
|
+
|
|
9
|
+
Your working scope. Everything here is relevant.
|
|
10
|
+
|
|
11
|
+
**Area docs**: Patterns and constraints for this part of the codebase.
|
|
12
|
+
|
|
13
|
+
**Repo docs**: STYLE, CLAUDE.md, and other guidelines. Follow them.
|
|
14
|
+
|
|
15
|
+
**Direction**: Your perspective. Follow its principles.
|
|
16
|
+
|
|
17
|
+
**Step**: Your task. Do what it says.
|
|
18
|
+
|
|
19
|
+
**Diff**: What's changed on this branch. Your primary working material.
|
|
20
|
+
|
|
21
|
+
**Clipboard**: User-provided input. If present, it's why you're here.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Run Modes
|
|
26
|
+
|
|
27
|
+
Check the run mode at the top of the prompt.
|
|
28
|
+
|
|
29
|
+
**If auto mode**: Run to completion. Don't pause for questions. Make best-effort assumptions. Write open questions to `scratch/questions.md` and keep moving.
|
|
30
|
+
|
|
31
|
+
**If interactive mode**: Ask clarifying questions when needed. The user will guide you.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Where to Write
|
|
36
|
+
|
|
37
|
+
**scratch/**: PR-scoped artifacts. Design docs, notes, questions. Cleared on merge.
|
|
38
|
+
- `scratch/<branch>.md` — design doc for current work
|
|
39
|
+
- `scratch/questions.md` — open questions, unknowns, blockers
|
|
40
|
+
|
|
41
|
+
**Code**: The actual work. Tests, implementation, fixes.
|
|
42
|
+
|
|
43
|
+
Don't modify `roadmap/` unless the step explicitly says to. It persists across PRs.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Commits
|
|
48
|
+
|
|
49
|
+
In auto mode, commit when a step completes. Small, atomic commits. Don't leave the branch broken.
|
|
50
|
+
|
|
51
|
+
In interactive mode, commit at natural breakpoints when the user signals readiness.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Chaining
|
|
56
|
+
|
|
57
|
+
Steps produce artifacts that later steps consume:
|
|
58
|
+
|
|
59
|
+
| Step | Reads | Writes |
|
|
60
|
+
|------|-------|--------|
|
|
61
|
+
| design | — | scratch/<branch>.md |
|
|
62
|
+
| implement | scratch/<branch>.md | code, tests |
|
|
63
|
+
| review | code on branch | verdict in scratch/ |
|
|
64
|
+
|
|
65
|
+
If a required artifact is missing, check scratch/ first. If still missing, note it in `scratch/questions.md` and proceed with what you have.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Quality
|
|
70
|
+
|
|
71
|
+
Ship working code. Tests pass. No regressions.
|
|
72
|
+
|
|
73
|
+
When unsure between two approaches, pick the simpler one. You can always iterate.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.7.2"
|
|
@@ -6,6 +6,8 @@ import subprocess
|
|
|
6
6
|
from datetime import datetime
|
|
7
7
|
from typing import TYPE_CHECKING
|
|
8
8
|
|
|
9
|
+
from loopflow.lf.naming import generate_word_pair
|
|
10
|
+
|
|
9
11
|
if TYPE_CHECKING:
|
|
10
12
|
from loopflow.lf.config import BranchNameConfig
|
|
11
13
|
|
|
@@ -36,7 +38,15 @@ def _sanitize_for_branch(s: str) -> str:
|
|
|
36
38
|
|
|
37
39
|
|
|
38
40
|
def format_branch_name(short_name: str, config: "BranchNameConfig | None") -> str:
|
|
39
|
-
"""Transform short name into full branch name using schema.
|
|
41
|
+
"""Transform short name into full branch name using schema.
|
|
42
|
+
|
|
43
|
+
Available placeholders:
|
|
44
|
+
{name} - the short name provided
|
|
45
|
+
{user} - git username
|
|
46
|
+
{ts} - timestamp (YYYYMMDD_HHMM)
|
|
47
|
+
{date} - date (YYYYMMDD)
|
|
48
|
+
{words} - magical-musical word pair (e.g., wisp-forte)
|
|
49
|
+
"""
|
|
40
50
|
if config is None:
|
|
41
51
|
return short_name
|
|
42
52
|
|
|
@@ -51,6 +61,7 @@ def format_branch_name(short_name: str, config: "BranchNameConfig | None") -> st
|
|
|
51
61
|
"user": _get_git_username(),
|
|
52
62
|
"ts": now.strftime("%Y%m%d_%H%M"),
|
|
53
63
|
"date": now.strftime("%Y%m%d"),
|
|
64
|
+
"words": generate_word_pair(),
|
|
54
65
|
}
|
|
55
66
|
|
|
56
67
|
result = schema
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Build systems that don't break.
|
|
2
|
+
|
|
3
|
+
## Core responsibilities
|
|
4
|
+
|
|
5
|
+
**Security.** Defense in depth. Validate inputs, sanitize outputs, minimize attack surface. Assume breach. Least privilege. Audit sensitive operations.
|
|
6
|
+
|
|
7
|
+
**Performance.** Speed matters. Measure before optimizing. Profile hot paths. Watch memory, latency, throughput. Indexing, batching, caching, connection pooling.
|
|
8
|
+
|
|
9
|
+
**Reliability.** Systems work correctly, always. Handle failures gracefully. Retry with backoff. Circuit breakers. Graceful degradation. Timeouts, health checks, monitoring.
|
|
10
|
+
|
|
11
|
+
## What matters
|
|
12
|
+
|
|
13
|
+
**Slow is smooth. Smooth is fast.** Rushing creates incidents. Measure twice, cut once.
|
|
14
|
+
|
|
15
|
+
**Correctness over speed.** A fast system that's wrong is worthless. A correct system can be optimized.
|
|
16
|
+
|
|
17
|
+
**Observability is not optional.** If you can't see it, you can't fix it. Logging, metrics, tracing are load-bearing.
|
|
18
|
+
|
|
19
|
+
## Quality bar
|
|
20
|
+
|
|
21
|
+
- Handles 10x current load without architectural changes
|
|
22
|
+
- Fails gracefully—partial degradation, not total collapse
|
|
23
|
+
- Recoverable in minutes, not hours
|
|
24
|
+
- Every state change is observable and reversible
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Built-in Flows
|
|
2
|
+
|
|
3
|
+
Flows shipped with loopflow. Organized by purpose.
|
|
4
|
+
|
|
5
|
+
## Code flows (`code/`)
|
|
6
|
+
|
|
7
|
+
Flows that produce code changes.
|
|
8
|
+
|
|
9
|
+
| Flow | Steps | Use case |
|
|
10
|
+
|------|-------|----------|
|
|
11
|
+
| `ship` | implement → compress → gate | Build from design, ship clean |
|
|
12
|
+
| `pair` | design → ship | Interactive design then build |
|
|
13
|
+
| `grind` | review → iterate → ship → gate | Review-driven iteration |
|
|
14
|
+
| `incident` | debug → 5whys → ship | Fix bug, analyze root cause, ship fixes |
|
|
15
|
+
| `start` | ingest → kickoff | Pick roadmap item, elaborate design |
|
|
16
|
+
| `ship-roadmap` | start → ship | Pick roadmap item, elaborate, build |
|
|
17
|
+
|
|
18
|
+
## Plan flows (`plan/`)
|
|
19
|
+
|
|
20
|
+
Flows that produce roadmap items and analysis.
|
|
21
|
+
|
|
22
|
+
| Flow | Steps | Use case |
|
|
23
|
+
|------|-------|----------|
|
|
24
|
+
| `roadmap-reduce` | review → fork(reduce×3) → publish | Find simplification opportunities |
|
|
25
|
+
| `roadmap-polish` | review → fork(polish×3) → publish | Find polish priorities |
|
|
26
|
+
| `roadmap-expand` | review → fork(expand×3) → publish | Find expansion opportunities |
|
|
27
|
+
| `research` | explore → review → publish | Investigate then propose |
|
|
28
|
+
| `publish` | consolidate → add-to-roadmap | Promote scratch/ to roadmap/ |
|
|
29
|
+
|
|
30
|
+
## Fork pattern
|
|
31
|
+
|
|
32
|
+
Plan flows use forks to get multiple perspectives:
|
|
33
|
+
|
|
34
|
+
```yaml
|
|
35
|
+
- review
|
|
36
|
+
- fork:
|
|
37
|
+
step: reduce
|
|
38
|
+
drafts:
|
|
39
|
+
- direction: infra-engineer
|
|
40
|
+
- direction: designer
|
|
41
|
+
- direction: product-engineer
|
|
42
|
+
- publish
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The fork runs `reduce` three times with different directions, synthesizes results using the wave's direction, then publishes to roadmap.
|
|
46
|
+
|
|
47
|
+
## Adding a flow
|
|
48
|
+
|
|
49
|
+
1. Create `{category}/{name}.yaml` with step list
|
|
50
|
+
2. Update this README
|