Release v0.3.0 — Event Orchestration, Human-in-the-Loop, Daily-Driver TUI
Some checks failed
Deploy (Gitea) / deploy (push) Failing after 3s

Test results: 86 pass, 0 fail across 21 suites. TUI integration: 7/7 pass.

Features:
- 9-vector deterministic dispatcher gates (secrets, paths, shells, network)
- Human-in-the-Loop Flight Plan workflow for blocked actions
- Event Orchestrator: unified hooks + cron + tier-based routing
- Context Manager: stack-based project scoping with persistence
- Model-Tier Routing: per-slot provider cascades with privacy filter
- Memory Scope Segmentation: memex/session/project with scope-aware retrieval
- Asynchronous Embedding Gateway: provider-agnostic vectors with cron job
- TUI Experience: scrollback, history, status bar, themes, tab completion
- v0.2.x Backfill Remediation: 14 stale/todo/stub items resolved
- Multi-distro deployment: Debian + Fedora, systemd, Docker
- 31 literate Org files with full prose

Fixes:
- CLI test: fiveam:is t -> pass/fail handler-case
- Cascade-parsing integration test: load provider before checking
- Version strings 0.2.0 -> 0.3.0 in core-communication, tui-main, architecture
This commit is contained in:
2026-05-06 15:50:20 -04:00
parent 1d91fcc6cc
commit 42e07801ce
15 changed files with 643 additions and 321 deletions

View File

