Modules¶
A Module is a top-level physical product component of Obsidience. There
are four, listed once in the starter Vault's
Architecture
Article. A Module is neither an Agent, a Task assignment nor an additional
runtime authority.
| Module | Directory | Owns |
|---|---|---|
| Harness | obsidience/harness/ |
Ontology, activation, retrieval, model selection, conversation memory, speech ingress, research, publication and the Capabilities behind every Tool |
| Shell | obsidience/shell/ (+ obsidience/ui/, obsidience/browser/edge/) |
Compositor and native Surface ownership, desktop scene targeting and panes; the shared React/Three.js graph bundle; the Edge Cast client |
| Media | obsidience/media/, obsidience/harness/media/, existing obsidience/tv/host/ adapter |
Catalogue, discovery, exact-source acquisition, content playback/delivery and progress |
| Home | Existing obsidience/lights/ and TV device adapters |
Lights and physical-device identity, commissioning, state, power, volume and remote control |
How the pieces fit¶
flowchart TB
subgraph shell["Shell"]
Q["Quickshell host<br/>panes: Chat, Reader, Reviews, Tasks, Settings…"]
G["Graph presenter<br/>QtWebEngine + React/Three.js"]
WA["Hyprland window adapter"]
HY["Hyprland"]
WA <--> HY
end
subgraph harness["Harness (API :8765)"]
RT["Realtime speech worker"]
CV["Conversation owner"]
AC["Activation compiler<br/>+ retrieval"]
ADK["Google ADK loop"]
CC["Capability core<br/>receipts · no-replay"]
SC["Scheduler<br/>specialist Tasks"]
ACT["Activity stream"]
end
V[("Vault<br/>Articles + local Git")]
LLM["llama.cpp server<br/>(local model)"]
EMB["Embedding service<br/>(CPU)"]
HS["Hindsight<br/>(optional)"]
MIC(["Microphone / speaker"]) <--> RT
Q -->|Chat| CV
RT -->|final transcripts| CV
CV --> AC
SC --> AC
AC <--> V
AC <--> EMB
AC --> ADK
ADK <--> LLM
ADK --> CC
CC -->|"window, launch, observe"| WA
CV <-->|"recall / delivery"| HS
CC --> ACT
AC --> ACT
ACT --> G
- Chat and speech both enter the Executive's one ADK conversation. The speech connection is infrastructure: it has no Task, Runbook or second reasoning path.
- The activation compiler builds the Thinking Packet from the Agent's identity, bindings and up to five retrieved Knowledge Articles.
- The ADK loop streams model steps from the local llama.cpp server and hands every Tool call to the capability core.
- The Shell displays state and accepts typed commands. It adds no scheduler, memory store or reasoning engine; Hyprland owns composition and input.
- The graph presenter lights exactly what the activity stream reports: supplied context, Tool dispatch and results, Reader loads, committed writes and Review outcomes.
Project layout¶
| Path | Responsibility |
|---|---|
obsidience/harness/ |
API, CLI, conversation, execution, capabilities, models, knowledge and speech |
obsidience/shell/ |
Native desktop and session adapters, panes and graph presenter |
obsidience/ui/ |
Shared React/Three.js graph and interface bundle |
obsidience/browser/edge/ |
Edge Cast extension, its native messaging host and theme policy |
obsidience/media/ |
Media server units, provider launchers and mounts |
obsidience/tv/ |
Existing mixed layout: Media playback/delivery in host/, shared units in systemd/, Home TV device agent in firetv-agent/ |
obsidience/lights/ |
Home lighting controller, commissioning, encrypted native Matter state and its unit |
obsidience/defaults/vault/ |
Reviewed, distributable starter Articles |
obsidience/vault/, evidence/, state/ |
Ignored live Vault, Sources and runtime state |
obsidience/scripts/ |
Development and runtime entry points |
LICENSES/ |
License texts of adopted code, recorded in artifacts.lock.json |
Unit sources live beside the code that owns them: obsidience/harness/systemd/,
obsidience/shell/systemd/, obsidience/tv/systemd/ and the Media units in
obsidience/media/. An installation copies them into ~/.config/systemd/user.
Home groups the existing lighting and physical TV adapters.
Media consumes the TV as an optional device while native clients use
its catalogue directly. The current tv/ source layout and tv.control interface
span both concerns; the TV route documents their composition. Module
boundaries do not add an aggregate runtime package or rename compatibility IDs.