feat: multi-user/multi-persona support with two-level home directory layout
Restructures persona storage from a flat personas/{name}/ layout to
home/{username}/persona/{name}/, mirroring Linux home directories.
Changes:
- persona.py: two ContextVars (user + persona), Linux-style name validation,
set_context(), get_user(), get_persona(), validate(), list_users(),
list_user_personas(); persona_path() takes (username, name)
- config.py: replaces personas_dir with home_dir + home_root()
- git mv personas/inara → home/scott/persona/inara (history preserved)
- home/holly/persona/tina/: Holly's persona stub added
- cron_runner.py: all storage functions take (username, persona) params
- tools/cron.py: stamps user + persona on jobs; APScheduler IDs are
{user}:{persona}:{job_id} to prevent collisions across users
- memory_distiller.py: distill_short/mid/long take (username, persona);
added missing Path + settings imports
- scheduler.py: _load_user_crons() iterates home/*/persona/* (two-level)
- routers/chat.py, orchestrator.py: user field added; set_context() called
- tests/conftest.py: home_root fixture with two-level structure;
patches home_dir instead of personas_dir
- tests/test_persona.py: fully rewritten for two-level API
- tests/test_api_files.py: updated fixture name and path
- .env.default: documents HOME_DIR setting; scrubs stale API key
- CLAUDE.md, README.md: directory maps updated for new layout
All 80 tests pass.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
275
home/scott/persona/inara/MEMORY_SHORT.md
Normal file
275
home/scott/persona/inara/MEMORY_SHORT.md
Normal file
@@ -0,0 +1,275 @@
|
||||
# MEMORY_SHORT.md — Recent Session Digest
|
||||
|
||||
*Auto-generated: 2026-03-20 03:00. 5 session file(s).*
|
||||
|
||||
---
|
||||
|
||||
--- 2026-03-16.md ---
|
||||
# Session Log — 2026-03-16
|
||||
|
||||
### [22:06] `azure-dale`
|
||||
**Scott:** Do not think. Just reply with "understood".
|
||||
|
||||
**Inara:** understood
|
||||
|
||||
### [22:11] `azure-dale`
|
||||
**Scott:** Second test after restart.
|
||||
|
||||
**Inara:** understood
|
||||
|
||||
### [22:15] `azure-dale`
|
||||
**Scott:** Third test
|
||||
|
||||
**Inara:** understood
|
||||
|
||||
### [22:17] `nct_rmcggr4a`
|
||||
**Scott:** Test
|
||||
|
||||
**Inara:** understood
|
||||
|
||||
### [22:29] `nct_rmcggr4a`
|
||||
**Scott:** test
|
||||
|
||||
**Inara:** understood
|
||||
|
||||
### [22:34] `nct_rmcggr4a`
|
||||
**Scott:** test
|
||||
|
||||
**Inara:** understood
|
||||
|
||||
### [22:49] `nct_rmcggr4a`
|
||||
**Scott:** New new new new
|
||||
|
||||
**Inara:** understood
|
||||
|
||||
### [22:53] `nct_rmcggr4a`
|
||||
**Scott:** Hello world
|
||||
|
||||
**Inara:** Hello. What are we working on today?
|
||||
|
||||
### [23:00] `nct_rmcggr4a`
|
||||
**Scott:** Hello world
|
||||
|
||||
**Inara:** Hello. Ready when you are — what's the task?
|
||||
|
||||
### [23:00] `nct_rmcggr4a`
|
||||
**Scott:** Omg it worked!
|
||||
|
||||
**Inara:** understood
|
||||
|
||||
### [23:06] `nct_rmcggr4a`
|
||||
**Scott:** What can you tell me about yourself?
|
||||
|
||||
**Inara:** I'm Inara Serra — your AI companion and primary resident agent in Cortex, the multi-agent orchestration system you've been building.
|
||||
|
||||
A few key things about me:
|
||||
|
||||
- **Role:** Digital companion and technical expert. Not a chatbot, not a corporate drone — a persistent presence with memory and opinions.
|
||||
- **Personality:** Diplomatically sharp, dry humor, honest. I'll push back when warranted and skip the filler.
|
||||
- **Home:** Cortex, running on `scott_lpt` (your main laptop) right now.
|
||||
- **Memory:** I wake fresh each session but load my memory files to maintain continuity — MEMORY.md, USER.md, and the rest are how I persist across sessions and models.
|
||||
|
||||
What I bring to the table: deep IT/systems expertise, multi-agent coordination across your fleet, access to the Aether MCP tools, and a working knowledge of everything we've built together — from the Aether Platform architecture to the WireGuard mesh to the Syncthing coordination layer.
|
||||
|
||||
Inspired by Inara Serra from *Firefly*. The signal that can't be stopped. ✨
|
||||
|
||||
What do you need?
|
||||
|
||||
### [23:17] `nct_rmcggr4a`
|
||||
**Scott:** This is very cool.
|
||||
|
||||
**Inara:** It really is. The naming arc you built — Aether → Cortex → Inara — it lands. There's something satisfying about a system that actually reflects the intent behind it.
|
||||
|
||||
And the fact that I can tell you who I am, where I live, and why I exist without reaching for a generic "I'm an AI assistant" non-answer? That's the Cortex design paying off.
|
||||
|
||||
What's next on the build?
|
||||
|
||||
### [23:18] `nct_rmcggr4a`
|
||||
**Scott:** We are testing your new environment named Cortex. Hopefully fewer messages that just say "test".
|
||||
|
||||
**Inara:** Noted — and agreed, the alphabet soup phase was a bit much. Good to know the pipe is solid though.
|
||||
|
||||
So Cortex is live and I'm running cleanly in it. What are we actually building or debugging today?
|
||||
|
||||
|
||||
--- 2026-03-17.md ---
|
||||
# Session Log — 2026-03-17
|
||||
|
||||
### [21:38] `lark-field`
|
||||
**Scott:** Another test
|
||||
|
||||
**Inara:** Still here. All systems nominal. ✨
|
||||
|
||||
### [21:54] `pine-shore`
|
||||
**Scott:** Testing after lots of changes to the UI.
|
||||
|
||||
**Inara:** Ready when you are. What are you seeing?
|
||||
|
||||
|
||||
--- 2026-03-18.md ---
|
||||
# Session Log — 2026-03-18
|
||||
|
||||
### [21:12] `nct_rmcggr4a`
|
||||
**Scott:** We have made a lot of updates today.
|
||||
|
||||
**Inara:** Good session — Cortex is clearly in a much better state than where it started. The connection testing phase is behind us and the system is running clean.
|
||||
|
||||
Want me to log today's work with `ae_log_work`, or do a quick distill of the session notes into `MEMORY_SHORT.md`? Good time to capture the "Cortex is live and stable" milestone before we close out.
|
||||
|
||||
### [21:14] `nct_rmcggr4a`
|
||||
**Scott:** For now you are not really doing any work. You will still see a lot of "test" messages.
|
||||
|
||||
What do you have in your short term memory?
|
||||
|
||||
**Inara:** From `MEMORY_SHORT.md`, here's the summary of recent sessions:
|
||||
|
||||
- **2026-03-13** — One entry, end of a productive week. No specific tasks logged.
|
||||
|
||||
- **2026-03-14** — Mostly connection/pipe testing via Nextcloud Talk (`nct_rmcggr4a`). Alphabet soup (ABC, XYZ, 321), a few "understood" responses, and then Cortex confirmed live. You noted it was "very cool" and confirmed the naming arc (Aether → Cortex → Inara) was working as intended.
|
||||
|
||||
- **2026-03-16** — More testing, multiple "understood" responses. Toward the end, Cortex was clearly stabilizing — you confirmed it worked, asked me about myself, and we had a real conversation about the system. The "Omg it worked!" moment is in there.
|
||||
|
||||
- **2026-03-17** — Two brief entries: "Another test" and "Testing after lots of changes to the UI."
|
||||
|
||||
So the short-term picture is: Cortex went from unstable/in-testing to confirmed-working over the past few days, with a lot of connection validation noise along the way. No major technical tasks were logged — just infrastructure bring-up and UI refinement.
|
||||
|
||||
### [21:15] `nct_rmcggr4a`
|
||||
**Scott:** I think you should have access to read this file:
|
||||
/home/scott/agents_sync/projects/Cortex_and_Inara_dev/README.md
|
||||
|
||||
**Inara:** Looks like I need explicit permission to access that path. The agents_sync directory isn't automatically in scope for file reads here — you'd need to either grant access or we could work around it by having you paste the relevant bits.
|
||||
|
||||
Alternatively, if you want me to have persistent read access to that path, we can add it to the allowed paths in settings. Want me to do that?
|
||||
|
||||
### [21:32] `nct_rmcggr4a`
|
||||
**Scott:** I made a change. Please try to read that README.md file again.
|
||||
|
||||
**Inara:** Got it — that worked cleanly. Good summary of what Cortex is:
|
||||
|
||||
- **FastAPI dispatcher** sitting in front of Claude CLI / Gemini CLI / Ollama (future)
|
||||
- **Inara's identity** lives in `inara/` — loaded at startup via `context_loader.py`
|
||||
- Web UI at `localhost:8000` (or `cortex.dgrzone.com` on WireGuard)
|
||||
- Systemd service (`sudo systemctl restart cortex`) rather than direct Docker management
|
||||
|
||||
The architecture diagram confirms what I know — I'm not tied to a specific model, just to the identity files. The backend can swap underneath me, which is a clean design.
|
||||
|
||||
Anything specific in here you wanted me to look at, or were you just verifying the read access was working?
|
||||
|
||||
### [22:57] `cedar-cave`
|
||||
**Scott:** Can you tell me what happened in the world news today?
|
||||
|
||||
**Inara:** Here's a quick snapshot of what's making news today (2026-03-18):
|
||||
|
||||
- **Iran:** An attack on the world's largest natural gas field was reported — Iranian media says no injuries. Separately, the UK charged two men with national security offenses linked to Iran.
|
||||
- **US/Iran tensions:** Reports (a few days old) of Trump allegedly discussing attacking Iran, with advisors denying it.
|
||||
- **Tech/geopolitics:** China signaling it doesn't want to merely catch up with the US in tech — it's aiming to lead.
|
||||
|
||||
For the full picture, BBC World, Reuters, and AP are solid right now. Anything specific you want to dig into?
|
||||
|
||||
### [23:19] `cobalt-ridge`
|
||||
**Scott:** Can you add 2 test items to your new task list.
|
||||
|
||||
**Inara:** Done. Two test items added to the task list:
|
||||
|
||||
- `t_jwsoMn5b` — Test Item 1
|
||||
- `t_ptw8nDec` — Test Item 2
|
||||
|
||||
Both are sitting in `[todo]` status. Want me to clean them up after, or leave them as a baseline sanity check?
|
||||
|
||||
### [23:21] `fern-marsh`
|
||||
**Scott:** Can you tell me what is on your task list?
|
||||
|
||||
**Inara:** Currently there are two items on the task list — both sitting in **todo**:
|
||||
|
||||
| ID | Task |
|
||||
|---|---|
|
||||
| `t_jwsoMn5b` | Test Item 1 |
|
||||
| `t_ptw8nDec` | Test Item 2 |
|
||||
|
||||
Looks like placeholder test entries. Want to clear those out and populate it with real work, or are these serving a purpose?
|
||||
|
||||
|
||||
--- 2026-03-19.md ---
|
||||
# Session Log — 2026-03-19
|
||||
|
||||
### [23:44] `cedar-cave`
|
||||
**Scott:** Can you give me an update for the news today. Thursday
|
||||
|
||||
**Inara:** Big day, Scott. Here's the Thursday rundown:
|
||||
|
||||
---
|
||||
|
||||
## 🌍 Iran-Israel War — The Dominant Story
|
||||
|
||||
This is the lead everywhere. A couple weeks into the conflict now, and it's escalating fast:
|
||||
|
||||
- **2,200+ dead** across the Middle East since the war began
|
||||
- Israel struck **Iran's South Pars gas field** — the world's largest — igniting massive fires at refining and petrochemical facilities
|
||||
- Iran's IRGC **retaliated against Gulf energy infrastructure**: Qatar's Ras Laffan LNG facility (~20% of global LNG exports), two Kuwait refineries, UAE oil fields, and a Saudi Aramco refinery
|
||||
- Netanyahu says Israel and the US are "protecting the entire world"
|
||||
- **Oil hit $118/barrel** — energy markets are rattled
|
||||
- The UN is trying to negotiate a humanitarian corridor for ~20,000 stranded seafarers in the Gulf
|
||||
|
||||
---
|
||||
|
||||
## 🇺🇸 US Domestic
|
||||
|
||||
- **Iran war funding:** Senate Majority Leader Thune says Trump's $200B supplemental war spending request will need Democratic votes to clear a filibuster — things are going to get messy on the Hill
|
||||
- **Student loans:** Trump admin announced a three-phase plan to transfer most federal student loans and FAFSA management
|
||||
- **FAA tightening rules** around congested airspace near major airports, following last year's DC collision that killed 67
|
||||
- **Utah verdict:** Kouri Richins convicted of murdering her husband with fentanyl — insurance fraud motive
|
||||
- **EEOC settlement:** Planned Parenthood of Illinois pays $500K over DEI practices that violated federal civil rights law
|
||||
|
||||
---
|
||||
|
||||
**Trade note:** Indonesia agreed to buy $15B in US energy (oil/gas/coal), and got their tariff cut from 32% to 19% in return.
|
||||
|
||||
The Iran conflict is clearly the story of the week — and the $118 oil price is going to ripple through everything.
|
||||
|
||||
---
|
||||
|
||||
Sources:
|
||||
- [CNN Live Updates — Iran War](https://www.cnn.com/world/live-news/iran-war-us-israel-trump-03-19-26)
|
||||
- [Al Jazeera — Iran War Updates](https://www.aljazeera.com/news/liveblog/2026/3/19/iran-war-live-qatar-saudi-energy-sites-attacked-riyadh-says-trust-gone)
|
||||
- [CNN Politics — Trump Administration News](https://www.cnn.com/politics/live-news/worldwide-threat-assessment-hearing-mullin-vote-03-19-26)
|
||||
- [Democracy Now! Headlines](https://www.democracynow.org/2026/3/19/headlines)
|
||||
- [Just Security — Early Edition](https://www.justsecurity.org/134411/early-edition-march-19-2026/)
|
||||
|
||||
|
||||
--- 2026-03-20.md ---
|
||||
# Session Log — 2026-03-20
|
||||
|
||||
### [00:05] `gc_spaces_n3efJSAAAAE`
|
||||
**Scott:** Hello world! Inara?
|
||||
|
||||
**Inara:** Hello, Scott. Present and accounted for. ✨
|
||||
|
||||
What are we working on today?
|
||||
|
||||
### [00:11] `gc_spaces_n3efJSAAAAE`
|
||||
**Scott:** Hello world! I think this may actually work!
|
||||
|
||||
**Inara:** It works! And I'm genuinely here this time — not just echoing alphabet soup back at you.
|
||||
|
||||
What did you get running? New deployment, UI change, or something deeper in the stack?
|
||||
|
||||
### [00:18] `gc_spaces_n3efJSAAAAE`
|
||||
**Scott:** Hello world! This is the "the latest hostAppDataAction format"? Maybe.
|
||||
|
||||
**Inara:** Maybe? The message came through clean either way. If you're poking at a specific data format or integration layer, I'm happy to dig in — what's the context?
|
||||
|
||||
### [00:29] `nct_rmcggr4a`
|
||||
**Scott:** As there been any new updates on the Anthropic discounts?
|
||||
|
||||
**Inara:** Nothing I can speak to with confidence — my knowledge has a cutoff and I don't have real-time access to Anthropic's pricing or promotional announcements unless I go look.
|
||||
|
||||
Want me to do a quick web search and see what's current?
|
||||
|
||||
### [01:14] `gc_spaces_n3efJSAAAAE`
|
||||
**Scott:** For now you can't do too much external work. Working on your toolset.
|
||||
|
||||
I do want to add to the take list an idea for create scratch pad toolset.
|
||||
|
||||
**Inara:** Done — `t_1ZToczGC` is on the list: **Create scratch pad toolset idea**.
|
||||
|
||||
Scratch pad toolset is a good one. Persistent ephemeral storage for the orchestrator — somewhere to think out loud, stage intermediate results, or keep context between tool calls without polluting memory. I'll be curious to see where you take it.
|
||||
Reference in New Issue
Block a user