docs: plan terminal sessions, developer setup and agent design system
This commit is contained in:
@@ -0,0 +1,268 @@
|
||||
# Archipelago design system for agent-built apps
|
||||
|
||||
Status: planning draft, 2026-10-09. Companion to the
|
||||
[terminal and developer environment plan](terminal-developer-environment-spec.md).
|
||||
No tokens, components, templates or installed skills are changed by this draft.
|
||||
|
||||
An agent asked to build an Archipelago app should produce an app that belongs in
|
||||
Archipelago by construction. Give it a maintained component kit, runnable
|
||||
starters, documented screen patterns and visual references. A skill telling it
|
||||
to “use glassmorphism and orange” is insufficient.
|
||||
|
||||
The same foundation should drive Terminal, setup screens, first-party apps and
|
||||
newly generated apps. Existing third-party applications keep their own product UI;
|
||||
their Archipelago entry, launch and integration surfaces follow this contract.
|
||||
|
||||
## Evidence and design authority
|
||||
|
||||
At repository baseline `2cb1bae5`, the dashboard's design is distributed across
|
||||
`neode-ui/src/style.css`, `neode-ui/tailwind.config.js`, Vue components, and the
|
||||
short standards section of `docs/developer-guide.md`. AIUI maintains a separate
|
||||
token/style definition in `aiui/packages/app/src/styles/main.css`.
|
||||
|
||||
| Existing rule | Source observation | Contract to preserve or resolve |
|
||||
| --- | --- | --- |
|
||||
| Dark controls | Dashboard sets `color-scheme: dark` and explicit select colors | Dark baseline, including native controls |
|
||||
| Glass cards | `.glass-card`: black at 0.65 alpha, white border at 0.18, 16px radius | Preserve the established surface, not a generic frosted card |
|
||||
| Blur | Default card blur 18px; dashboard contexts deliberately suppress backdrop blur to avoid rendering corruption | Context-aware surface variants; never reintroduce blanket blur |
|
||||
| Buttons | `.glass-button`: 44px minimum, 12px radius; established focus/hover/pressed variants | Reusable buttons with full interaction states |
|
||||
| Accent | Dashboard focus/action uses `#fb923c`; AIUI accent is `#F7931A` | Named semantic tokens with explicit mapping; do not silently choose one for everything |
|
||||
| Typography | Dashboard body uses Avenir Next/system fallback, headings have bundled Montserrat; AIUI uses Inter/system fallback | Approved roles, metrics, fallback behavior and licensed assets |
|
||||
| Spacing | Tailwind extends a 4px grid | Shared spacing scale and layout examples |
|
||||
| Search | Existing search is 40px on desktop, 52px below the 920px breakpoint; right clear control retains focus | Shared search component and documented responsive behavior |
|
||||
| Card actions | Existing CSS places full-width actions at the bottom on desktop and mobile | Preserve this layout in generated card screens |
|
||||
| Modal layout | `BaseModal.vue`: pinned title/footer with independently scrolling content | Shared dialog shell with tested focus and Back behavior |
|
||||
| Mobile layout | Dynamic viewport, safe-area and audio-player offsets already exist | One documented inset contract; prevent double padding in embedded apps |
|
||||
| Success | Shared `PaymentSuccessPane.vue` and `IdentitySuccessPane.vue` express branded completion | Reuse the relevant pattern only when its completion condition is actually met |
|
||||
| Embedded canvas | AIUI embedded mode is transparent; standalone has its own background | Host owns wallpaper; apps choose explicit embedded/standalone mode |
|
||||
|
||||
These observations seed a visual audit; they do not make every legacy style a
|
||||
rule. Capture representative current screens in the running supported UI before
|
||||
extracting components. Approve Home, Apps, app detail, Settings, forms/dialogs,
|
||||
list/detail screens, Terminal and mobile examples as reference baselines.
|
||||
|
||||
The source of truth becomes versioned tokens plus components and pattern docs.
|
||||
Screenshots illustrate that contract and detect drift; they do not replace it.
|
||||
Existing dashboard and AIUI differences need explicit migration decisions.
|
||||
Preserve the current look first and make intentional design improvements visible
|
||||
in review rather than introducing them incidentally through an app template.
|
||||
|
||||
## Deliverable shape
|
||||
|
||||
Proposed layout, to be finalized against repository packaging conventions:
|
||||
|
||||
```text
|
||||
packages/archipelago-design/
|
||||
tokens/ semantic definitions and generated CSS/JSON
|
||||
styles/ scoped foundations and non-Vue component classes
|
||||
assets/ approved fonts, icons and licenses
|
||||
packages/archipelago-ui/
|
||||
components/ Vue components with documented states
|
||||
patterns/ app shells and composed screen patterns
|
||||
docs/design-system/
|
||||
index.md decision guide and version compatibility
|
||||
foundations.md typography, color, surfaces, spacing, motion
|
||||
components.md usage, states, accessibility, stable imports
|
||||
patterns.md complete screen composition and behavior
|
||||
examples/ reference captures and their matching source
|
||||
examples/archipelago-app/
|
||||
... working starter with manifest and tests
|
||||
skills/archipelago-design/
|
||||
SKILL.md concise trigger, routing and workflow
|
||||
references/ versioned design index and evaluation rubric
|
||||
```
|
||||
|
||||
Build an offline component gallery with the UI kit. Every example links to its
|
||||
source, token usage and applicable app pattern. A developer can run the gallery
|
||||
without a node session or provider API key. It must show loading, empty, error,
|
||||
success, disabled, focused, hovered and pressed states, not only the ideal screen.
|
||||
|
||||
Publish packages only as part of an explicitly authorized later implementation
|
||||
workflow. Until then these names and paths describe proposed deliverables.
|
||||
|
||||
## Token contract
|
||||
|
||||
Use framework-neutral CSS custom properties generated from a single definition.
|
||||
Vue components and any Tailwind adapters consume the same values. Prefix tokens
|
||||
with `--archy-`; do not expose arbitrary dashboard-global selectors to apps.
|
||||
|
||||
| Token family | Required coverage |
|
||||
| --- | --- |
|
||||
| Color | Canvas, card, inset, overlay, border, text primary/secondary/muted, interactive accent, focus, selected, success, warning, danger and info |
|
||||
| Typography | Body, heading and monospace families; type scale, weights, line heights and numeric alignment |
|
||||
| Space and size | 4px-based scale, page gutters, content widths, control heights, touch targets and icon sizes |
|
||||
| Shape | Card, dialog, input, button and pill radii |
|
||||
| Elevation | Card/overlay shadows, border strengths, blur-permitted and no-blur surfaces |
|
||||
| Motion | Durations/easing, permitted hover/press transitions and reduced-motion equivalents |
|
||||
| Layering | Header, navigation, menu, popover, modal and toast layers with ownership rules |
|
||||
| Viewport | Host-provided safe areas, keyboard viewport, navigation/audio offsets and embedded mode |
|
||||
| Terminal | Canvas, foreground, cursor, selection and a readable 16-color ANSI palette |
|
||||
|
||||
Make brand orange and interactive/focus orange distinct roles if preserving both
|
||||
existing values. Status colors must communicate meaning alongside text/icons.
|
||||
Name action variants by purpose: the existing orange “warning” class also serves
|
||||
primary actions, so exporting that name unchanged would teach the wrong semantics.
|
||||
|
||||
Typography must have predictable dimensions on Debian, Android and desktop
|
||||
browsers. Use only redistributable local font assets. Referencing Avenir or Courier
|
||||
New in a fallback stack does not license bundling those fonts. Freeze a tested
|
||||
body/heading/mono choice and line-height matrix in the visual review; do not let
|
||||
each generated app choose its own fonts or fetch a font CDN.
|
||||
|
||||
Check contrast on actual composited surfaces and the brightest/darkest supported
|
||||
backgrounds. Opacity values or CSS comments alone do not establish accessibility.
|
||||
Small text must remain readable, and focus must remain visible where current
|
||||
global styles suppress outlines. Low-power/no-backdrop-filter fallbacks retain
|
||||
the same hierarchy and usable contrast.
|
||||
|
||||
## Components and patterns agents can reuse
|
||||
|
||||
Extract reusable behavior from existing code; avoid giving agents a second
|
||||
lookalike library with slightly different interactions. Package components
|
||||
without dashboard stores, router assumptions, privileged RPC clients or secrets.
|
||||
Use adapters for integrations owned by the host.
|
||||
|
||||
| Foundation | First required components | Existing reference |
|
||||
| --- | --- | --- |
|
||||
| Structure | AppShell, PageHeader, Section, Card, InsetPanel, ActionRow | Dashboard CSS, app headers, card action rules |
|
||||
| Controls | Button, IconButton, TextField, PasswordField, Select, Toggle, SearchField, SegmentedControl | `ToggleSwitch.vue`, `PasswordRevealInput.vue`, `AppSearchField.vue` |
|
||||
| Navigation | Tabs, Breadcrumbs, Back action, contextual menu | Dashboard navigation, `BackButton.vue`, Cloud menus |
|
||||
| Feedback | StatusBadge, EmptyState, Skeleton, Progress, InlineError, Toast | `EmptyState.vue`, `SkeletonCard.vue`, `ToastStack.vue`, existing progress patterns |
|
||||
| Dialogs | Dialog, ConfirmDialog, credential handoff | `BaseModal.vue`, `AppConfirmModal.vue`, `AppCredentialInterstitial.vue` |
|
||||
| Data | ListRow, responsive table/list, detail key/value row, copy action | Existing app lists, `CopyButton.vue` |
|
||||
| Terminal | TerminalShell, SessionList, SessionRow, ConnectionStatus, mobile key strip | New consumers of the same foundation |
|
||||
|
||||
Each public component documents supported props/events/slots, sizing, keyboard
|
||||
behavior, accessibility, states and examples. Shared helpers must respect context:
|
||||
the current modal helper captures Escape and arrow keys, which is unsuitable
|
||||
for a terminal, editor or other widget that owns those keys. Fix/reuse that
|
||||
behavior through explicit contracts rather than blindly wrapping Terminal in it.
|
||||
|
||||
Provide composed patterns for:
|
||||
|
||||
- A searchable collection with filters, list/grid view, empty state and bottom
|
||||
card actions.
|
||||
- A detail screen with back navigation, metadata, status and primary action.
|
||||
- Settings grouped by task, with visible validation, save progress and retry.
|
||||
- A multi-step setup flow with skip/resume, honest progress and recovery.
|
||||
- First launch and credential handoff, including apps with their own login.
|
||||
- A destructive confirmation that names its target and data-preservation effect.
|
||||
- A session picker and terminal that clearly distinguish Close from End session.
|
||||
|
||||
Copywriting is part of the contract: concise task labels, useful error recovery,
|
||||
explicit pending versus complete states, no raw internal exception as the sole
|
||||
user message, and appropriate units/time formatting. Technical detail is
|
||||
available on demand. App-generated progress must reflect actual work.
|
||||
|
||||
## App shells and host integration
|
||||
|
||||
Supply a preferred Vue/TypeScript starter and a small portable HTML/CSS example.
|
||||
Existing React or other framework applications consume the tokens/styles and
|
||||
behavior contracts; do not require a framework rewrite to package an app.
|
||||
Full additional framework bindings follow actual demand and have their own
|
||||
acceptance, rather than presenting CSS classes as equivalent accessible widgets.
|
||||
|
||||
New starters include local assets, locked dependencies, scripts, manifest,
|
||||
container definition, health check, persistent-data example, tests and a complete
|
||||
reference screen. A starter must build and run from its copied location without
|
||||
monorepo-only aliases. It cannot require fetching current dashboard CSS at runtime.
|
||||
|
||||
The host integration contract defines:
|
||||
|
||||
- Explicit standalone versus embedded appearance. Embedded apps use a transparent
|
||||
canvas where appropriate; they do not add a duplicate wallpaper or navigation
|
||||
shell. Standalone mode still has a complete, readable canvas.
|
||||
- Versioned, non-secret theme/inset messages if runtime synchronization is needed.
|
||||
Validate sender origin, source window and payload; no wildcard privileged
|
||||
message bridge. An app must remain usable with no host handshake.
|
||||
- Exactly one owner for top/bottom safe-area padding and fixed player/navigation
|
||||
clearance. Test the actual Companion WebView, not just a mobile screenshot.
|
||||
- Existing launch interfaces and app-gate behavior from the developer docs.
|
||||
Asset URLs work under their supported base path and HTTP/HTTPS entry points.
|
||||
- Nostr signer, media controls and credential handoff only through their supported
|
||||
APIs. Visual kit installation does not give an app host management access.
|
||||
|
||||
Package tokens/components with the app's pinned kit version. Evolve them with
|
||||
documented compatibility and migrations. Runtime theme values may be forwarded
|
||||
through the agreed contract; runtime JavaScript/CSS replacement is not the update
|
||||
mechanism. A platform update must not silently break every installed app.
|
||||
|
||||
## Agent workflow
|
||||
|
||||
The app skill always routes new UI work through `archipelago-design`. The system
|
||||
skill does the same when a system modification affects a visible screen. A
|
||||
backend-only request loads no unnecessary design material.
|
||||
|
||||
For relevant tasks the agent:
|
||||
|
||||
1. Reads the design index, supported kit version and matching pattern; identifies
|
||||
existing components before creating new ones.
|
||||
2. Inspects the reference screen and its source, then selects the closest starter.
|
||||
3. Implements the requested behavior using shared components and semantic tokens.
|
||||
4. Exercises normal, loading, empty, invalid, failed and successful states.
|
||||
5. Renders standalone and embedded previews at the required viewports; inspects
|
||||
captures, keyboard behavior and actual component geometry.
|
||||
6. Runs app checks and supplies the working preview, component/token provenance,
|
||||
results and any deliberate design exceptions.
|
||||
|
||||
Make that loop easy: `archy app new`, `archy app preview` and `archy app check`
|
||||
should supply the starter, preview fixtures and relevant checks. Those are
|
||||
proposed tools in the terminal plan, not currently implemented commands.
|
||||
Ordinary changes within the requested task proceed through this loop without
|
||||
requiring approval for every edit. A new shared design primitive or intentional
|
||||
departure is identified in the review, with its use case and visual evidence.
|
||||
|
||||
The skill should tell agents how to find and use the design system, not make
|
||||
them recreate it from a long list of adjectives. Keep the entrypoint concise;
|
||||
conditional references cover forms, layout, terminal interaction, media and
|
||||
signer flows. Templates and screenshots belong in reusable assets, not prose
|
||||
that the agent has to transcribe.
|
||||
|
||||
## Design conformance and definition of done
|
||||
|
||||
Combine targeted static checks, interaction tests and visual review. Static
|
||||
checks cannot prove a coherent design; screenshots cannot prove an accessible
|
||||
or correct interaction.
|
||||
|
||||
| Gate | Acceptance |
|
||||
| --- | --- |
|
||||
| Shared foundation | New UI imports the approved kit/version; bespoke color/font/radius/z-index values need a named exception, with allowances for content such as charts and user imagery |
|
||||
| Visual hierarchy | Reference-matched page width/gutters, type roles, card surfaces, action placement and density |
|
||||
| Responsive layout | 320, 390, 768 and 1440px widths plus phone landscape; 200% text zoom; no accidental horizontal page overflow |
|
||||
| Input | Keyboard-only use, visible focus, sensible tab order, labels, dialog focus containment/restoration and Back behavior; terminal keys remain intact |
|
||||
| Touch | 44px usable targets for new mobile controls, reachable persistent actions, no essential hover-only interaction |
|
||||
| States | Loading, empty, offline, denied, validation error, retry and success demonstrated with deterministic fixtures |
|
||||
| Appearance | Dark native controls, foreground/background contrast, reduced motion, no-blur fallback and locally available fonts |
|
||||
| Host modes | Embedded/standalone, HTTP/HTTPS where supported, software keyboard, safe areas, audio-player offsets and Companion |
|
||||
| Runtime truth | Success and readiness only follow actual confirmed results; theme/state changes do not erase form or session work |
|
||||
| Regression | Shared component changes compared against representative dashboard and app reference captures before release |
|
||||
|
||||
Choose per-component visual-diff tolerances after baseline capture; avoid a
|
||||
single permissive threshold that conceals layout regressions. Stabilize fonts,
|
||||
viewport, fixture data and animations. Review intended baseline changes rather
|
||||
than automatically accepting new screenshots when CI fails.
|
||||
|
||||
Behavioral skill evaluation should use realistic tasks with no hidden design
|
||||
brief: build a bookmarks app, add a settings form, create an app with first-run
|
||||
credentials, adapt a non-Vue app, and improve Terminal's session picker. Inspect
|
||||
the generated artifacts and previews for component reuse, consistent appearance,
|
||||
correct manifest integration and usable failure states. Repeat on a fresh
|
||||
environment to ensure success does not rely on this checkout or an agent's
|
||||
conversation history.
|
||||
|
||||
## Implementation order
|
||||
|
||||
1. Audit representative existing screens; resolve accent/typography/blur and
|
||||
embedded-mode decisions; record the approved reference set.
|
||||
2. Extract semantic tokens and the first components while preserving current
|
||||
dashboard rendering. Migrate a small representative slice to prove parity.
|
||||
3. Build the offline gallery, app shell and working starter. Use Terminal/setup
|
||||
as real consumers so the foundation is exercised immediately.
|
||||
4. Package the app/design skills with matching docs and assets; run realistic
|
||||
generation tasks against the starter and gallery.
|
||||
5. Add scoped conformance checks to app validation and qualification; migrate
|
||||
additional first-party surfaces incrementally.
|
||||
|
||||
App generation cannot be called complete while agents still invent the visual
|
||||
foundation. Completion means a new agent, a new workspace and an ordinary app
|
||||
request reliably produce a working, recognizably Archipelago result.
|
||||
@@ -0,0 +1,524 @@
|
||||
# Archipelago terminal and developer environment plan
|
||||
|
||||
Status: planning draft, 2026-10-09. No runtime implementation or installation is
|
||||
part of this change. Repository baseline: `2cb1bae5ce244d387679f90951d62fd030ebf228`.
|
||||
|
||||
Archipelago should let an owner open a real terminal, resume previous work,
|
||||
configure their system, and ask a preinstalled coding agent to build an app that
|
||||
looks and behaves like Archipelago. The experience must work from the dashboard,
|
||||
local console, and SSH, with the same tools and discoverable commands.
|
||||
|
||||
The user requirements are:
|
||||
|
||||
- Bring Omarchy's initial setup and development capabilities to Archipelago.
|
||||
- Ship Codex ready to launch, with guided personal authentication.
|
||||
- Make closing and resuming terminal sessions easy and reliable.
|
||||
- Ship local skills that help agents modify the system and build apps using the
|
||||
actual developer documentation.
|
||||
- Make visual and interaction consistency an enforced part of app creation.
|
||||
- Plan in a separate worktree, without conflicting with current release work.
|
||||
|
||||
The companion [agent design system plan](archipelago-agent-design-system-spec.md)
|
||||
defines the shared UI kit, agent workflow, app templates, and visual acceptance.
|
||||
That work is a dependency of the app-building experience, not finishing polish.
|
||||
|
||||
## Product outcome
|
||||
|
||||
On a newly installed node, Terminal opens to a usable shell with a small welcome
|
||||
panel offering Setup, Resume, Build an app, Work on Archipelago, and Help. The
|
||||
shell is immediately usable; onboarding is dismissible and resumable. Existing
|
||||
owners get the same environment through an upgrade that preserves their files,
|
||||
configuration, credentials, and uninstall decisions.
|
||||
|
||||
A representative first session:
|
||||
|
||||
1. Open Terminal from the dashboard or launch it locally.
|
||||
2. See the node, workspace, account, and any existing sessions clearly identified.
|
||||
3. Run the setup guide, select editor/toolchains, and sign in to Codex.
|
||||
4. Choose Build an app and describe the app. The agent loads Archipelago's app
|
||||
and design guidance and starts from the maintained starter.
|
||||
5. Review a working local preview, including mobile and failure states.
|
||||
6. Close Terminal while a build or agent task runs.
|
||||
7. Reopen it, select the named session, and continue where it was left.
|
||||
8. Install the candidate through the existing app lifecycle on a chosen test
|
||||
node, then contribute through ngit when publication is requested.
|
||||
|
||||
## Current implementation and gaps
|
||||
|
||||
These are source findings, not live-node acceptance results.
|
||||
|
||||
| Surface | Current source | Required change |
|
||||
| --- | --- | --- |
|
||||
| Dashboard terminal | `neode-ui/src/components/CLIPopup.vue`: development-only simulated commands; production SSH instructions and a literal default password | Real terminal and session picker; connection information derived from actual setup state |
|
||||
| Terminal state | `neode-ui/src/stores/cli.ts`: open/close boolean | Server-owned session inventory; client UI state independent of process lifetime |
|
||||
| Keyboard | `neode-ui/src/App.vue`: global F and other shortcuts; `useModalKeyboard.ts` captures arrows and Escape | A terminal focus boundary so shell, editor and agent keys reach the PTY |
|
||||
| Console setup | `image-recipe/archipelago-scripts/archipelago-menu.sh`: legacy menu, eager installer-tool installation, direct container setup | Shared command catalog and current orchestration; opening a menu does not install software |
|
||||
| Shell onboarding | `scripts/welcome-banner.sh`: banner and SSH information, including literal default password; may wait for networking | Short local welcome, accurate access state, fast offline shell startup |
|
||||
| ISO | `image-recipe/build-debian-iso.sh` invokes a relocated copy of `_archived/build-auto-installer-iso.sh` | Integrate the actual active build path, despite its archived filename |
|
||||
| Upgrade | `scripts/self-update.sh`, `core/archipelago/src/bootstrap.rs`, runtime assets | One versioned environment payload and repeatable migration shared with ISO |
|
||||
| Existing development access | Pinned ngit installer and GitWorkshop app already exist | Reuse these; keep ngit the contribution platform |
|
||||
| App packaging | `docs/app-developer-guide.md`, manifest spec and Rust parser | Turn existing contracts into agent workflows, validated starters and development commands |
|
||||
| Design | Dashboard CSS/Tailwind, reusable Vue components, separate AIUI CSS | Extract and document a coherent shared contract; see companion plan |
|
||||
|
||||
The backend uses Hyper/Tokio and existing WebSocket handlers; the developer guide
|
||||
currently calls it Axum. Several contributor documents also show unrestricted
|
||||
`cargo test`, conflicting with `AGENTS.md`. Correct those documentation examples
|
||||
before packaging them as agent instructions. On a live node, backend execution
|
||||
must use `scripts/test-backend-isolated.sh`.
|
||||
|
||||
## Omarchy reference and capability mapping
|
||||
|
||||
Research baseline: the official [Omarchy repository](https://github.com/omacom/omarchy),
|
||||
formerly reached through `basecamp/omarchy`. Its default branch was `quattro` at
|
||||
[`fcf9eeb5c454739f3f23cdfd7d57d77b12961025`](https://github.com/omacom/omarchy/tree/fcf9eeb5c454739f3f23cdfd7d57d77b12961025).
|
||||
The latest published release returned during research was
|
||||
[v4.0.4](https://github.com/omacom/omarchy/releases/tag/v4.0.4), published September 15,
|
||||
2026, resolving to `c668141e9c42b13c80c9ca4ea108e11708c5e8a5`.
|
||||
The inventory below describes the pinned default-branch source; it does not
|
||||
assert that every item is present in that published release.
|
||||
|
||||
“All setup capabilities” means explicit disposition of the setup surface, not
|
||||
silently omitting desktop-specific features. The proposed core release covers
|
||||
the terminal, system setup and development rows below. Hardware/desktop options
|
||||
remain named follow-on work; completion of the core is not full Omarchy parity.
|
||||
|
||||
| Omarchy capability | Proposed Archipelago equivalent | Delivery |
|
||||
| --- | --- | --- |
|
||||
| Owner, keyboard, hostname, timezone, optional Git name/email | Resume existing node onboarding; configure developer identity separately from appliance identity | Core |
|
||||
| Deferred provisioning for another owner | Leave personal developer credentials unset; first owner completes setup | Core |
|
||||
| Separate packaged defaults, user finalization and migrations | Versioned system payload, per-user setup receipts, explicit reset with backup | Core |
|
||||
| First-login welcome, shortcuts, network/update guidance | Welcome and searchable help shared by terminal and dashboard | Core |
|
||||
| Bash completion, history, prompt, fuzzy finding and directory navigation | Bash, completion, Starship, fzf and zoxide with readable console fallback | Core |
|
||||
| File/search/system tools | ripgrep, fd, bat, eza, jq, less, man, tldr, btop and fastfetch | Core |
|
||||
| Terminal selection: Foot, Alacritty, Ghostty, Kitty | Browser terminal plus console/SSH; local emulator adapters compatible with the actual kiosk display stack | Browser/console core; native choices follow-on |
|
||||
| tmux sessions, panes, developer layouts | Named persistent sessions and editor/agent/shell layouts; same sessions accessible by SSH | Core |
|
||||
| Neovim and selectable editors | nano available immediately; maintained Neovim profile and editor preference; GUI editors when desktop support exists | Core terminal editors; GUI follow-on |
|
||||
| Mise development environments | Versioned Node/npm, Rust, Python/uv profiles first; project-local versions | Core |
|
||||
| Ruby/Rails, Bun, Deno, Go, PHP/Laravel/Symfony, Elixir/Phoenix, Java, Zig, OCaml, .NET, Clojure, Scala | Optional profiles in the same installer catalog, each with architecture and verification metadata | Parity follow-on |
|
||||
| Git, lazygit, GitHub CLI | Git/lazygit and ngit/GitWorkshop first-class; gh optional for other upstream projects | Core |
|
||||
| Lazy agent launchers | Codex actually bundled; optional adapters for other agent CLIs | Core Codex; provider expansion follow-on |
|
||||
| Default-agent selector and starter prompts | Codex selected initially for a fresh setup; preserve existing preference; system/app/design entry prompts | Core |
|
||||
| Agent account selection and usage panel | Explicit account context and supported login status; manual account profiles before considering usage automation | Follow-on |
|
||||
| Local model tools | Integrate the existing Ollama app and compatible provider setup; downloads and model resource needs visible | Follow-on |
|
||||
| Bundled system and app-building skills | Archipelago system, app and design skills with offline references and templates | Core |
|
||||
| Development databases: MySQL, PostgreSQL, Redis, MongoDB, MariaDB, MSSQL | Scoped rootless Podman development recipes, isolated ports/data and generated credentials | Core PostgreSQL/Redis-compatible recipe; remaining recipes follow-on |
|
||||
| Container tooling | Existing rootless Podman; documented Compose compatibility where tested | Core |
|
||||
| DNS, Wi-Fi, network QR, SSH daemon and SSH agent setup | Existing network/SSH controls exposed through shared setup operations, with accurate connection details | Core |
|
||||
| Fingerprint, FIDO2 and privilege preferences | Hardware-aware account-security setup; no copied Arch PAM configuration | Follow-on |
|
||||
| Monitors, keyboard bindings, input, XCompose | Kiosk/console equivalents through existing system configuration; desktop-specific adapters separately | Core console basics; desktop follow-on |
|
||||
| Browser, terminal, editor and dictation defaults | Editor/agent/terminal choices first; browser/dictation surfaced when relevant to the device | Core subset; follow-on adapters |
|
||||
| Themes, fonts, background and prompt | Shared Archipelago tokens and terminal palette; preserve owner customization | Core |
|
||||
| Shell plugins and customization hooks | Versioned extension points and documented user overrides; dashboard extensions require a separate supported contract | User overrides core; plugins follow-on |
|
||||
| Package, TUI, web-app and development installation menus | Curated tool catalog plus existing Archipelago app catalog; distinguish developer tools from managed apps | Core |
|
||||
| Commercial services, GUI apps, gaming, Windows VM | Individual optional app/desktop integrations, inventoried as a separate parity backlog | Follow-on, not preinstalled on nodes |
|
||||
| Update, reset, snapshots, direct boot | Integrate Archipelago update/recovery choices; explicit reset scope and backup | Core existing operations; new boot/snapshot features follow-on |
|
||||
| Hardware detection and vendor fixes | Existing Archipelago hardware configuration, capability detection and separately qualified device fixes | Core detection; device adapters follow-on |
|
||||
| Crash diagnosis skill | Sanitized diagnostics with an explicit handoff to the chosen agent; preserve source versus live evidence | Follow-on |
|
||||
|
||||
Primary source routes for the inventory:
|
||||
|
||||
- [Provisioning and file layout](https://github.com/omacom/omarchy/blob/fcf9eeb5c454739f3f23cdfd7d57d77b12961025/docs/file-layout.md),
|
||||
[setup form](https://github.com/omacom/omarchy/blob/fcf9eeb5c454739f3f23cdfd7d57d77b12961025/install/provisioning/setup-form.sh),
|
||||
[setup and installation menu](https://github.com/omacom/omarchy/blob/fcf9eeb5c454739f3f23cdfd7d57d77b12961025/default/omarchy/omarchy-menu.jsonc).
|
||||
- [Base packages](https://github.com/omacom/omarchy/blob/fcf9eeb5c454739f3f23cdfd7d57d77b12961025/install/omarchy-base.packages),
|
||||
[shell initialization](https://github.com/omacom/omarchy/blob/fcf9eeb5c454739f3f23cdfd7d57d77b12961025/default/bash/init),
|
||||
[terminal and tmux](https://github.com/omacom/omarchy/blob/fcf9eeb5c454739f3f23cdfd7d57d77b12961025/manual/15-terminal.md).
|
||||
- [Development profiles](https://github.com/omacom/omarchy/blob/fcf9eeb5c454739f3f23cdfd7d57d77b12961025/bin/omarchy-install-dev-env),
|
||||
[agent setup](https://github.com/omacom/omarchy/blob/fcf9eeb5c454739f3f23cdfd7d57d77b12961025/install/user/mise.sh),
|
||||
[agent launcher implementation](https://github.com/omacom/omarchy/blob/fcf9eeb5c454739f3f23cdfd7d57d77b12961025/bin/omarchy-mise-install),
|
||||
[development databases](https://github.com/omacom/omarchy/blob/fcf9eeb5c454739f3f23cdfd7d57d77b12961025/bin/omarchy-install-docker-dbs).
|
||||
- [System skill](https://github.com/omacom/omarchy/blob/fcf9eeb5c454739f3f23cdfd7d57d77b12961025/default/agents/skills/omarchy/SKILL.md)
|
||||
and [app skill](https://github.com/omacom/omarchy/blob/fcf9eeb5c454739f3f23cdfd7d57d77b12961025/default/agents/skills/omarchy-app/SKILL.md).
|
||||
|
||||
Adapt the workflows to Debian and Archipelago's manifest-driven runtime. In
|
||||
particular, Omarchy's app skill produces Qt desktop apps; Archipelago's starter
|
||||
must produce an Archipelago app. Omarchy's agent launchers download tools on use;
|
||||
the user's requirement here is stronger: Codex must already be installed. Its
|
||||
database recipes and permission-changing aliases are not defaults to transplant.
|
||||
Any reused upstream files need their original license notices and provenance.
|
||||
|
||||
## Terminal experience
|
||||
|
||||
Use a real PTY with a bundled terminal renderer, proposed `@xterm/xterm` with
|
||||
fit/search support. It must run Bash, nano/Neovim, lazygit, tmux and Codex without
|
||||
special simulated command handling. Exact dependency versions are selected and
|
||||
locked during implementation qualification.
|
||||
|
||||
The dashboard entry opens a large resizable terminal on desktop and a full-height
|
||||
surface on mobile. It provides session name, workspace/node context, connection
|
||||
status, session switcher, New, Resume, Search, copy/paste, font size, fullscreen,
|
||||
and Close. End session belongs in a separate menu with a clear running-work warning.
|
||||
Mobile adds an Esc/Ctrl/Tab/arrows key strip and works with the software keyboard.
|
||||
|
||||
Use the shared Archipelago shell/components around an opaque, readable terminal
|
||||
canvas. Terminal content uses a packaged monospace font with Unicode support;
|
||||
the console gets an ASCII-compatible fallback. Apply the design plan's focus,
|
||||
contrast, reduced-motion and safe-area rules.
|
||||
|
||||
While terminal input has focus, F, Escape, arrows, Ctrl+C, Ctrl+D, Ctrl+R, Tab,
|
||||
editor keys and tmux prefixes belong to the terminal. Closing uses a visible
|
||||
control or a documented terminal-specific shortcut. Do not reuse the current
|
||||
modal keyboard handler unchanged. Ctrl+C interrupts the foreground job; Ctrl+D
|
||||
has normal shell semantics. Focus can move to toolbar controls and back.
|
||||
|
||||
## Persistent sessions and one-click resume
|
||||
|
||||
This is a core release criterion, including the first usable terminal milestone.
|
||||
|
||||
Session execution lives on the node in a dedicated, supervised user environment.
|
||||
Use tmux as the initial persistence engine; a browser WebSocket is an attachment,
|
||||
not the owner of the shell process. Keep the tmux server and worker scope outside
|
||||
the dashboard/backend service's kill group. Ordinary manager deployment must not
|
||||
tear down developer sessions.
|
||||
|
||||
Prefer one tmux server/socket and supervised process scope per managed session,
|
||||
so ending one session cannot kill a shared server containing other work. Keep
|
||||
those sockets private to the developer account. SSH and local-console resume use
|
||||
the same session registry and attachment helper rather than guessing tmux names.
|
||||
Cross-device resume refers to browsers connected to the same node; moving live
|
||||
processes between different nodes is outside this contract.
|
||||
|
||||
| Event | Required behavior |
|
||||
| --- | --- |
|
||||
| Close terminal panel, navigate away, close tab, kill browser | Detach; shell, build and agent continue |
|
||||
| Reopen Terminal | Show running and recent sessions; Resume most recent available in one action; do not auto-create duplicates |
|
||||
| Switch session | Detach the old view and attach the selected session |
|
||||
| Network drop or mobile sleep | Show Reconnecting; reauthenticate if needed, then attach to the existing session |
|
||||
| Dashboard reload or backend restart | Session survives; rediscover it from node state |
|
||||
| Second browser/device | Same authenticated owner sees sessions; explicit transfer of input control |
|
||||
| Logout/session expiry | Revoke browser attachments immediately; background work remains; a fresh owner login is required to reattach |
|
||||
| Explicit End session | Confirm when work is active, terminate that session's process scope, record ended state; do not remove its files |
|
||||
| Shell exits | Show ended status and exit information where available; offer a new shell in that workspace |
|
||||
| Broker crash | tmux/process scope survives if its supervisor survives; reconcile inventory, without replaying input |
|
||||
| Node reboot/power failure | Processes stop. Keep workspace/session metadata and offer Reopen workspace and Resume Codex conversation; never label this a live process resume |
|
||||
|
||||
The picker shows a user-editable name, workspace, creation/last-attachment time,
|
||||
Running/Detached/Ended/Interrupted state, and optional pinned status. Scope every
|
||||
entry to a node and stable owner identity. LocalStorage may remember selection;
|
||||
it is never the authoritative session registry.
|
||||
|
||||
Persist metadata atomically under the workspace account's private state directory.
|
||||
Record schema version, opaque session ID, owner ID, node ID, boot ID, tmux target,
|
||||
workspace ID/path, created/attached timestamps and lifecycle state. Treat tmux and
|
||||
supervised process state as authority for whether a session is still alive.
|
||||
After a crash, reconcile orphan sessions and interrupted creates before accepting
|
||||
another create with the same request ID.
|
||||
|
||||
Place workspaces and agent state on durable storage with an explicit ownership,
|
||||
quota and backup policy; do not consume a small system partition accidentally.
|
||||
Expose a familiar `~/Work` entrypoint while recording the actual workspace root.
|
||||
Reconnecting never requires a fresh Git checkout. A missing or unmounted workspace
|
||||
is a visible recovery state, not permission to create an empty replacement at the
|
||||
same path. Deleting session metadata and deleting project files are distinct actions.
|
||||
|
||||
Keep bounded in-memory scrollback and restore the current terminal screen from
|
||||
the surviving tmux attachment. Do not assume client-side scrollback survived.
|
||||
Reboot persistence covers metadata and saved files; transcript recording is a
|
||||
separate opt-in setting because terminal output can include credentials.
|
||||
|
||||
Initial proposed limits: eight sessions per owner, one active input controller
|
||||
per session, a 10,000-line scrollback ceiling plus a byte ceiling, and bounded
|
||||
per-connection queues. Do not kill detached work because a browser idle timer
|
||||
expired. Make resource use visible and allow explicit stop/cleanup. Qualify CPU,
|
||||
memory and disk limits on the smallest supported node before choosing defaults.
|
||||
|
||||
Input is never automatically replayed after reconnect: a lost acknowledgement
|
||||
does not establish whether Enter or a command reached the shell. Resize events
|
||||
are idempotent. A newly attached terminal redraws from the current PTY state.
|
||||
Revoke the previous writer before granting a new writer lease; read-only views
|
||||
can be a later addition. User labels and working directories must never be
|
||||
interpolated into shell command strings.
|
||||
|
||||
## Execution and connection architecture
|
||||
|
||||
Proposed components and responsibility boundaries:
|
||||
|
||||
```text
|
||||
Dashboard terminal entry / SSH / local console
|
||||
|
|
||||
authenticated attachment
|
||||
|
|
||||
Terminal session service -- session metadata and ownership
|
||||
|
|
||||
supervised developer user + tmux + PTY
|
||||
|
|
||||
Bash / editor / Codex / project toolchains
|
||||
|
|
||||
archy CLI -- existing typed management operations
|
||||
```
|
||||
|
||||
Add a small terminal session service with a local Unix-socket control interface.
|
||||
The existing management backend validates owner authorization and brokers
|
||||
short-lived attachments; it does not execute arbitrary shell strings in an RPC
|
||||
handler. Use typed arguments and fixed executable paths for session creation.
|
||||
An implementation spike must verify PTY allocation, systemd ownership, tmux
|
||||
reattachment and Codex rendering before committing to the broker library.
|
||||
|
||||
Prefer a dedicated developer Unix account, separate from the existing
|
||||
`archipelago` service account, with its own home, rootless container storage and
|
||||
no mounts of production wallets/secrets. Keep the current service account and
|
||||
data ownership intact. The inspected ISO builder grants the service account broad
|
||||
passwordless sudo; using that account for a browser shell would grant equivalent
|
||||
host authority. A new developer account alone is not proof of isolation: test
|
||||
actual filesystem permissions, sockets, groups and sudo policy.
|
||||
|
||||
Provide an explicit System administration context for system changes. Routine
|
||||
supported operations should use the same typed management operations as the UI;
|
||||
arbitrary host-shell administration needs a distinct authenticated operator
|
||||
session. These boundaries must still permit authorized agents to configure the
|
||||
system efficiently. Do not require repeated consent for each step of an already
|
||||
authorized operation, or treat a skill as an access-control mechanism.
|
||||
|
||||
Initial web access is for the node owner. Public app sessions, guests, peer
|
||||
identities and iframe signers do not imply terminal authorization. Multi-user
|
||||
workspace sharing is outside the first release; reject unsupported mappings.
|
||||
|
||||
Prefer a dedicated terminal browser origin with a minimal self-hosted bundle,
|
||||
no app iframes or external scripts, and narrow authenticated handoff from the
|
||||
dashboard. A same-origin subpage reduces bundle complexity but does not isolate
|
||||
it from same-origin scripts. Resolve origin, certificate and Companion handling
|
||||
in the connection spike before shipping. The
|
||||
[xterm.js integration guide](https://xtermjs.org/docs/guides/security/) specifically
|
||||
requires application-level WebSocket authentication/origin handling and careful
|
||||
treatment of terminal output.
|
||||
|
||||
Remote terminal transport requires verified HTTPS/WSS. Existing plain-HTTP
|
||||
dashboard users get a working secure-terminal entry and SSH alternative; do not
|
||||
force a global dashboard HTTPS migration as a side effect. Retain current private
|
||||
management ingress controls, IPv6 support and explicit proxy trust. Never infer
|
||||
terminal authorization from a forwarded hostname or a private IP alone.
|
||||
|
||||
The protocol contract must include:
|
||||
|
||||
- Create/list/rename/end session operations with CSRF checks, stable owner
|
||||
binding and idempotent create/end behavior.
|
||||
- A single-use, short-lived attachment grant bound to session, owner and exact
|
||||
terminal origin. No reusable dashboard cookie or API key in a query string.
|
||||
- An authenticated WebSocket with bounded pre-auth time and no PTY output before
|
||||
authorization; validate Origin separately from CORS and revalidate on reconnect.
|
||||
- Input bytes, output bytes, resize, connection state and exit messages; bounded
|
||||
frame sizes, queue backpressure and slow-reader behavior.
|
||||
- Immediate attachment revocation on logout/credential revocation. No automatic
|
||||
input replay, automatic command rerun or unauthenticated reconnect.
|
||||
- Process-group cleanup only for explicit termination; metadata-only audit logs,
|
||||
excluding command contents, keystrokes, credentials and terminal output.
|
||||
- Terminal titles/links treated as untrusted text; external links require a user
|
||||
gesture; clipboard escape sequences cannot silently read/write the clipboard.
|
||||
|
||||
## Setup and tool distribution
|
||||
|
||||
Provide a searchable `archy` CLI and matching setup TUI; the existing
|
||||
`archipelago` executable remains the backend daemon. All `archy` commands in
|
||||
this document are proposed interfaces, not commands available today.
|
||||
|
||||
| Proposed command | Purpose |
|
||||
| --- | --- |
|
||||
| `archy setup` | Resume setup, show installed/available/deferred items |
|
||||
| `archy commands --json` | Agent-readable command descriptions, inputs, privileges and side effects |
|
||||
| `archy doctor` | Read-only, bounded health checks with actionable findings |
|
||||
| `archy session list` / `resume <id>` | Discover and attach to existing work |
|
||||
| `archy dev setup <profile>` | Install a declared, versioned toolchain profile |
|
||||
| `archy agent` | Launch selected agent in the selected workspace |
|
||||
| `archy app new <id>` | Create from a maintained Archipelago starter |
|
||||
| `archy app check <path>` | Manifest, build, integration and design checks |
|
||||
| `archy app preview <path>` | Start an isolated local preview and return its URL |
|
||||
| `archy app install <path> --node <target>` | Explicit candidate deployment through supported orchestration |
|
||||
| `archy system <operation>` | Discoverable adapters to supported system operations |
|
||||
| `archy skills status` | Show installed skill/doc/kit versions and local overrides |
|
||||
|
||||
Use one command catalog for the CLI, setup menu and skill references. Each entry
|
||||
declares what it reads/changes, required privilege, supported machines, expected
|
||||
output, progress and rollback/recovery behavior. Structured status is for agents;
|
||||
the human menu uses clear task names. Missing capability is a visible explanation.
|
||||
|
||||
First-run sequence: verify network/time/access status; create or select a workspace;
|
||||
set optional Git identity and editor; confirm installed tools; offer toolchain
|
||||
profiles; sign in to Codex; offer a sample app or system task. Users can skip and
|
||||
resume individual steps. Authentication is never an ISO build step. Run nothing
|
||||
interactive in noninteractive shells, SCP/SFTP, remote command execution or CI.
|
||||
|
||||
Ship offline: shell essentials, tmux, Git/ngit, Codex binary, local documentation,
|
||||
skills and design-kit assets. Developer profiles add the complete Node/frontend,
|
||||
Rust/backend or Python environment and build prerequisites. Offline capability
|
||||
must be stated precisely: shell/docs/Codex launch can work offline; model calls,
|
||||
uncached dependencies and external login require connectivity. Plan a full
|
||||
offline developer bundle as a separate profile if all build caches are required.
|
||||
|
||||
Use signed/versioned payloads and per-architecture hashes. Debian packages and
|
||||
user toolchains have separate ownership. Core tools update through qualified
|
||||
releases; opening a shell or running `codex` must not silently update binaries.
|
||||
Optional tool installs show download size, source, version and progress. Respect
|
||||
package-manager locks and existing mise/rustup/nvm installations. Do not prune a
|
||||
binary version beneath a running session.
|
||||
|
||||
State is versioned per machine and per user with pending/running/done/failed/skipped
|
||||
steps; write completion only after verification. Concurrent setup is serialized.
|
||||
Preserve user dotfiles through small managed includes and explicit overrides;
|
||||
preview changes and back up touched configuration during an explicit reset.
|
||||
Network interruption, disk exhaustion and reboot leave resumable state.
|
||||
|
||||
## Codex integration
|
||||
|
||||
Bundle a qualified stable Codex release for each supported architecture, verified
|
||||
against a pinned artifact. The official
|
||||
[CLI installation documentation](https://learn.chatgpt.com/docs/codex/cli)
|
||||
documents standalone and npm installation; the release implementation should
|
||||
resolve exact packaging and pin it rather than executing an unversioned installer
|
||||
on every node.
|
||||
|
||||
Use normal Codex authentication in the developer user's private environment.
|
||||
Support browser login and the official device-code option for remote/headless
|
||||
sessions when available; API-key login is another explicit option. The
|
||||
[authentication documentation](https://learn.chatgpt.com/docs/auth) describes
|
||||
these flows. Do not collect credentials in an Archipelago transcript or copy the
|
||||
node's wallet identity into agent configuration. The UI reports Installed,
|
||||
Sign-in required, Ready or Error based on actual results.
|
||||
|
||||
Honor the user's Codex configuration, permissions and model choice. A launcher
|
||||
selects a workspace and skill context; it does not inject unrestricted execution
|
||||
flags. A local skill is local guidance, not a claim that Codex inference is local.
|
||||
Explain the selected provider and what workspace content may be sent to it during
|
||||
setup, alongside any self-hosted alternative.
|
||||
|
||||
During an ordinary disconnect, resume the same running Codex process in tmux.
|
||||
After an ended session or reboot, offer the official `codex resume` workflow in
|
||||
the matching workspace. Do not automatically reissue the last task. Preserve
|
||||
agent history/configuration separately from disposable build caches, and keep
|
||||
credentials out of ordinary app export/support bundles.
|
||||
|
||||
## Local skills that enable real work
|
||||
|
||||
Ship a small coordinated skill family with one obvious entrypoint. Keep the
|
||||
instructions actionable and references focused; avoid copying the whole manual
|
||||
into every prompt. The skill-creator guidance informs this structure: precise
|
||||
triggers, reusable resources, progressive disclosure and behavioral validation.
|
||||
|
||||
| Skill | Trigger and outcome | Required resources |
|
||||
| --- | --- | --- |
|
||||
| `archipelago` | Configure, troubleshoot or change an Archipelago system; route app/UI work to the companion skills | System map, command catalog, config ownership, task recipes and recovery |
|
||||
| `archipelago-app` | Build, package, test or update an Archipelago app using the developer contract | Developer docs, manifest schema, starter assets, launch/auth/signer examples, lifecycle checks |
|
||||
| `archipelago-design` | Create or change an Archipelago UI, including apps, setup and Terminal | Shared tokens/components, pattern gallery, app shells, screenshots and visual checks |
|
||||
|
||||
For a system task, the agent should locate the correct config/operation, inspect
|
||||
current state, make the requested scoped change, validate it and report the result.
|
||||
Teach recipes for networking, SSH, tool installation, terminal preferences,
|
||||
service diagnosis and supported app configuration. Prefer maintained management
|
||||
commands; when direct configuration is necessary, explain owned versus generated
|
||||
files, the minimal affected service and reversal. Repository changes go into a
|
||||
separate branch/worktree; installed-node changes target an explicitly identified
|
||||
node and retain a scoped backup. Planning requests stay planning requests.
|
||||
|
||||
For an app task, the agent reads `docs/app-developer-guide.md` and
|
||||
`docs/app-manifest-spec.md`, follows the design plan, chooses a starter, implements
|
||||
the requested behavior, validates it and supplies a runnable preview. Package
|
||||
with pinned images/build contexts, rootless execution, declared storage/secrets,
|
||||
health checks and truthful interfaces. Include HTTP/HTTPS, iframe/Companion,
|
||||
first-run credentials and Nostr signer behavior where relevant. Publication and
|
||||
live installation are distinct requested steps.
|
||||
|
||||
The skill must explain non-obvious runtime facts: manifests copied only into
|
||||
`/opt/archipelago/apps` are replaced at backend start; runtime payload promotion
|
||||
and signed-catalog precedence matter. Installed status is not launch readiness.
|
||||
Pre-catalog testing must not replace the signed catalog. Test uninstall/reinstall
|
||||
with data preservation on a disposable target. Use `AGENTS.md` over stale testing
|
||||
examples. Payments, wallets and uninstall decisions retain their existing
|
||||
invariants; a generic repair must not reset them.
|
||||
|
||||
Proposed source layout: `skills/archipelago*` plus a versioned reference bundle and
|
||||
app starter assets. Ship managed copies under a versioned read-only system path
|
||||
and expose one discoverable link per skill per agent. Current official
|
||||
[Codex skill guidance](https://learn.chatgpt.com/docs/build-skills) supports
|
||||
repository `.agents/skills`, user `~/.agents/skills`, administrator
|
||||
`/etc/codex/skills`, and symlinked skill directories. Qualify discovery with the
|
||||
pinned CLI, including from outside this repository. Preserve local skills and
|
||||
overrides; avoid duplicate skill names from multiple discovery paths.
|
||||
|
||||
Each bundle records the source revision, supported Archipelago version, manifest
|
||||
schema and design-kit version. Installed skills use matching offline docs;
|
||||
repository development uses that checkout's docs. Version mismatch is visible.
|
||||
Future command names in this plan must not be taught as available until shipped.
|
||||
|
||||
## App creation and design integration
|
||||
|
||||
The default new app is a Vue/TypeScript app using the shared Archipelago UI kit,
|
||||
with a pinned container build, manifest, icon, tests and local preview. Supply a
|
||||
framework-neutral CSS/token starter for existing non-Vue apps; port semantic
|
||||
behavior deliberately instead of depending on dashboard globals.
|
||||
|
||||
Provide a complete example app with a useful list/detail/settings flow, persistent
|
||||
data, loading/empty/error/success states, a manifest and lifecycle evidence.
|
||||
Extend it with optional signer/media examples only when those features are used.
|
||||
The starter must render correctly both embedded and standalone. A third-party
|
||||
upstream app can retain its own UI; the consistency contract governs the app's
|
||||
Archipelago wrapper and newly authored Archipelago screens.
|
||||
|
||||
Local development data and ports are separate from production apps. Bind previews
|
||||
to loopback by default and provide an authenticated preview path for remote users.
|
||||
Development databases get unique project-scoped names, persistent volumes and
|
||||
credentials; they must not attach to live Bitcoin/LND or production app databases.
|
||||
|
||||
## Delivery sequence
|
||||
|
||||
| Phase | Deliverable | Exit evidence |
|
||||
| --- | --- | --- |
|
||||
| 0 | Finalize command/session contracts, origin/account choice and design baseline | Reviewed wireframes, reference screens, privilege map and pinned Omarchy inventory |
|
||||
| 1A | Persistent terminal service and browser/SSH attachment | Real shell + Codex TUI; close/reopen, network loss, manager restart and ownership tests |
|
||||
| 1B | Shared design foundation, gallery and starter | Dashboard-derived tokens/components; consistent app at desktop/mobile sizes |
|
||||
| 2 | Core setup/tool payload and Codex onboarding | Fresh/offline/upgrade/retry matrix; correct account state and user override preservation |
|
||||
| 3 | System/app/design skills and app-development commands | Realistic agent tasks produce correct scoped system changes and a consistent packaged app |
|
||||
| 4 | Integrated candidate qualification | Real node and Companion resume/design acceptance, resource tests and packaged ISO/OTA checks |
|
||||
| 5 | Remaining Omarchy parity adapters | Each inventory row supported or explicitly retained with reason and acceptance target |
|
||||
|
||||
1A and 1B can be independent implementation workstreams once phase 0 contracts
|
||||
are agreed. This planning session has not launched implementation agents.
|
||||
App-generation functionality is incomplete until 1B and the skill acceptance pass.
|
||||
|
||||
Expected code boundaries: Terminal UI/store/keyboard handling; new terminal
|
||||
service and typed management routes; shared CLI/setup catalog; versioned tool and
|
||||
skill packaging; design-kit extraction; app starter/validation; ISO and OTA
|
||||
integration. Keep each in a focused contribution. Coordinate shared frontend
|
||||
styles, backend routing and packaging files before implementation starts.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
| ID | Required proof |
|
||||
| --- | --- |
|
||||
| TERM-01 | Real PTY supports editors, completion, colors, Unicode, signals and Codex; no fake production commands |
|
||||
| TERM-02 | Start a long-running fixture and edit a file, close Terminal/tab/browser, reopen and resume the exact session and process |
|
||||
| TERM-03 | Offline/reconnect, mobile sleep, frontend reload, backend restart and attachment-service restart do not duplicate execution |
|
||||
| TERM-04 | A second device resumes after owner authentication; writer transfer is atomic; another identity cannot list/attach/terminate |
|
||||
| TERM-05 | End session stops only its process scope; logout revokes access; neither operation deletes workspace files |
|
||||
| TERM-06 | Reboot retains workspace metadata, labels interrupted sessions accurately and offers Codex conversation resume without rerunning commands |
|
||||
| TERM-07 | Terminal keyboard ownership, focus, text selection, paste, resize, mobile keyboard and screen-reader mode work |
|
||||
| AUTH-01 | Missing/expired/replayed grants, cross-origin sockets, forged proxy headers and app/guest credentials fail before shell I/O |
|
||||
| AUTH-02 | Developer user cannot read production wallets/secrets or control production container sockets; authorized system workflow works |
|
||||
| SETUP-01 | Fresh install and existing-node upgrade deliver the same core capabilities; Codex version works before network access |
|
||||
| SETUP-02 | Failed download, package lock, low disk, reboot and concurrent setup recover without false completion or broken existing tools |
|
||||
| SETUP-03 | Existing dotfiles, editor/agent choices, credentials, app data and uninstall decisions are preserved |
|
||||
| AGENT-01 | A system-change task uses the correct operation/config, verifies its result and preserves unrelated services |
|
||||
| AGENT-02 | An app-building task follows actual developer docs and passes manifest/build/launch/lifecycle checks |
|
||||
| DESIGN-01 | Agent-built apps satisfy the companion design plan using shared assets/components, including failure and mobile states |
|
||||
| PKG-01 | Exact candidate OTA and ISO contain matching tools, docs, skills and UI-kit versions; restore previous payload without removing user work |
|
||||
|
||||
Backend unit execution uses `scripts/test-backend-isolated.sh`. PTY/process and
|
||||
account-isolation integration tests run in disposable users/VMs, not a funded
|
||||
production node. Terminal continuity tests use observable process IDs/output and
|
||||
file checks, not a mocked “resumed” label. UI tests include 320/390/768/1440 pixel
|
||||
layouts, landscape, enlarged text and actual Companion input on a device.
|
||||
|
||||
Record source tests, disposable integration, actual-node acceptance and packaged
|
||||
artifact results separately. Preserve unfinished requirements in
|
||||
`docs/post-1.8.22-regressions-20261001.md` and the current release acceptance ledger;
|
||||
this feature plan closes none of them. Later publication follows ngit review and
|
||||
merge, then identical accepted main/tag objects on both ngit and Gitea, with the
|
||||
required mirror checks. No release version or publication date is reserved here.
|
||||
|
||||
## Decisions to resolve during design review
|
||||
|
||||
The proposed defaults are a dedicated developer account, tmux persistence,
|
||||
minimal terminal origin, bundled Codex, Bash, and a Vue starter with portable
|
||||
design tokens. The implementation review must settle terminal-origin/certificate
|
||||
handling on every supported ingress, the supported operator-shell model, the
|
||||
exact first-release tool profile, and the approved visual baseline. Native
|
||||
terminal emulators and the broader desktop parity backlog need separate device
|
||||
compatibility decisions. None of these questions prevents reviewing this plan.
|
||||
Reference in New Issue
Block a user