- Rust 100%
| crates | ||
| docs | ||
| specs/Milestones | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
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.
~/Settingsdiscovery 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 examplelhsb:create-fileandcalendar: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/lor left/right move one day,j/kor up/down move one week,[/]move one month,{/}move one year,Tjumps to today, andEnteremits a selected-date event. The selected date persists in~/.config/bastion/calendar.toml;week_start = "monday"or"sunday"controls header order. Full notes live indocs/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 indocs/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/*.mdcontains 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.mdM2-Hero-Edit-Mode.mdM3-Command-Dispatcher-And-Palette.mdM4-Plugin-Trait-Contracts.mdM5-Refactor-Builtins-To-Plugins.mdM6-Calendar-Widget.mdM7-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.