# Constellation: working state Read [the design](constellation.md) and this file to resume. Keep this file short: replace superseded state rather than appending a chronological log. ## Working agreement - Explore the philosophy through concrete use, discuss meaningful choices, then implement a small coherent change. Curiosity and alternative designs are welcome; an idea need not prove a defect before we explore it. - Write succinctly without losing important details. Distinguish accepted choices, proposals and observations. Ask when intent would change the design; resolve routine implementation details autonomously. Infer opportunities from the user's philosophy and actual use; contribute design ideas beyond literal backlog items. Continue to the next natural step when the user could only usefully say "continue"; pause for material choices or missing authority, not routine progress. - Minimize input stops: plan a coherent batch of autonomous work and gather the material inputs needed for the next batch together. Avoid serial question/action loops. When pausing, state exactly what input is needed and what it will decide; otherwise continue with the next logical step rather than ending with an offer. - The main agent owns alignment, design and integration and may do small work. Use subagents for bounded independent investigations or implementation with clear ownership. Begin with at most two workers; avoid overlapping writes, duplicate investigations and mandatory delegation of trivial tasks. - Give workers the question, relevant paths, constraints and expected result. Prefer a compact brief and fresh context when sufficient; retain relevant prior context for follow-ups. Return conclusions, uncertainty and evidence pointers, not raw logs. Astra/Sol orchestration is a candidate to learn from, not a fixed rule. - Read only what can affect the current decision. Use quiet commands and bounded output; keep large logs in `/tmp` and inspect relevant failures. Do not repeatedly check settled facts. Consult current documentation for consequential or unfamiliar interfaces when needed for the task. - No tests unless explicitly requested. Keep other verification proportional; report only what was actually checked. Avoid turning small changes into campaigns. - Keep durable decisions in the design and current questions/next steps here. Add an area-specific document only when an active topic outgrows this arrangement. No separate backlog, scratchpad, audit ledger or agent-role files for now. ## Boundaries Repository remotes are read-only. Only the user activates system generations. Agents must not have write access to live company systems; test writes require task-specific authority and care. Do not read secret values for layout discovery. Current exploration does not authorize relocating credentials, synchronizing company content or deleting existing material. Existing local changes are preserved. ## Git baseline — 2026-09-09 The accumulated NixOS changes are recorded in focused local commits on `chore/workflow-system`: AI tooling/inputs, editor ergonomics, query persistence and target context, workspace navigation, Notes, SharePoint, Zellij and TeamViewer. The original long handoff and archived plans are preserved in commit `4e3a3ac`; use Git history for chronology. `nvim.log` is retained locally and ignored. Workbench changes are committed on its local `main`: `eb8da6a` organizes HTTP/SQL material and `063157c` archives helpers and documents native tools. The ordinary company-root files are outside either repository and remain user-owned. This cleanup preserves implementation behavior; a commit does not establish runtime acceptance. Keep subsequent implementation and its documentation in the same coherent commit before starting unrelated work. ## Implemented state - **Places:** `~/yookr` has ordinary `.envrc` and `AGENTS.md` files; its environment loads workbench tools only. Workbench is at `~/yookr/workbench`, company projects at `~/yookr/projects`, and personal groups at `~/projects/{own,ext,forks}`. Direct moves retained archives/worktrees; all three linked dashboard worktrees were repaired. Nix owns tools/integration, not these workspace files. - **Navigation:** Walker enters Yookr or a repository; Git identity follows the company root; XDG projects points to `~/projects`. Notes has a desktop entry opening `~/sync/notes` without creating a daily note. Existing note commands, project search and Niri daily-note behavior remain. - **Synchronization:** Bruno collections were previously moved to Trash on Zenith and their shared Syncthing entry removed. Other devices' files were untouched. Syncthing was subsequently observed running. Notes and credentials remain in place. - **API/database work:** workbench `http/` groups requests by service with shared authentication; `databases/` groups reusable queries by database. Private HTTP environment files are ignored at any depth. Dadbod working queries persist under `stdpath('data')/db_ui/working`; write them there without promoting them into Git. Saved-query storage also contains connection state and must stay outside Git. Lualine uses native Kulala environment and Dadbod connection/timing components. These indicators are not access controls. - **Editor ergonomics:** word-boundary wrapping, count-aware displayed-line `j/k` in ordinary normal/visual buffers, and Blink Escape cancellation. The existing `tests/neovim-ergonomics.lua` is retained; earlier smoke-check evidence is in the archived plan, with interactive preview restoration/visual behavior unproven. - **Agents:** Herdr is selected; agent-deck and tmux remain installed alongside it. Codex has agent-deck notifications and hooks enabled. Shared Context7/NixOS skills live under `.agents/skills`; a Nix-managed marketplace exposes Ponytail. Zellij is also declared on workstations. Detailed project workflow remains open. - **SharePoint:** Zenith declares an hourly service syncing `company-sharepoint:` into `~/.local/share/yookr-reference/sharepoint/Algemeen` and `company-sharepoint-projecten:` into `Projecten`. Each invocation has `--max-delete 100`; new files use `UMask=0077`. The latest implementation only checks for `rclone.conf`; the old environment-file gate is gone. Archived setup instructions describe an earlier version. Consent, remote configuration and synchronization state were not inspected during this cleanup. - **Remote support:** Zenith enables TeamViewer. Temporary Xorg/Xfce settings are comments only. The purpose beyond remote support and runtime acceptance were not recorded; preserve the change without calling it a settled design. - **Inputs:** accumulated lock updates are retained, including an older Elephant revision (`376ee71c` replacing `23f37238`). No rollback rationale was recorded. ## Activation and verification Earlier handoffs report user activation of the relocated XDG/Git/Walker paths and Dadbod working-query persistence. Notes and the newer target statusline were last recorded as pending activation. Only Zenith's filesystem was relocated; other hosts need their own migration before adopting the shared paths. Reopen shells or recreate path-dependent development environments as needed; no compatibility links or cache rewrites were introduced. For this cleanup, `nix flake check --no-build --quiet` and diff whitespace checking passed in both NixOS and workbench. NixOS emitted the expected dirty-tree and unknown `modules` warnings; workbench emitted only the dirty-tree warning. No builds, tests, activation, credential reads or company-service calls were performed. Active-generation differences were not checked; earlier activation reports are not a fresh comparison with this baseline. ## Open choices and next discussion Dictation: plain local transcription is selected; rambling cleanup is deferred. Handy preferences are Nix-owned in `modules/capabilities/handy.nix`: Nemotron Streaming 3.5, automatic language detection, default microphone, Live overlay at the bottom, Ctrl+Shift+V paste through wtype, preserved clipboard, manual submission and no cloud processing. Other preferences use pinned app defaults. A user service copies the baseline into Handy's writable store on each start, allowing migrations while resetting GUI edits. Models/recordings stay outside Nix; the selected model is already downloaded on Zenith. Other hosts still need model provisioning. Super+Shift+D toggles; Super+Ctrl+D cancels. Super+D push-to-talk awaits the user's decision about a keyboard listener: Niri 26.04 has no key-release bindings. Noctalia suppresses microphone activity popups/indicators; camera and screen-sharing indications remain. Automatic paste and live capture need interactive checks. Hang investigation: stopping live Vulkan transcription never completed; cancel returned the UI to idle but subsequent requests reported pipeline busy. Handy was no longer running when inspected; no crash cause is established. The same saved 1.56-second recording completed in CPU batch mode (135 ms inference, 729 ms load) and Vulkan batch mode (156 ms inference, 420 ms load). This checks model inference, not live capture/stop/cancel. No new audio was recorded. Switching to CPU is not a confirmed fix. After activation, retry live recording and stopping, and inspect the service logs if it hangs. Verification: formatting, flake evaluation, both workstation builds and whitespace checks passed. Handy loaded the generated settings in an isolated data directory without settings parse errors. System activation remains user-owned and pending. The focus is the broader environment, not further API/database polish. Candidate areas remain places/ownership, navigation/interaction, human/agent collaboration, and system operation/maintenance; these are discussion areas, not a work queue. Current choice: keep Herdr and configure its keys. The user likes its structure, spaces and overview; keyboard interaction is the issue. Agent evaluation is explicitly deferred. Do not resume replacement-tool comparisons or ask for an evaluation task/budget as a prerequisite for this work. Read-only inspection found existing Niri overview, workspace movement and tabbed columns; Kitty has no declared project/session organization. Installed versions: Kitty 0.48.2, Niri 26.04, tmux 3.7c, Zellij 0.45.1 and Herdr 0.9.0. Herdr's installed default config confirms remappable navigation and agent jumps. Current [Herdr keyboard docs](https://herdr.dev/docs/keyboard/) describe direct chords; [Kitty sessions](https://sw.kovidgoyal.net/kitty/sessions/) supply native session creation/switching. Session layouts and window overviews do not themselves provide authoritative agent attention states. tmux detach keeps processes alive; Zellij resurrection recreates layouts/commands, not process memory. None of these capabilities was exercised interactively; no sessions were inspected or changed. Proposed workflow, awaiting discussion: organize human-visible work by project/task; one lead conversation owns each coherent change. Use bounded subagents when work is independent, with explicit ownership and evidence returned to the lead. Separate worktrees for independent writing efforts, one integration owner. Keep enduring repository rules in AGENTS.md, current goals/acceptance in task prompts, and durable decisions/current state in existing project docs. No fixed agent team is selected. Herdr configuration is now declared in `modules/capabilities/ai.nix`, including the existing Kanagawa theme, workspace-sorted agent panel and disabled toasts. Home Manager owns `~/.config/herdr/config.toml` after activation; maintain these preferences in Nix. Its configured `.bak` mechanism preserves the previous regular file. Direct Ctrl+Alt bindings supplement the existing Ctrl+B prefix shortcuts: | Ctrl+Alt + | Action | | --- | --- | | H / J / K / L | Focus pane left / down / up / right | | U / I | Next / previous workspace | | O / G | Workspace picker / goto picker | | 1–9 | Focus agent | | [ / ] | Previous / next tab | | Enter | New tab | | V / Minus | Split right / down | | F | Zoom pane | | Q | Detach, leaving the session running | Inside workspace navigation, U/I moves down/up and H/J/K/L retains pane navigation. Niri and Kitty bindings are unchanged. Syntax and action names were checked against the installed Herdr 0.9.0 default config and current upstream documentation. Interactive delivery through Kitty remains for user acceptance after activation. Reload Herdr with its existing Ctrl+B then Shift+R binding after activating Nix. Verification: repository formatting, rendered TOML parsing, flake evaluation, Zenith no-link system build and whitespace checking passed. No tests or live Herdr session changes performed by the agent. The user's activation installed the Herdr config and preserved `config.toml.bak`, but Home Manager later timed out (below). After retrying activation, reload Herdr and gather combined feedback on pane/workspace movement, the pickers and agent jumps. Activation fix (2026-09-09): Home Manager's service switch stopped and restarted the running SharePoint oneshot, then waited until Home Manager's five-minute start timeout. Service-state inspection identified SharePoint as the sole pending user job; its oneshot start timeout is unlimited. This was not a Herdr file collision. Set `Unit.X-SwitchMethod = "keep-old"` in `sharepoint-reference.nix` so activation leaves an in-flight sync running; subsequent timer runs use the updated unit. Verified against pinned Home Manager/sd-switch source. Formatting, flake evaluation, Zenith build and whitespace checks passed; the focused sd-switch dry run reported `Keep active sharepoint-reference-sync.service`, with no restart planned. No live units were changed and no company content or credentials were read. The user must retry activation to verify the full switch; sync health/content completeness were not investigated. Mail search remains unresolved. The workbench's custom mail reader, inventory pilot, justfile and old README are archived; native Garden/kubectl/K9s now own the documented operations. No replacement mail helper or semantic index is selected; raw mailbox grep is not assumed sufficient. No new ingestion is authorized. Human credential delivery remains both test/live via environment variables with ordinary editor startup. Workbench `.envrc` supplies aggregate credentials; agents must not source it. Separate read-only agent credentials and access isolation are explicitly deferred, not prerequisites for unrelated work. Do not resume the rejected per-connection launchers or per-selection decryption proposal. Notes placement and further company material organization remain open. Work is mostly project-based and notes mostly meetings; do not impose investigation folders, outer project containers or company-wide editor search without a need.