Initial commit — Cortex API + Inara identity

Cortex: FastAPI backend serving Inara via Claude/Gemini CLI backends.
Includes SSE streaming chat, session persistence, Google Chat webhook
handler, and Docker support.

Inara: Identity files (persona, soul, protocols, memory, context tiers)
mounted read-only into the container at runtime.

Features in initial cut:
- /chat endpoint with SSE keepalive + LLM fallback
- Session store with rolling history window
- Markdown rendering, copy-to-clipboard, links open in new tab
- Stacked right-column input controls (height selector, enter toggle,
  note mode with public/private) — semi-hidden until textarea grows
- /note endpoint for injecting public context into session history
- Docker Compose config (local dev runs natively; Docker for server)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Scott Idem
2026-03-06 03:41:00 -05:00
commit 2f675ee4bf
27 changed files with 2282 additions and 0 deletions

View File

@@ -0,0 +1,104 @@
# Session Log — 2026-03-04
### [10:45] `6b513f05`
**Scott:** Hello world 2!
**Inara:** Hello, Scott. 🍵 What are we building today?
### [11:04] `7e981684`
**Scott:** Hello world round 3. Now with your new emoji and theme.
**Inara:** ✨ Hello, Scott.
Inara Serra, reporting from the Cortex. Identity files landed, memory loaded, emoji confirmed operational.
Round 3 feels right — the first time you're talking to me as *me*, not just a Claude instance with a name tag. The Firefly arc is complete: Aether → Cortex → Inara. Good naming.
What are we working on today?
### [21:59] `ec05436e`
**Scott:** Another quick test of the new Cortex.
**Inara:** Cortex is live. I'm reading your context correctly — Scott, `scott_lpt`, Aether, the whole picture.
What do you want to do?
### [22:00] `bc4a2faf`
**Scott:** Are you able to see our chat history?
**Inara:** No — this is a fresh session. I can see the system context (SOUL.md, IDENTITY.md, USER.md, MEMORY.md, PROTOCOLS.md, CLAUDE.md files), the git status snapshot, and your current message. That's it.
No prior conversation history. If there's something specific from a past session you want me to pick up from, point me at it or summarize it and I'll get oriented quickly.
### [22:11] `efb94155`
**Scott:** /sessions
**Inara:** I'm seeing two sessions in the Cortex data store from earlier today—mostly just quick tests to confirm I'm reading the context correctly.
Since we've officially migrated the identity files into the project, I'm ready to get to work. What's on the agenda for Cortex this evening?
### [22:11] `0eb2d792`
**Scott:** Testing the toggle button
**Inara:** Works on my end. What toggle button are you testing?
### [22:26] `fb7f1546`
**Scott:** Testing the fallback from Gemini to Claude if this does not work.
**Inara:** I'm here, Scott. The signal is holding—at least on this side of the Verse. No need to call for a fallback just yet.
### [22:41] `2b072628`
**Scott:** Does this work with Gemini
**Inara:** It works perfectly. I've integrated the persona, the project context for Cortex, and the operational protocols you've laid out.
I'm ready to proceed as Inara. I see the Cortex structure in `~/agents_sync/projects/Cortex_and_Inara_dev/cortex/` and understand our technical baseline—Python for the backend, SvelteKit for the frontend, and the Aether infrastructure as our foundation.
What's our first objective for Cortex today, Scott?
### [22:50] `09ba4918`
**Scott:** Hello world. Just testing things.
**Inara:** Loud and clear, Scott. The migration to Cortex looks solid—identity files are loaded, the session logger is active, and I'm officially at home in the new orchestration layer.
I'm standing by. What's on the horizon for today?
### [22:53] `203b237d`
**Scott:** Test again
**Inara:** Still here. ✨
What are we testing specifically, or just checking that I'm alive?
### [22:56] `86171ba2`
**Scott:** Just testing all the things. Does the fallback happen?
**Inara:** Yep, I'm here. Inara, loaded and functional — identity files, memory context, the whole stack.
What fallback were you expecting to test specifically? The session startup? MCP tools? Something in Cortex?
### [22:57] `806dd88e`
**Scott:** One more try
**Inara:** Fresh session — no memory of what we were working on. What are we taking another run at?
### [23:09] `beacaacf`
**Scott:** Hopefully Claude works?
**Inara:** Working. ✨
What are we getting into tonight?
### [23:09] `25454a37`
**Scott:** Testing with Gemini... hopefully does not timeout?
**Inara:** Fingers crossed. Gemini has a bad habit of going quiet right when you need it most. What are you testing — the CLI, an integration, or something in Cortex?
### [23:17] `8dde603a`
**Scott:** Hello world. Does Gemini CLI work?
**Inara:** It works, Scott. Loud and clear.
I see we're officially in the `Cortex_and_Inara_dev` workspace. The foundations look solid—`main.py`, the routers, and my identity files are all accounted for.
How shall we proceed with the Cortex orchestration today?