@@ -4,7 +4,7 @@
#+FILETAGS: :docs:manual:
* Introduction
Welcome to Passepartout v0.1.0 (The Autonomous Foundation). Passepartout is a neurosymbolic AI agent and a Lisp Machine operating system designed to autonomously maintain your Memex (knowledge base) and interact with you via multiple, equal-citizen interfaces.
Welcome to Passepartout. Passepartout is a neurosymbolic AI agent and a Lisp Machine operating system designed to autonomously maintain your Memex (knowledge base) and interact with you via multiple, equal-citizen interfaces.
* Installation
Passepartout is bootstrapped via a single shell script.
@@ -12,17 +12,10 @@ Passepartout is bootstrapped via a single shell script.
** Quick start (curl)
#+begin_src bash
curl -fsSL https://raw.githubusercontent.com/amrgharbeia/passepartout/main/passepartout.sh | bash -s configure
curl -fsSL https://raw.githubusercontent.com/amrgharbeia/passepartout/main/passepartout | bash -s configure
#+end_src
** From a clone
#+begin_src bash
git clone https://github.com/amrgharbeia/passepartout.git ~/projects/passepartout
~/projects/passepartout/passepartout.sh configure
#+end_src
Both methods will:
This will:
1. Install system dependencies (SBCL, Emacs, git, curl, socat — detected for Debian or Fedora)
2. Install Quicklisp (Common Lisp package manager)
3. Tangle literate Org sources into runnable Lisp
@@ -41,26 +34,54 @@ The system is configured via a `.env` file in the project root. Essential variab
Because of the Unified Envelope Architecture, the kernel treats all clients as interchangeable. You must first boot the background daemon:
#+begin_src bash
./passepartout.sh --boot &
./passepartout --boot &
#+end_src
** Terminal User Interface (TUI)
For a rich, split-pane terminal experience:
#+begin_src bash
./passepartout.sh tui
./passepartout tui
#+end_src
** Command Line Interface (CLI)
For raw, pipe-friendly interaction:
#+begin_src bash
./passepartout.sh cli
./passepartout cli
#+end_src
** Emacs Integration
Passepartout functions as your "foveal vision" inside Emacs.
1. Ensure `org-agent.el` is loaded.
2. Run `M-x passepartout-connect`.
3. Interact via the `*passepartout-chat*` buffer.
** TUI Commands
When connected via the TUI, the following commands are available (type them in the input area and press Enter):
| Command | Action |
|-----------------------+--------------------------------------------------------|
| ~/help~ | List all available commands |
| ~/focus <project>~ | Set the agent's foveal focus to a project by name |
| ~/scope memex~ | Set scope to full memex (all projects visible) |
| ~/scope session~ | Set scope to current session only |
| ~/scope project~ | Set scope to focused project only |
| ~/unfocus~ | Clear the foveal focus |
| ~/approve HITL-xxxx~ | Approve a pending HITL action by its token |
| ~/deny HITL-xxxx~ | Deny a pending HITL action by its token |
| ~/theme <name>~ | Switch theme (dark, light, solarized, gruvbox) |
| ~/cost~ | Toggle session cost display in status bar |
| ~/voice on~ | Enable voice capture (planned v0.7.3) |
| ~/voice off~ | Disable voice capture |
| ~/quit~ | Save history and exit (planned v0.3.3) |
For multi-line input, start the line with ~\~ then press Enter to insert a newline without sending.
** Human-in-the-Loop Approval
When the Dispatcher blocks a high-risk action (shell command, network call, core file modification), it creates a Flight Plan requiring your approval.
1. The TUI displays a yellow message: ~→ HITL required: /approve HITL-ab12~
2. Review the proposed action in the Dispatcher trace (expand with Tab)
3. Type ~/approve HITL-ab12~ to approve, or ~/deny HITL-ab12~ to deny
4. Approved actions are re-injected into the pipeline and executed
5. Denied actions are discarded and the Dispatcher records the decision as a permanent rule
Each approval or denial teaches the Dispatcher — the rule counter in the status bar (~[Rules: 47]~) increments with every decision.
* The Memex Structure
Passepartout assumes a local folder structure representing your "Memex".
@@ -75,17 +96,31 @@ Passepartout assumes a local folder structure representing your "Memex".
The ~configure~ command supports both Debian-based (Ubuntu, Pop, Mint) and Fedora-based (RHEL, Rocky) distributions. It detects your distro automatically and installs the correct packages.
#+begin_src bash
./passepartout.sh configure # interactive
./passepartout.sh configure --non-interactive # headless
./passepartout.sh configure --with-firewall # also open port 9105
./passepartout configure # interactive
./passepartout configure --non-interactive # headless
./passepartout configure --with-firewall # also open port 9105
#+end_src
After configuration, you can re-run ~configure~ any time to add providers or link gateways.
** Binary install (save-lisp-and-die)
For platforms where SBCL cannot be installed (corporate laptops, shared hosts, constrained environments), a self-contained binary is provided:
#+begin_src bash
curl -fsSL https://github.com/amrgharbeia/passepartout/releases/latest/download/passepartout -o passepartout
chmod +x passepartout
./passepartout daemon
#+end_src
This binary bundles SBCL, all required Lisp code, native embedding inference, and a Swank server on port 4005. The experience is identical to a source install — the REPL is available, skills hot-reload, and the image is mutable. Memory survives snapshots.
The binary is a convenience for constrained platforms. It is not a sealed container. The system remains constitutionally open — connect with SLIME, trace functions, inspect memory objects, modify the system while it runs.
** systemd service (auto-start on boot)
#+begin_src bash
./passepartout.sh install service
./passepartout install service
#+end_src
Installs a user-level systemd unit that starts the daemon on login. Logs are available via ~journalctl --user -u passepartout.service -f~.
@@ -93,7 +128,7 @@ Installs a user-level systemd unit that starts the daemon on login. Logs are ava
To remove:
#+begin_src bash
./passepartout.sh uninstall service
./passepartout uninstall service
#+end_src
** Docker
@@ -110,7 +145,7 @@ This builds an image from ~debian:trixie-slim~ with all dependencies pre-install
** Backup
#+begin_src bash
./passepartout.sh backup ~/my-backup.tar.gz
./passepartout backup ~/my-backup.tar.gz
#+end_src
Backs up the config, data, and memex directories.
@@ -118,7 +153,31 @@ Backs up the config, data, and memex directories.
** Restore
#+begin_src bash
./passepartout.sh restore ~/my-backup.tar.gz
./passepartout restore ~/my-backup.tar.gz
#+end_src
Restores from a backup file. Run ~passepartout doctor~ afterward to verify integrity.
Restores from a backup file. Run ~passepartout doctor~ afterward to verify integrity.
* Troubleshooting
** The daemon won't start
- Check SBCL is installed: ~which sbcl~
- Run ~passepartout doctor~ to diagnose
- Check port 9105 is free: ~lsof -i :9105~
- Check the log output for errors
** The TUI connects but shows "Disconnected"
- The daemon may have crashed. Run ~passepartout daemon~ in another terminal
- If the daemon is running, check it's listening: ~lsof -i :9105~
- Use ~/reconnect~ (planned v0.6.0) to reconnect without restarting the TUI
** The LLM returns garbage or fails to respond
- Run ~passepartout doctor~ to verify your LLM provider keys
- Check ~PROVIDER_CASCADE~ in your ~.env~ file
- Try switching models: edit ~.env~ and restart the daemon
- If using local models via Ollama, verify Ollama is running: ~ollama list~
** Memory fails to load on startup
- Check ~/memory.snap~ exists and is valid S-expression format
- Run ~passepartout doctor~ to diagnose memory integrity
- If corrupted, delete ~/memory.snap~ and restart — the daemon starts with empty memory