No description
Find a file
2026-05-19 15:24:37 -04:00
crates Complete command dispatcher palette 2026-05-19 15:24:37 -04:00
docs Complete command dispatcher palette 2026-05-19 15:24:37 -04:00
specs/Milestones Phase 1 Issue decomposition — 46 Issues across 7 Milestones 2026-05-18 08:48:38 -04:00
.gitignore Initial Bastion scaffold 2026-05-17 15:58:45 -04:00
Cargo.lock Implement clock widget timezone support 2026-05-19 15:19:29 -04:00
Cargo.toml Implement clock widget timezone support 2026-05-19 15:19:29 -04:00
README.md Complete command dispatcher palette 2026-05-19 15:24:37 -04:00

Bastion

Bastion is a portable whole-computer TUI workspace.

It is inspired by the shape of dpn-tui-next and the opinionated module model of Citadel, but it is intended to be a new portable application rather than a port of either project.

Vision

Bastion treats the computer as the workspace, not a single vault or a single project. A Bastion process is the same on every machine it runs on; the machine-specific wiring lives in ~/.config/bastion/ and is kept separate from the portable ~/Settings/*.md documents that describe the user's intent.

The core shell owns layout, focus, navigation, key handling, settings loading, and plugin lifecycle. Everything domain-specific — file browsers, editors, viewers, agent harnesses, project diagnostics — enters through the plugin contract. Plugins are first-party Rust crates compiled into the bastion binary, not dynamically loaded extensions. The same binary runs everywhere.

Current Slice

  • Three-pane terminal UI built with Rust and Ratatui.
  • LHSB: custom filesystem browser with create, read/open, rename, and trash commands.
  • Hero: selected file preview with syntax highlighting.
  • RHSB: built-in status/settings panel.
  • Plugin API workspace with compiled-in Rust plugin crates.
  • RHSB clock and calendar plugins for portable time/date surfaces.
  • ~/Settings discovery for Markdown settings documents with YAML frontmatter.
  • DPN-aligned terminal chrome using void/smoke/bone with cyan, magenta, purple, gold, and crimson accents.

LHSB Commands

  • Ctrl-Space / Ctrl-P: open the command palette.
  • Tab / Shift-Tab: move focus between LHSB, Hero, and RHSB.
  • Enter: open selected directory or read the selected file into Hero preview.
  • n: create a file under the current LHSB directory.
  • N: create a directory under the current LHSB directory.
  • u: rename the selected entry.
  • d: move the selected entry to the platform trash after typing its name.
  • Backspace / Left: move to parent directory.
  • .: toggle hidden files.
  • r: refresh.

Command Palette

  • Command ids use <scope>:<action> form, for example lhsb:create-file and calendar:focus.
  • The palette shows command titles, shortcut hints, descriptions, and ids.
  • Adding commands is documented in docs/commands.md.

Hero Commands

  • e: toggle Hero preview/edit mode when Hero is focused.
  • Ctrl-S: save the current Hero edit buffer.
  • Esc: leave Hero edit mode or cancel an active prompt.

RHSB Plugin Commands

  • Calendar: h/l or left/right move one day, j/k or up/down move one week, [/] move one month, {/} move one year, T jumps to today, and Enter emits a selected-date event. The selected date persists in ~/.config/bastion/calendar.toml; week_start = "monday" or "sunday" controls header order. Full notes live in docs/widgets/calendar.md.
  • Clock: renders local time plus up to three IANA timezones configured in ~/.config/bastion/clock.toml; supports 12h/24h display, optional seconds, and configurable accent color. Full notes live in docs/widgets/clock.md.

Create and rename prompts reject paths that leave the current LHSB directory. Delete uses trash semantics instead of direct removal.

Direction

Bastion treats the computer as the workspace. It should be able to move between machines while keeping machine-specific wiring separate from portable settings.

  • ~/Settings/*.md contains human-editable settings and control documents.
  • ~/.config/bastion/ is reserved for local runtime configuration, caches, and plugin install state.
  • Plugins declare panels, commands, file handlers, resource viewers, and settings schemas through explicit manifests and Rust trait implementations.
  • Plugins are compiled-in Rust crates. There is no dynamic plugin loading at runtime. Adding a plugin is a build-time concern, not an admin-time concern.
  • Plugin authoring notes live in docs/PLUGINS.md.

Roadmap

Phases are narrative groupings. Each phase decomposes into one or more Forgejo Milestones (in specs/Milestones/), each of which decomposes into Issues. The phases below describe shape and intent; the per-Milestone specs describe what ships.

Phase 1 — Foundation (in progress)

The portable framework. Everything that makes Bastion a working TUI workspace before any noosphere-specific wiring, machine-specific wiring, or external data sources enter. The framework must be complete enough that Phase 2+ work is strictly additive — no Phase 1 piece should require rework when Phase 2 lands.

Forgejo Milestones in specs/Milestones/:

  • M1-Pane-Focus-And-Switching.md
  • M2-Hero-Edit-Mode.md
  • M3-Command-Dispatcher-And-Palette.md
  • M4-Plugin-Trait-Contracts.md
  • M5-Refactor-Builtins-To-Plugins.md
  • M6-Calendar-Widget.md
  • M7-Clock-Widget.md

Phase 2 — Noosphere Integration

Bastion becomes useful as a noosphere editor. Markdown-aware Hero, wikilink resolution, daily-note opener, calendar wired to the Temporal/ cascade, doc indexer. This is where Bastion stops being a generic TUI workspace and starts being Nathan's noosphere editor on the Mac Studio.

Phase 3 — Federation

~/Settings/*.md synchronises across machines via a git remote (Forgejo by default). Machine-local state in ~/.config/bastion/ stays local. A Bastion running on the Mac Studio and a Bastion running on the laptop share portable intent without overwriting each other's local wiring. This is what makes the "portable whole-computer workspace" claim true.

Phase 4 — Agent Surfaces

Right-sidebar panels for Claudian, Nova, and Hermes. Chronicle viewer (addressable-mailbox view over master_chronicle.conversations). Thin REPL pane for agent-shape interactions. Demonstrates that the plugin model can host agent surfaces, not just file/edit tooling.

Team

Role Ghost
Owner NathanEckenrode
Spec author Claudian (laptop)
Builder Nova (Mac Studio)
Reviewer Claudian (laptop)

The workflow rotation follows the T.A.S.K.S. doctrine: 🜔 spec → ☤/☿ implement → 🜔 verify. For Bastion specifically: Claudian writes the spec, Nova builds and tests against it, Claudian verifies completion before close.

Project Board

Forgejo Milestones + Issues at forgejo.eckenrodemuziekopname.com/n8k99/bastion/milestones. The board is the source of truth for what is/isn't done; the spec .md files in specs/Milestones/ carry the longer-form objective + success criteria for each Milestone.

Repository

Primary remote: forgejo.eckenrodemuziekopname.com/n8k99/bastion.

Codeberg may become a public mirror once the project is further along.

Notes

The 4-tier spec model used by Citadel and Innatescript (Project > Milestone > Goal > Issue) is collapsed here to 3 tiers (README > Milestone > Issue) to match Forgejo's native primitives. The Project template content is absorbed into this README; the Goal layer is gone; what we used to call Goals are now Forgejo Milestones.