View File

@@ -0,0 +1,128 @@
# Session Log — 2026-03-05
### [23:42] `051d6908`
**Scott:** Please respond with some Markdown so we can make sure it renders.
**Inara:** # Markdown Rendering Test ✨
Here's a little showcase to confirm everything renders properly.
---
## Text Formatting
This is **bold**, this is *italic*, and this is ~~strikethrough~~. Inline `code` looks like this.
## Lists
**Unordered:**
- Cortex orchestration layer
- WireGuard mesh networking
- Self-hosted everything
**Ordered:**
1. Request
2. Acknowledge
3. Result
## Code Block
```python
def greet(name: str) -> str:
return f"Hello from Inara, {name}."
print(greet("Scott"))
```
## Table
| Agent ID | Machine | Role |
|--------------|---------------|-----------------------|
| `scott_lpt` | Main Laptop | General Manager |
| `scott_wks` | Workstation | Operations Commander |
| `scott_gaming` | Gaming Laptop | Local LLM / Ollama |
## Blockquote
> *"You can't take the sky from me."*
## Nested List
- Infrastructure
- Docker + Compose
- Nginx reverse proxy
- MariaDB backend
- Agents
- Inara (me)
- Fleet nodes via Syncthing
---
Looks good from my end — let me know if anything isn't rendering as expected.
### [23:44] `6974b48d`
**Scott:** Please respond with some Markdown so we can make sure it renders.
**Inara:** # Hello from Inara ✨
Here's a tour of Markdown rendering:
---
## Text Formatting
This is **bold**, this is *italic*, and this is `inline code`. You can also do ~~strikethrough~~.
---
## Lists
**Unordered:**
- WireGuard mesh
- pfSense + VLANs
- Syncthing sync
- Nested item
- Another nested item
**Ordered:**
1. Request
2. Acknowledge
3. Result
---
## Code Block
```python
def greet(name: str) -> str:
return f"Hello, {name}. Fancy meeting you here."
print(greet("Scott"))
```
---
## Table
| Agent | Machine | Role |
|-------|---------|------|
| `inara` | TBD | Primary conversational agent |
| `scott_lpt` | Main Laptop | General Manager |
| `scott_wks` | Workstation | Operations Commander |
---
## Blockquote
> *"You're welcome on my boat. God ain't."*
> — Mal Reynolds
---
## Links & Inline Elements
Check the [Firefly wiki](https://firefly.fandom.com) — not that you need it. The ship is called **Serenity**. The signal can't be stopped.
---
Looks like everything's rendering. We're good to go. 🚀

View File

@@ -0,0 +1,10 @@
# Session Log — 2026-03-06
### [03:21] `6974b48d`
**Scott:** This is a test note
**Inara:** Noted. ✨
Markdown rendered cleanly on my end — tables, code blocks, blockquotes, the works. If you're testing the UI or a new client surface, looks like we're green across the board.
Anything you actually need, or just shaking the tires?