The CLI

Talk to the tree.

Navigate like a filesystem. Talk like a conversation. The AI changes based on where you are. Extensions add their own commands. The help menu updates at every position. Your view matches the AI's view.

Three Commands

Everything else builds on them.

chatthe AI thinks and acts
placethe AI stores what you said
querythe AI answers without changing anything

But these are just the floor. Extensions add their own AI commands that work the same way but think differently.

fitness "bench 135x10x10x8"fitness coach mode
food "eggs and toast for breakfast"nutrition coach mode
explore "where is the auth refactor"searches your branch
scout "what do I know about protein"triangulates the whole tree
understandcompresses the branch into knowledge

Every extension command activates a different AI mode at your position. Same tools. Different mind. chat is general. fitness is a coach. explore is a researcher. scout is a detective. Same node. Different mind.

Where You Are Changes Everything

cd /land zone: AI manages your server
cd ~home zone: AI helps you reflect
cd MyTreetree zone: AI works the branch

No settings menu. No mode picker. Just cd.

treeos
tabor@treeos.ai/ chat "what extensions are loaded"
Land: You have 77 extensions loaded. 4 disabled...
tabor@treeos.ai~ chat "what have I been working on"
Home: Most active in Health and Projects this week...
tabor@treeos.ai/Health/Fitness chat "add a back routine"
Tree: Created Back and Biceps. Pull-ups 4x8, Rows 3x10...

Same command. Three completely different AIs. Position is everything.

Sessions

A session is a conversation pinned to a position. You are always in one. You can run many.

treeos
tabor@treeos.ai/Health chat "hey"
# default session at /Health
tabor@treeos.ai/Health @fitness "whats my bench PR"
# creates fitness session at /Health/Fitness
tabor@treeos.ai/Health @fitness › add a back day
# still in fitness session
tabor@treeos.ai/Health @fitness › @work "status on the API refactor"
# creates work session at /Projects/Backend
tabor@treeos.ai/Health @work › looks good, mark auth complete
tabor@treeos.ai/Health @work › @fitness
# switch back (shows recent history)
tabor@treeos.ai/Health @fitness › @default
# back to default session
tabor@treeos.ai/Health _

Sessions stay pinned. @fitness always talks to /Health/Fitness even when you have navigated somewhere else. Navigate away and the session does not follow. It waits. Come back with @fitness from anywhere.

sessionslist all active sessions
sessions kill fitnessend a session

"Wait. First it was fitness, now it's @fitness?"

Both work. fitness "bench 135" is a direct extension command. It fires the fitness AI at your current position, one shot. @fitness "bench 135" opens a persistent session pinned to the fitness branch. The session remembers. The direct command does not.

Inside the shell you just type @fitness hello. No chat prefix needed. The shell intercepts the @ and routes it. The chat @fitness hello form exists for one-shot use outside the shell (treeos chat @fitness hello from a regular terminal).

You can cd anywhere, start new chats in any mode, go back, and continue where you left off. Sessions persist. If you close the shell and come back tomorrow, @fitness picks up where it stopped.

Context Carries

The AI remembers within a session. Switch extensions, the context carries.

treeos
tabor@treeos.ai/Health food "eggs and toast for breakfast"
Logged. 224 cal, 15g protein. You've got room.
tabor@treeos.ai/Health fitness "what should I do today"
Based on your 224 cal so far, let's keep it moderate.
Push day: bench, OHP, lateral raises.

The fitness AI saw your food data. Not because the extensions talk to each other. Because both write to the same node's metadata, and enrichContext injects both into every prompt. The node is the shared memory. Four messages carry across mode switches. The conversation flows.

The Tree Works While You Are Away

treeos
tabor@treeos.ai/Health intent
Queue: empty
Last 24h: 2 executed
Compressed dormant branches under /Projects/Old
Nudged: "You said you'd start running 3x/week. No runs logged."
tabor@treeos.ai/Health intent reject 2
Got it. Won't nudge about running again.

The intent extension reads pulse health, evolution metrics, contradictions, codebook compression status, and your stated goals. It generates actions the tree should take on its own. Review them. Reject what you do not want. The tree learns.

See Everything at Once

treeos
tabor@treeos.ai/Health/Fitness water
Hydration at /Health/Fitness:
Cascade: enabled, 12 signals today
Perspective: accepting fitness, health. Rejecting dreams.
Codebook: 23 entries, last compressed 2h ago
Memory: 34 connections to /Health/Food, 12 to /Health/Recovery
Gaps: none
Coherence: 0.91 against tree thesis
Evolution: active, 47 notes this week, high revisit score
tabor@treeos.ai/Health/Fitness water land
Land health:
Signals: 4,200 today, 98% succeeded
Sessions: 5 human, 12 extension, 3 gateway
Cache: 94% hit rate
Trees: 8 active, 2 dormant
Peers: 3 healthy, 1 degraded

water is the full picture at any position. Everything the extensions know, assembled in one view. The tree knows its own hydration.

Get Started

npm install -g treeos