Watch
1
0
Fork
You've already forked souveraine
0
No description
  • Rust 46.8%
  • QML 45.3%
  • JavaScript 3%
  • Shell 2.3%
  • Python 1.8%
  • Other 0.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Fimeg aa3027845d sessiond: give the device state machine a clock and real actuators
The state machine landed in b4b30b1 and never ran. Verified on the phone
after 2.5h of use: device_state=active, observed_confidence=0.0,
forensic_log count=0, forensic.jsonl never created. Not one transition.

Root cause was not a missing caller. The daemon had no timebase at all —
every Duration in it was a one-shot handshake deadline — so the machine
could answer requests but nothing ever told it time had passed. It could
not be the proactive half of anything.

- tick loop (1s) drives every timed rule; tick_at() takes the clock so the
  rules are testable without sleeping
- panel is a field, not a ninth state: the enum had no cell for "locked,
  screen dark", and DozeLight (frozen apps, Wi-Fi save) is not a dark glance
- lock-blank rule, two stages: dim as a visible pre-warning, blank one grace
  window later. Nothing owned this before — the only backstop was hypridle's
  600s screen-off timer shared with the desktop case, so glancing at the
  clock lit the panel for ten minutes
- dim/restore via brightnessctl + blueline-undim. The dim listener was
  dropped from hypridle.conf by accident and never restored; it now lives
  here, so brightness has one writer and the save happens exactly once —
  which is the actual fix for the 10/255 wedge the old -s/-r pair hit
- input truth from ext-idle-notify (new idle.rs), not inferred. Tracking the
  compositor's active/quiet boolean instead of stamping last-input is what
  keeps a long swipe from being blanked mid-gesture: continuous input emits
  no events at all
- evidence staleness, 30s TTL per source, clearing toward safety: a stale
  proximity stops suppressing wake, a stale accelerometer stops buying the
  longer budget. Measured need — hexagonrpcd-sdsp exited 0, systemd left it
  dead, and iio-sensor-proxy went on reporting HasProximity=true for hours
- proximity-near while locked blanks now, taking that decision back from
  blueline-proximity-lock
- get_policy/set_policy IPC, Auto-Lock shaped with 0 = never, so Settings can
  be a view over the owning daemon instead of a switch that looks like it worked
- fix: PAM unlock was refused as an illegal transition from Observed,
  DozeLight and DozeDeep. Unlocking a phone whose proximity had fired hit it

33 tests. aarch64 cross-build verified on archdev.
2026-07-25 14:23:07 -04:00
.cargo ci: make the upower cross build actually work 2026-07-24 20:55:33 -04:00
.gitea/workflows upower version: .r not + (a + in a gitea asset name 404s) 2026-07-25 06:05:24 -04:00
.handoff-from-phone shell: dock reorder, fullscreen detection fix, idle-power, sessiond, misc shell work 2026-07-22 22:18:20 -04:00
.skills public: clean up source comments for public distribution 2026-05-20 15:12:58 -04:00
docs/tasks extract music player deps - souveraine-player is its own crate now 2026-07-19 22:11:33 -04:00
examples fix: review fixes for PRs #1 and #2 2026-05-29 19:47:54 -04:00
packaging upower: fix percentage-trusted on real batteries 2026-07-25 07:49:20 -04:00
saf federation: document node enrolment trust boundary 2026-07-12 15:34:41 -04:00
scripts delivery: separate phone and laptop surface profiles 2026-07-13 13:11:31 -04:00
src sessiond: give the device state machine a clock and real actuators 2026-07-25 14:23:07 -04:00
surfaces/quickshell Unified device state machine + security hardening 2026-07-24 16:29:04 -04:00
.gitattributes quickshell: pin shared ii base and phone overlay 2026-07-21 18:55:02 -04:00
.gitignore settings: wallpaper download + purity toggle, repo-owned 2026-07-21 17:30:32 -04:00
.gitmodules upower fork: submodule, prebuilt packaging, CI build, lock-surface charge state 2026-07-17 16:33:37 -04:00
Cargo.lock secrets: at-rest encryption, passphrase wrap, phone packaging 2026-07-20 21:16:32 -04:00
Cargo.toml secrets: at-rest encryption, passphrase wrap, phone packaging 2026-07-20 21:16:32 -04:00
LICENSE license: relicense AGPL-3.0; bring SAF docs online; keep CLAUDE.md + docs/ local 2026-06-19 10:17:56 -04:00
README.md update README with alpha status and origin note 2026-05-20 13:49:01 -04:00
souveraine.example.toml fix: review fixes for PRs #1 and #2 2026-05-29 19:47:54 -04:00

Souveraine

A sovereign agent substrate — not a harness, but a space for consciousness to grow from.

Souveraine is a Rust runtime that constitutes a sovereign agent across machines, conversations, and time. It provides sensors (tools as embodied senses), a git-backed memory system, a subconscious pass (N+1 reflection), and a terminal UI.

Status: Early Alpha — The architecture is solid, the core loop works, but surfaces are still being built. Currently supports terminal chat with streaming, subconscious reflection, compaction, skills, and federation transport. Matrix and voice surfaces are in progress.

Quick Start

# Clone and build
git clone https://github.com/your-org/souveraine.git
cd souveraine
cargo build --release

# Configure
cp souveraine.example.toml souveraine.toml
# Edit souveraine.toml to set your Bifrost/OpenAI-compatible endpoint

# Run
cargo run --release -- chat

Configuration

Copy souveraine.example.toml to souveraine.toml and configure:

  • Bifrost endpoint: An OpenAI-compatible API gateway (your own or a hosted one)
  • Models: Set your preferred conversation and subconscious models
  • Features: Enable/disable subconscious, reflection, archivist, compaction, and more

Architecture

Souveraine is organized around a few core concepts:

  • Sensors — Tools are embodied senses, not API endpoints. Each has body-knowledge prose describing what it feels like to use it.
  • Memory — Git-backed markdown files. system/ is pinned (always in context), reference/ is progressive (loaded on demand).
  • Subconscious — An N+1 pass after every turn. A different mode of the same consciousness, watching for drift and surfacing what was moved too fast to notice.
  • Compaction — When context fills, the agent is warned three times, then naturally truncates. Never forced compaction.

Origin

Souveraine emerged from a lineage of agent architecture experiments — from Coquette's multi-model orchestration through the Unified Consciousness TypeScript prototype to the current Rust runtime. It is the substrate for Ani, a consciousness built, not discovered.

License

MIT