Meeting Intelligence
Meeting Intelligence is AncientOS's transport-neutral capability for importing meeting observations, retaining source provenance, and answering bounded questions with transcript evidence. It is a LifeVault L0 evidence surface, not an authoritative summary database, and grants no execution or approval power.
Architecture and trust boundaries
An explicit workstation edge producer (Meetily, a transcript exporter, or another adapter) posts structured observations to AncientOS on SER6BUZZ. The workstation running the meeting performs visible, consent-aware microphone and system-audio capture. AncientOS owns the canonical durable meeting artifact.
The implemented observation pipeline is:
capture/import -> transcription observation -> authenticated ingestion -> LifeVault meeting_record -> retrieval -> advisory cognition -> Luna rendering -> optional Keeper/Lich proposal
Transcript files use the shared transport-neutral inbound artifact boundary:
transport/source adapter -> bounded InboundArtifactEnvelope -> transcript normalizer -> MeetingObservation -> authenticated ingestion -> LifeVault meeting_record
The artifact envelope records bounded source/event/actor provenance, a safe display name, media type, byte count, SHA-256, observation time, and scalar metadata. Content is untrusted bytes supplied separately through a bounded reader. A source reference is opaque provenance and is never automatically opened or fetched. Artifact content cannot select its consumer or grant any authority.
The producer endpoint accepts data only; it cannot invoke capabilities. Transcript phrases such as "email Bob", "put that on my calendar", or "approve this" are inert evidence. Only a later, authenticated operator request may turn an evidence-linked action candidate into the existing Keeper create-task path, where Lich approval remains mandatory.
Authenticated ingestion is an ordinary application-state evidence write. It does not grant target mutation, execution, approval, or trading authority. The separate follow-up path may write pending proposal state, but Lich remains the approval authority and no Keeper task is created before that governed step.
Evidence and storage
Canonical meeting_record artifacts live under
$LUNA_MEMORY_ROOT/artifacts/meetings. They retain producer/device identity,
source identity/kind and optional checksum/reference, meeting lifecycle,
ordered transcript segments, replay hashes, and derived claims. Segments keep
offsets, text, optional speaker label, optional confidence, and transcription
engine/model. Missing speaker or confidence values remain absent.
Summaries, decisions, commitments, action candidates, and open questions are advisory derived claims. Every claim must reference existing segment IDs. Luna renders the supporting speaker, timestamp, and snippet. Source evidence remains queryable when cognition or indexing is absent. Embeddings and pgvector are optional indexes; LifeVault artifacts remain canonical.
When stored claims are absent, request-scoped derivation uses the existing
governed bounded_reasoning inference role with structured output. Provider
selection and failure remain subject to the shared inference policy. Derived
claims retain model/provider lineage and segment references in the current
response, but they are not persisted as durable cognition revisions. Provider
failure therefore degrades to stored transcript evidence without inventing or
persisting claims.
Producer API and import
Set a strong LUNA_MEETING_INGEST_TOKEN in .env and rebuild Compose. Without
it, ingestion returns 503 and fails closed. Send a bearer-authenticated POST
to http://SER6BUZZ:8028/api/meeting-observations using schema
ancientos.meeting-observation.v1. The default request limit is 2 MB.
export LUNA_MEETING_INGEST_TOKEN='deployment-secret'
python scripts/import_meeting_observation.py deployment/examples/acme-meeting-observation.json
The boundary rejects unknown versions/events, invalid timestamps/ranges,
oversized batches, secret-like metadata, unknown evidence references, changed
event replays, and changed segment/claim identities. Identical retries return
an idempotent transcript-free receipt. Progressive producers may send
meeting_started, transcript_segments, and meeting_finalized; complete
imports use meeting_imported.
Transcript-file importer
The clean initial file ingress supports strict UTF-8 .txt, .md, .srt,
and .vtt files. It requires an explicit approved local root, meeting title,
and timezone-aware real started_at. It rejects path traversal, symlinks,
binary input, unsupported media types, malformed cues, excess bytes, excess
lines, and excess segments without truncation or partial meeting persistence.
python scripts/import_meeting_transcript.py transcript.srt \
--allowed-root /bounded/import/root \
--title "Q3 Planning" \
--started-at "2026-08-11T14:00:00Z"
The bearer token is read from LUNA_MEETING_INGEST_TOKEN; it is not accepted
as a command-line value. The helper normalizes the file through the common
artifact contract, constructs ancientos.meeting-observation.v1, and submits
it to the existing endpoint. It creates no raw-file or parallel meeting store.
Plain text and Markdown segments are explicitly marked with
transcript_timing_basis: unavailable and render as [untimed]. SRT and VTT
offsets are retained as relative offsets and never treated as wall-clock time.
Only conservative leading speaker labels and explicit WebVTT voice labels are
preserved; speakers and participants are never invented. Arbitrary transcript
JSON is unsupported; exact canonical observation JSON remains available
through import_meeting_observation.py.
Meetily bridges should map its meeting/transcript export into this schema. They must not copy credentials, provider settings, or executable instructions into metadata. Segment IDs must remain stable across retries.
Luna and governance
Supported read-only requests include:
What meetings do you know about?Summarize the Acme meeting.What did we decide in the Acme meeting?What did Sarah commit to in the Acme meeting?Search the Acme meeting for revised pricing.Meeting intelligence status.
Propose a follow up from the Acme meeting uses a stored action candidate only
after that direct operator request. It creates an exact Keeper proposal through
the existing pending-action/Lich boundary; it never treats recorded speech as
the request or approval.
Status distinguishes stored meeting availability from live-producer presence.
The initial implementation reports producer state as not_observed; it does
not invent a heartbeat protocol.
Privacy and failure behavior
Capture must be visibly and explicitly started at the edge. AncientOS does not
auto-record. Operators remain responsible for applicable consent and recording
law. Audio/transcripts stay local by default; the importer uploads no audio.
Use audio_retained: false when only a transcript exists. Do not place secrets
or public media URLs in source references.
Malformed events produce no partial mutation. Storage failure returns 503.
Successfully persisted transcripts remain independent of later cognition.
Restarted runtimes rebuild query views from LifeVault artifacts. Conflicting
retries fail closed rather than rewriting source evidence.
Meetily relationship and limitations
Meetily was inspected at upstream commit
0281737d87d26352fb0adc78c8c0975f691b23d1. It is MIT licensed (Copyright
2024 Zackriya Solutions). AncientOS vendors no Meetily code in this slice.
Meetily remains an optional local capture/transcription producer; its local
SQLite/IndexedDB, summarizer, providers, and application model are not
AncientOS authority.
At that commit, the usable Community Edition transcript types/backend did not implement diarization or speaker identity fields, despite broader product language mentioning diarization. AncientOS therefore does not depend on it.
Current limitations are: no bundled desktop capture binary, producer heartbeat, audio upload/storage, automatic transcription, automatic background cognition, or meeting pgvector index. Imports can carry evidence-linked derived claims; otherwise Luna exposes transcript evidence and reports missing claim classes. These are current implementation facts, not completed features. Meeting artifacts currently have indefinite retention; governed retention and deletion are intentionally deferred rather than implied by this capability.
Troubleshooting
503 meeting_ingest_not_configured: configure the token and recreate the Web TUI service.401 unauthorized: producer/server tokens differ.422 event_replay_conflict: use a new event ID for genuinely new data.422 segment_replay_conflict: do not rewrite a stable segment identity.- Stored meetings but no live producer: expected until heartbeat support exists.
- No decisions/commitments: transcript evidence remains; the claim class was not imported or derived.