Loop 2.1 now has a full keyboard control system. You don't have to use it — everything still works with the mouse — but once the bindings are in your fingers, operating the machine feels fundamentally different. Your eyes can stay on the loops.
The system is designed to be learned incrementally. Start with the three keys you'll use constantly:
Those three alone are worth learning. Add bus chords when you're ready. Add the rest whenever it feels natural.
Most bound keys live on the left side of the keyboard so your right hand can stay on the mouse. The four loop keys — S D F G — match the left-hand home row, spatially ordered to mirror the Working, ALU, Memory, and Big loops as they appear on screen.
Keys 5–9 are shown at reduced opacity — they're for toggling networking buses and use the same double-tap pattern as 1–4, but don't support chord entry.
| Key | Action |
|---|---|
| Space | Start / Stop the clock |
| . | Step one tick (global — all running loops advance one position) |
| [ | Decrease clock speed one step |
| ] | Increase clock speed one step |
Speed steps: 1 · 2 · 3 · 4 · 6 · 8 · 12 · 16 · 24 · 32 · 48 · 64 · 96 · 128 · 144 Hz. Each press of [ or ] moves one step along this ladder. The recommended operating speed for most work is 24 Hz.
The four loop keys are spatially mapped to the left-hand home row. Working is under your pinky, then ALU, Memory, Big moving toward the index finger. Shift adds gate control to the same positions.
| Key | Action | Loop |
|---|---|---|
| S | Pause / Resume | Working |
| D | Pause / Resume | ALU |
| F | Pause / Resume | Memory |
| G | Pause / Resume | Big |
| Shift+S | Toggle gate open / closed | Working |
| Shift+D | Toggle gate open / closed | ALU |
| Shift+F | Toggle gate open / closed | Memory |
| Shift+G | Toggle gate open / closed | Big |
| Key | Action |
|---|---|
| R | Send ALU answer to loop |
| Shift+R | Send comparator result to loop |
| V | Cycle ALU operation forward |
| Shift+V | Cycle ALU operation backward |
| C | Cycle capture route forward (OFF → A → B → C → D → OFF…) |
| Shift+C | Cycle capture route backward |
Operation cycle order: ADD → SUB → AND → OR → XOR → NOT → SHL → SHR → NEG → INC → DEC — and back to ADD.
| Key | Action |
|---|---|
| E | Send — inject the current switch value into the Working loop |
| Shift+E | Random inject — a random value within the configured min/max range |
| Q | Clear all input switches (set to zero) |
Set your value with the bit switches, then press E to inject. Q clears the switches so you start fresh for the next value. For random-number work, configure the min/max in the RNG panel, then use Shift+E to fire values without touching the switches at all.
| Key | Action |
|---|---|
| X | Toggle Write to Slots on / off |
| Shift+X | Toggle Auto-Increment on / off |
| Z | Send current slot to loop |
| Shift+Z | Batch Write All — stream all 16 slots into the Memory loop |
Z sends whichever slot address is currently selected. Shift+Z runs the full batch sequence regardless of the current address. Use X with Shift+X together to set up an auto-incrementing capture pass: enable Write to Slots, enable Auto-Inc, then start the clock and let words accumulate into consecutive slots.
Two ways to toggle any internal bus (A–D) on or off:
- Double-tap: press the bus key twice rapidly (1 1, 2 2, etc.). The threshold is 300ms — it's generous, not a trick shot.
- Shift+number: Shift+1 through Shift+4. No timing required, always reliable.
Both methods produce identical behavior. Use whichever you prefer.
| Double-tap | Shift+key | Bus |
|---|---|---|
| 1 1 | Shift+1 | Bus A |
| 2 2 | Shift+2 | Bus B |
| 3 3 | Shift+3 | Bus C |
| 4 4 | Shift+4 | Bus D |
The chord system lets you configure a bus's source and destination with three keystrokes. The grammar is fixed:
[bus key] [source key] [destination key]
Press 1, 2, 3, or 4 to start a chord for that bus. The machine enters chord mode — a status display appears at the bottom of the screen showing your progress. Then type the source component, then the destination. The bus updates instantly on the third keystroke.
2 A M → Bus B: ALU → Memory
3 M B → Bus C: Memory → Big
4 B W → Bus D: Big → Working
↑ Four-loop pipeline in 12 keystrokes
| Key | Component | Source | Destination |
|---|---|---|---|
| W | Working loop | ✓ | ✓ |
| A | ALU loop | ✓ | ✓ |
| M | Memory loop | ✓ | ✓ |
| B | Big loop | ✓ | ✓ |
| P | Pattern Matcher 1 output | ✓ | — |
| T | Threshold Gate 1 output | ✓ | — |
| K | Global Counter | ✓ | ✓ |
| F | File Save | — | ✓ |
Sources produce data; destinations receive it. PM1 and TG1 outputs are source-only — you can route from them but not to them. File Save is destination-only. If you attempt an invalid combination (e.g. 1 F W — trying to use File Save as a source), the chord cancels cleanly and the status display shows why.
Press Escape at any point during a chord to cancel it. The bus is left unchanged. A chord that receives no input times out and cancels automatically after 2 seconds.
While a chord is active, all flat-layer keys are suppressed — pressing Space mid-chord won't accidentally stop the clock. The only active keys during a chord are the component target keys and Escape.
2 K A → Bus B: Global Counter → ALU
3 T M → Bus C: TG1 output → Memory
1 W F → Bus A: Working → File Save
2 A W → Bus B: ALU → Working
2 2 → Toggle Bus B off
Buses E through I are the networking buses. Their source/destination and peer configuration is click-only — there's no chord grammar for them. But toggling them on and off during active networked computation is a mid-flow action, so it's covered by the keyboard.
Same two methods as internal buses, same timing:
| Double-tap | Shift+key | Bus |
|---|---|---|
| 5 5 | Shift+5 | Bus E (External) |
| 6 6 | Shift+6 | Bus F (P2P Left) |
| 7 7 | Shift+7 | Bus G (P2P Right) |
| 8 8 | Shift+8 | Bus H (Net0) |
| 9 9 | Shift+9 | Bus I (Net1) |
During networked sessions, the keyboard chat flow is designed to keep your hands on the machine.
| Key | Action | When |
|---|---|---|
| T | Open chat — focus the chat input | No input focused |
| Enter | Send message and exit chat | Chat open via T |
| Escape | Cancel — discard text, return to machine | Chat input focused |
The key behavior here is that Enter both sends and exits when you entered chat via T. One key to send, no second key to return to machine control. The round-trip is: T → type → Enter → back operating.
If you clicked into the chat input with the mouse instead, Enter sends but leaves focus in the chat field — the assumption is you may want to send several messages in sequence. Use Escape to leave.
Most challenge setup is click-only — selecting challenge type, configuring parameters, adjusting scoring. But the actions that happen during active computation have keyboard shortcuts.
| Key | Action | Condition |
|---|---|---|
| N | Start new challenge | No challenge currently active |
| Shift+N | Abort challenge | Challenge is active |
| H | Toggle Show Values | Challenge active or complete |
| Enter | RELEASE — inject staged value | No input focused; RELEASE button is lit |
N respects the current challenge type and parameter settings. It's equivalent to clicking NEW CHALLENGE — it won't start if a challenge is already running.
Enter for RELEASE is context-sensitive. If the chat input or any other field is focused, Enter goes to that field as normal. It only triggers RELEASE when you're at the machine (nothing focused) and the RELEASE button is active and lit. The priority is unambiguous: you cannot accidentally release a challenge value while typing.
Flat Layer
| Key | Action | Category |
|---|---|---|
| Space | Start / Stop clock | Clock |
| . | Step one tick | Clock |
| [ | Decrease clock speed | Clock |
| ] | Increase clock speed | Clock |
| S | Pause / Resume Working | Loop |
| D | Pause / Resume ALU | Loop |
| F | Pause / Resume Memory | Loop |
| G | Pause / Resume Big | Loop |
| R | Send ALU answer to loop | ALU |
| V | Cycle ALU op forward | ALU |
| C | Cycle capture route forward | ALU |
| E | Send (inject current value) | Inject |
| Q | Clear input switches | Inject |
| X | Toggle Write to Slots | Memory |
| Z | Send current slot to loop | Memory |
| T | Open chat input | Chat |
| N | Start new challenge | Challenge |
| H | Toggle Show Values | Challenge |
| Enter | Challenge RELEASE (when lit) | Challenge |
Shift Layer
| Binding | Action | Category |
|---|---|---|
| Shift+S | Toggle Working gate | Loop |
| Shift+D | Toggle ALU gate | Loop |
| Shift+F | Toggle Memory gate | Loop |
| Shift+G | Toggle Big gate | Loop |
| Shift+R | Send comparator to loop | ALU |
| Shift+V | Cycle ALU op backward | ALU |
| Shift+C | Cycle capture route backward | ALU |
| Shift+E | Random inject | Inject |
| Shift+X | Toggle Auto-Increment | Memory |
| Shift+Z | Batch Write All | Memory |
| Shift+1–4 | Toggle Bus A–D | Bus |
| Shift+5–9 | Toggle Bus E–I | Net Bus |
| Shift+N | Abort challenge | Challenge |
Bus Chord Keys
| Key | Bus | Single press | Double-tap |
|---|---|---|---|
| 1 | Bus A | Enter chord mode | Toggle on/off |
| 2 | Bus B | Enter chord mode | Toggle on/off |
| 3 | Bus C | Enter chord mode | Toggle on/off |
| 4 | Bus D | Enter chord mode | Toggle on/off |
| 5 | Bus E | (no action) | Toggle on/off |
| 6 | Bus F | (no action) | Toggle on/off |
| 7 | Bus G | (no action) | Toggle on/off |
| 8 | Bus H | (no action) | Toggle on/off |
| 9 | Bus I | (no action) | Toggle on/off |
Chord Target Keys (inside a chord)
| Key | Component | Source | Dest |
|---|---|---|---|
| W | Working | ✓ | ✓ |
| A | ALU | ✓ | ✓ |
| M | Memory | ✓ | ✓ |
| B | Big | ✓ | ✓ |
| P | PM1 output | ✓ | — |
| T | TG1 output | ✓ | — |
| K | Global Counter | ✓ | ✓ |
| F | File Save | — | ✓ |
Always Available
| Key | Action |
|---|---|
| Escape | Cancel active chord · Blur any focused input field |