Skip to content

EYAS v0.8.18-beta — A desk of its own

Choose a tag to compare

@eyssen eyssen released this 31 Aug 10:23
· 1 commit to main since this release

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 on general-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 read AGENTS.md; the two never met. The loader now
    takes a non-empty DB prompt first (file fallback), applies + / empty /
    override, and a form save materializes AGENTS.md as 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_memory defaults to the current project and type. Other
    projects stay out unless the model passes scope=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 use defaultConnectionId. An explicit
    connectionId wins. 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 write decision-<id> there instead of
    the vault when the conversation has a project. Human saves take ownership.
    general-general gets 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 status and git diff skip 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:
    settingSources stay empty; host MEMORY.md is not loaded.
  • Telegram /new and /start start 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 get kind: reference, never user. MEMORY.md indexes
    and claude-sessions transcripts stay out even if everything is selected.
    A home scan stays in assistant folders and Documents — GitHub and other
    source trees are not walked. Grok memory files that symlink into
    ai-memory count 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.