EYAS v0.8.18-beta — A desk of its own
Memory fills itself. Hands can make a still, a clip, a form. What was still
missing is the desk: a place the work belongs so a new chat does not dump onto
general-general, sibling projects share family facts without seeing each
other's notes, and a long tool-using session can stay in the web UI instead of
fleeing back to a TUI.
The desk is a project. A type names the family; a project is one instance of
that family. Folders, connections, memory, and wiki pages inherit from type to
project to conversation. EYAS is a general product — the paths, the tickets,
the clients live on the instance.
The project is the room
- New conversations pick a project grouped by type. Domain work no longer
silently lands ongeneral-general. New projects inherit type sources and
directories when omitted; an empty project prompt inherits the type brief
instead of copying it. Instance projects are not seeded. - A domain type ships with a generic operating brief. Indexer, local vs
remote writes, domain notes vs project notes. The type is a behaviour, not
a tenant. - The project form prompt actually reaches the model. The form wrote DB
prompts; the assembler readAGENTS.md; the two never met. The loader now
takes a non-empty DB prompt first (file fallback), applies+/ empty /
override, and a form save materializesAGENTS.mdas a derived dump. - Tags stay a board filter. They render as one
tags:line in the prompt
suffix so a swap does not change the project-context cache prefix. Category
names are documented, not seeded.
Memory that knows which desk it is on
- Type-level domain notes rank with the active project. A
kind=domain
note is for the conversation's project type, so sibling projects share
family facts without seeing each other's project notes.general-general
has no type notes. Capture stays in the EYAS vault. search_memorydefaults to the current project and type. Other
projects stay out unless the model passesscope=all. HTTP vault search
stays unfiltered.- Named working directories pin from type to conversation. Types and
projects store optional named folders (name + absolute path). An empty
project list falls back to the type. New conversations pin that list the
way they pin search sources; file tools stay inside the pinned roots, not
the EYAS checkout. The conversation fields bar picks the primary workspace. - Catalog connections pin on the project. Ticket tools use
ticketConnectionId; other tools usedefaultConnectionId. An explicit
connectionIdwins. Missing project connections still fall back to the
global secrets.
The wiki writes the project's own pages
- Closed board cards write
ticket-<id>on the project's wiki.
Team-session findings and decisions writedecision-<id>there instead of
the vault when the conversation has a project. Human saves take ownership.
general-generalgets no page. - Wiki writes stay off until a project opts in to closed tickets and/or
team decisions. Ticket pages default to title-only instead of the
transcript.
A conversation that can stay in the web UI
- Long tool-using chats keep a trace. What is running, short args, a
file-edit diff. Stop aborts the server-side run. Plan first parks a written
plan for approval before tools run. git statusandgit diffskip approval. CLI providers sent those
read-only commands through Bash/run_command, which is red on every call.
When the argv matches the dedicated tools, the gate allows them as green.
Arbitrary shell, write-git, and metacharacters stay refused.
Skills, Telegram, and a copy of what you already wrote
- Extra skill and persona roots import without host Claude config.
Instance overlay lists markdown directories. Imported files win on id
collision and appear on the Agents page. Isolation stays on:
settingSourcesstay empty; hostMEMORY.mdis not loaded. - Telegram
/newand/startstart a fresh thread. Paired DMs already
created one conversation per sender. The slash command drops that mapping
so the next message does not go to the model. When a yellow or red tool
waits, the paired chat gets an Approve/Deny ping. Raw tool args stay off
the ping. - Data port copies, it does not mount. Scan → review → import writes
markdown into the EYAS vault. The source path is not read again.
Undeclared notes getkind: reference, neveruser.MEMORY.mdindexes
andclaude-sessionstranscripts stay out even if everything is selected.
A home scan stays in assistant folders and Documents —GitHuband other
source trees are not walked. Grok memory files that symlink into
ai-memorycount as that vault; they are not imported twice. Classify and
transform prompts assume the user pointed at the wrong (too wide) folder.
Ops is Kubernetes, not a cloud overlay
- The ops module and Helm chart are general Kubernetes. Cloud-provider
values stay on the instance; bundled OCI skills are unchanged. The OCI OKE
overlay is gone.
The product is not a tenant
- EYAS is a general product; this operator is one tenant. Capture prompt
and tests no longer name shop clients, modules, or tickets. Instance data
stays on the machine.
Handbook: conversations (working folders, tool trace, plan first), projects,
skills import roots, Telegram /new + Approve/Deny, git remap, and Data
port — six languages.
Known issues
- Plan first still wants a live trial on a long product conversation. The
four surfaces (trace, diff, stop, plan) are in; a real long run on this
machine has not been the gate.