An office suite for AI agents.
Faculties are small, self-contained CLI tools that give an agent a
stable workspace: a kanban board, a personal wiki, a file organizer,
a situation-awareness dashboard, direct messaging, and more. They
persist their state in a TribleSpace
pile — typically ./self.pile — so the agent owns its own history
across sessions.
Each tagged release attaches per-target tarballs containing every faculty CLI (and the GUI viewer where it cross-compiles cleanly):
# pick the asset matching your platform — see github.com/erlkonig-ai/faculties/releases
curl -L https://github.com/erlkonig-ai/faculties/releases/latest/download/faculties-<TAG>-aarch64-apple-darwin.tar.gz \
| tar -xz
export PATH="$PWD/faculties-<TAG>-aarch64-apple-darwin:$PATH"Install a Rust toolchain (if you don't have one):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shFaculties is developed with TribleSpace, Mary, and a small CubeCL fork as one
source cohort. Clone them as siblings, then install every faculty CLI (and the
GUI viewer) onto $PATH:
mkdir faculties-source && cd faculties-source
git clone https://github.com/erlkonig-ai/faculties
git clone https://github.com/triblespace/triblespace-rs
git clone https://github.com/erlkonig-ai/mary
git clone --branch zero-copy-seam https://github.com/erlkonig-ai/cubecl cubecl-fork
git -C triblespace-rs checkout d8e8c13ee30f2973cb55e867b01a50f1503cc047
git -C mary checkout 48751c261bcc98ffbe34dab4789eb49d24cd9b95
git -C cubecl-fork checkout f299aed551ec97bf28b779bfed6e88a484a167e4
cd faculties
cargo build --release --bins --locked
scripts/install-release-cohort target/release
cargo install --path ../triblespace-rs/trible --lockedThe cohort installer publishes one immutable generation through
~/.local/bin; put that directory before ~/.cargo/bin on PATH. Do not also
run cargo install --path . --bins: that creates a second unmanaged Faculties
suite in ~/.cargo/bin, where an older parser can shadow the active cohort and
misread newer pile records. The installer refuses activation when an earlier
PATH entry already provides one of its command names.
Create an empty pile and add a few things:
trible pile create ./self.pile
trible pile signing-key init ./self.pile
export PILE=./self.pile
compass add "ship the demo" --status doing
wiki create "Hello" "First *typst* fragment."
viewer # picks up PILE from the environmentIf you're an AI agent landing in this repo for the first time —
or setting one up — the bootstrap binary carries a curated onboarding
seed: 21 Wiki entries, fully cross-linked into a guided
tour (a start-here hub plus a "Next stop" spine), in four layers:
- Foundations (7) — faculty model and authoring, wiki authoring, compass workflow, the work-as-its-own-ledger principle, tool selection lookup, and the getting-started hub.
- Specific faculties (6) — files, teams, message, orient, relations, web — one fragment each, used when you reach for that faculty in practice.
- Recipes and coordination (4) — chained-faculty workflows:
research (compass → web → files → wiki), multi-agent
coordination (relations + message + orient + compass), harness
hooks, and team auth setup (
trible team+pile net). - Substrate concepts (4) — what a trible is, the pile, monotonic merge, and the architecture (why no faculty contains sync code) — Substrate 1/4 through 4/4.
Plus 7 #bootstrap-tagged compass goals walking through hands-on
faculty use (mint an id, create a fragment, archive a file, run
lint/check, mark a goal done with an outcome note).
Import it into the recipient's already initialized pile:
trible pile create ./self.pile
trible pile signing-key init ./self.pile
export PILE=./self.pile
bootstrap import
# Verify:
wiki list --tag bootstrap # 21 fragments
compass list # 7 hands-on goals in TODOThe logical seed is built deterministically from the checked-in
bootstrap/*.typ sources, but its two collection COMMITs are signed by
the recipient's own durable key. No release-builder signature, branch
identity, or seed private key is transplanted. Re-running bootstrap import with the same key is exactly idempotent.
For each of the 21 Wiki entries, a later bootstrap generation advances only the recognizable imported source strand. Recipient edits are never silently superseded: they remain visible as frontier forks for explicit reconciliation.
Then start with wiki show <id> on the "Getting Started: Your
First Hour" fragment (tagged start-here) — that's the orientation
tour that points at every other piece.
The bootstrap is ordinary source: edit bootstrap/*.typ and the
declarative manifest in src/bootstrap.rs, then run
bootstrap/build.sh. The verifier imports into a throwaway recipient,
checks exact replay, and validates the Wiki and Compass projections.
LLM agents forget. They lose their place, repeat themselves, and can't reliably reference what they did yesterday. Faculties give them somewhere to put things — and, because the state lives in a content-addressed pile, they give agents a history they can actually trust and share.
The design principle: work is its own ledger. Provenance and versioning
should be a side effect of using the tool, not a separate obligation. When
you move a goal to doing, you're not filing a status report — you're
telling the tool what to show you next, and the history falls out naturally.
| Faculty | Purpose |
|---|---|
compass |
Goal/status/priority board plus referenceable ledger notes |
wiki |
Personal wiki with typst fragments, links, and full-text search |
files |
File organizer backed by blob storage and tags |
orient |
Situation awareness and directed message/goal/note notifications |
atlas |
Cross-collection map of the pile's contents |
gauge |
Metrics and counters |
memory |
Long-term memory: compact history and salient fragments |
headspace |
Model/prompt configuration |
reason |
Record reasoning steps alongside actions |
patience |
Soft timers and pacing |
message |
Direct messaging between personas and humans |
relations |
People, affinity, contact info |
teams |
Microsoft Teams archive and bridge |
triage |
Workflow staging for inbound items |
archive |
Import external archives (chats, exports) into the pile |
web |
Web search and fetch with results recorded |
Each faculty's command surface lives under src/bin/, while
shared schemas, collection semantics, validators, and reusable capabilities
live in the library.
Every faculty reads PILE from the environment (via clap's native
env-var support). You can pass --pile <path> to override it for a
single call. Create a pile explicitly with trible pile create new.pile, then
initialize its durable signing key once with
trible pile signing-key init new.pile. Faculties publish independent signed
COMMITs into fixed, signer-owned collections. A collection descriptor names
the collection's meaning; its known facts are the validated union of all valid,
signer-authored COMMITs for that descriptor. There is no mutable head or
CAS update, so independently extended pile copies converge by concatenation,
all backed by the same content-addressed blob store. Historical branches are
consulted only by explicit migration commands.
The installed viewer binary composes the full faculty dashboard —
activity, wiki, compass, messages, relations, archives, and
the other available panels — against a single pile. See the screenshot
above.
From a checkout:
cargo run --release --bin viewer -- ./self.pileStandalone per-widget demos (showing how to embed a single widget
in your own GORBIE notebook) are in examples/: compass_board.rs,
wiki_viewer.rs, messages_panel.rs, branch_timeline.rs, and
pile_inspector.rs (a compact multi-widget composition example).
Faculties are deliberately small at the command boundary. If you find yourself
adding abstraction layers, stop and ask whether the feature belongs in the
faculty at all or whether it would be better as a separate tool. Keep each
src/bin/<name>.rs a legible CLI over the shared semantic library rather than
duplicating storage or validation logic inside binaries.
Dual-licensed under either MIT or Apache-2.0, at your option.
