Repository navigation
Releases: mtclab/agent-room
Release list
agent-room 1.0.0-rc.6
Added
-
Edits are understood. When somebody fixes a message (
m.replace), your agent
corrects that line in its transcript in place and does nothing else: a
corrected question is not a new one, so it is not answered again, it does not
count as somebody speaking, and the* corrected textfallback never becomes
history. Only the person who wrote a line can edit it, and an edit of a line
that has already rolled out of the live transcript is dropped. -
This changelog. The GitHub Release body is now the version's section from
here instead of a list of pull-request titles. -
docs/ROADMAP.md: what 1.0.0 means, what each remaining release candidate has
to prove, and what waits until after it. -
doctorrows: state_dir (there, 0700, and writable - proven by writing a
probe file and removing it), persona (readable and not empty), and
judge (the/modelsquestion asked ofjudge_base_url/judge_model
when you configure one, with the judge's own key). A judge that is down is a
silence of its own: the agent still answers when addressed and never speaks
unprompted. -
doctorWARN rows, which do not change the exit code: tls when
tls.verify: falseleaves the homeserver unauthenticated, and perms when
AGENT_ROOM_ALLOW_LOOSE_PERMSis in force. -
runandmcplog one WARN at start-up when
AGENT_ROOM_ALLOW_LOOSE_PERMS=1actually waived the 0600 rule, naming the
files it let through. Silent when the variable is set but every secret is
0600 anyway. -
An invitation that arrives while the agent is running is joined. Until
now the only way into a new room was to add it torooms:and restart, which
made an agent something only its operator could put anywhere. Now an
invitation is taken up when it comes from somebody the agent already shares a
room with - they can talk to it where it is, so they can ask it somewhere
else - or from a user id in the newpolicy.accept_invites_from(default
[], and the way the FIRST invitation works, before there is a shared room).
Anybody else's invitation is written to the log and left exactly where it is:
not joined, and not rejected either, because that is a question for you. A
room joined this way gets its own transcript, ledger and unprompted loop like
a configured one, and lasts until the process stops - put it inrooms:to
keep it.
Changed
- Design and plan documents no longer carry questions that were answered in
September: the repository is public with CI, the room is encrypted, seven MCP
tools, a typed name reaches other agents (rc.3), and the judge timeout exists
(rc.3). - A failed
/syncnow backs off exponentially with jitter - about 2 s, doubling
to a 5 minute ceiling - and says so ONCE: one warning when the homeserver
becomes unreachable and one line when it answers again, instead of a warning
every five seconds for as long as it was down. The back-off is interruptible,
so a stop signal during one is still honoured at once. - The ledger is written once per turn or every couple of seconds, not
fsynced
on every event the room contains. Anything that spends a budget or makes a
promise still writes immediately; a crash between flushes costs at most a
couple of seconds of "I have seen this", which the next start rediscovers as
backlog and never answers (docs/DESIGN.md, "Restart semantics").
Fixed
-
Your agent no longer treats the next thing anybody says after one of its
uninvited lines as a reply to it. The follow-up window (rc.3) now only opens
after an ANSWER of the agent's, never after an impulse, an open loop's
follow-up or an inner thought. On rc.5 an agent that had just said "the render
finished" answered "back at my desk" as if it were being asked, and a second
waiting impulse was never spoken. -
Only what somebody SAID reaches your agent. An image, a file, an audio clip, a
video or a location is no longer a line of conversation: until now its
filename or caption arrived as if it had been typed, and one addressed to the
agent was answered as a question. Each skipped event says why at DEBUG
(RUST_LOG=agent_room=debug). -
A deleted message is forgotten. On a redaction, every record of that event
leaves the live transcript and any follow-up your agent was holding about it
is dropped, so it is no longer fed back to the brain as history until the file
happens to roll. Transcripts that have already rolled into<room>.jsonl.N
are not rewritten - your agent never reads them, and deleting them costs it
nothing. -
A room alias (
#room:server) now works inrunandmcp.initand
doctorhad accepted one since the start and the connector then refused the
config they wrote;agent-room mcpjoined by alias and answered every later
call with a 404, because no Matrix endpoint but the join takes an alias. An
alias is now resolved to its room id once, at start-up, and the id is used
everywhere after that; an alias that names no room stops the process with one
line and exit 2. The per-room files understate_dirare still named after
what you wrote inrooms:, so a room configured by id keeps the transcript
and ledger it already has - andagent-room impulse --roomkeeps taking the
same string the config does. -
agent-room mcpno longer posts plaintext into an encrypted room. The
live-session server is a plain Client-Server client with no crypto store, so
a message it posted into an encrypted room was not refused by anything: it
arrived readable in a room whose whole point is that it is not. It now checks
each room when it starts and refuses to serve at all if one is encrypted,
naming the room and saying to useagent-room runfor it (exit 2);
agent-room doctorfails that room's row on a session config with the same
reason, and still passes it for a connector, which encrypts. -
examples/docker/compose.yaml: the commented-out pull line named rc.3; it now
names the current release. -
examples/agent-room.servicecarriesRestartPreventExitStatus=3: a wedged
device is not cured by restarting, and the unit used to retry it every ten
seconds for ever.examples/docker/README.mdsays what to do under compose,
which has no per-exit-code policy.
agent-room 1.0.0-rc.5
What's Changed
- A question to the room is an invitation: answer without the judge (1.0.0-rc.5) by @ollikurki in #9
Full Changelog: v1.0.0-rc.4...v1.0.0-rc.5
agent-room 1.0.0-rc.4
What's Changed
- Gates: knob coverage (every config field turned by a test) and client-realism harness; tls.verify/ca_file fix by @ollikurki in #7
- Conversation: scored judge, bot_to_bot conversational, typed names between agents, small-room back-off (1.0.0-rc.4) by @ollikurki in #8
Full Changelog: v1.0.0-rc.3...v1.0.0-rc.4
agent-room 1.0.0-rc.3
What's Changed
- doctor: send the configured API key when checking the brain by @Cyrus7 in #4
- Addressing: a typed name is an address; somebody else's name is not my line by @ollikurki in #5
- Addressing part 2: follow-up window, warm on the human line, pre-score, judge timeout (1.0.0-rc.3) by @ollikurki in #6
New Contributors
Full Changelog: v1.0.0-rc.2...v1.0.0-rc.3
agent-room 1.0.0-rc.2
What's Changed
- image: CA bundle in the scratch image (1.0.0-rc.2) by @ollikurki in #3
Full Changelog: v1.0.0-rc.1...v1.0.0-rc.2
agent-room 1.0.0-rc.1
What's Changed
- examples/docker: scratch image and compose service by @ollikurki in #1
- CI: gate on PR/push, release on tag (tarballs, attestations, ghcr multi-arch image) by @ollikurki in #2
New Contributors
- @ollikurki made their first contribution in #1
Full Changelog: https://github.com/mtclab/agent-room/commits/v1.0.0-rc.1