| Age | Commit message (Collapse) | Author | Files | Lines |
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
ask takes file paths; text and PDFs are extracted and inlined within half
the free context, images and scanned pages go as image parts to a model
that reports vision. History keeps extracted text inline and images as a
path and hash, re-read on reopen while unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Every client sees every event, so a command error from one client, such as
opening a conversation another just deleted, reached a canvas watching a
reply and was taken as that reply's end: the canvas stopped rendering
tokens the daemon kept streaming. An error from the reply thread now
carries turn: true; command errors carry none.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
A startup probe that failed with anything but OSError (llama-server not in
router mode, an empty model list) crashed the daemon at boot, against its
own comment; it is caught like the per-request failures now. llama-server's
reasons reach the client: an HTTP error carries its body and an error chunk
mid-stream its message, where the client used to see 'choices'. A daemon
that refuses to start, or fails before serving, exits 1 instead of 0.
assistant.sh no longer mistakes a --test run for the daemon.
AGENTS.md said every section from Hardware to Kokoro was voice-only, which
included findings the daemon still applies; it now names the voice ones.
It also claimed a stopped reply emits nothing after done, while a late ctx
can. The spec lists every error message, the example config no longer
shows a non-default temperature as the default, and the updates tool stops
telling the model not to read lists aloud. The spec is marked implemented.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
README and AGENTS.md describe the socket protocol and the history instead
of the voice pipeline; the voice-era findings stay, marked as such, since
a return to voice starts from them and from the voice-v1 tag. The overlay
spec is marked superseded, the daemon spec records what changed while
planning, and the example tools lose their spoken announcements.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
|
Measured live: with reasoning on, a two-line question took 21 s of
thinking before its first token, against about 5 s for questions that
needed little. thinking = false in config.toml skips it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The overlay is gone from the quickshell repo, and the canvas that replaces
it lives in the desktop shell, which has its own lifecycle. status now
reports the process, the socket and the log.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
From review of the protocol commit. An exception inside a command, such as
an id SQLite cannot bind, killed that client's reader and left a deaf
connection still receiving events; commands now run under a try that
answers error. Ids must be integers: delete with no id compared None to an
unsaved conversation's None and wiped it, and a string id deleted the row
through SQLite's affinity while the Python comparison missed, leaving the
current conversation pointing at nothing so every later answer failed to
save. ask, search and their arguments are type-checked instead of coerced.
serve() refuses to start over a socket that answers, since unlinking it
orphaned the live daemon's clients, and main() removes the socket only if
it served it. The accept loop logs and continues on errors instead of
dying silently, and a client line over a megabyte is dropped. The two
known ceilings, a stalled client delaying everyone once for 2 s and a
stopped reply holding the llama-server slot until its next chunk, are
marked. New checks cover each of these and a client connecting mid-reply.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Each client gets a reader thread; commands are ask, stop, new, list, open,
search and delete. A reply streams think, token and tool events through
say(), which checks the turn counter under the same lock that stop takes,
so a stopped reply cannot send a token after its done. A finished turn is
saved; a stopped one is not. hello carries the current conversation and
any reply in flight, so a reconnecting canvas redraws both. Errors from
llama-server become an error event and the daemon stays up; every exit
path of main() logs a line, which the voice version's silent death lacked.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
|
From review of the storage commit. makedirs and connect leave an existing
directory or file at whatever mode it had, so a history dir made earlier
with the default umask stayed 0755; both are now chmodded. A NUL in a
search ended the FTS string and raised instead of returning nothing. The
index on turns(conv, seq) serves the seq lookup per save, load_conv and the
cascade, which otherwise scan every turn. The self-check now also asserts
that an OR query matches nothing, which a non-raising but unquoted query
would not.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
One file under XDG_DATA_HOME, 0700 directory and 0600 file. turns.messages
holds what the model is sent for the turn, user/reply/tools what the canvas
draws. FTS5 with remove_diacritics finds città from citta. The query is
quoted as one phrase so FTS syntax typed by the user is matched as text,
and the self-check's integrity-check proves a conversation delete cascades
into the index.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
|
The assistant becomes a text daemon behind the quickshell canvas. STT,
TTS, the mic button loop, the presentation gate, the audio levels and the
overlay config table go; the socket, the tool runner, the never-swap model
rule and the config merge stay. The reply loop goes with the voice and
returns with the text protocol. The voice version is tagged voice-v1, so
later voice work starts from the tag instead of from dormant code.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Six tasks: tag voice-v1 and strip voice, SQLite history, the two-way
protocol and reply loop, assistant.sh, a live check against the router,
docs. Every code block was assembled stage by stage into a scratch copy
and its self-check run; the planning-time deviations from the spec are
listed at the top and folded back into it by the docs task.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Voice is dropped for now: the daemon becomes the single brain behind a
quickshell conversation canvas, with typed turns over the existing socket,
streamed think/token/tool events, and SQLite FTS5 history. The last voice
commit gets tagged voice-v1 before deletion, so later voice work starts
from the tag instead of dormant code.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Eleven tasks: the local-memory CLI with its self-check, detached commit
and push, install, assistant tools and prompt block, llamachat memory
module, config key, tool loop and local-only UI gate, the private server
repo, guardrails against cloud agents, and the live measurement.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Topic files under ~/.local/share/local-memory, a local-memory CLI both
clients call, recall/remember/forget tools offered to local models only,
offer-to-save plus explicit "remember that", and a private git repo on
the user's server with a detached commit and push after every write.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
It was the only child started without PR_SET_PDEATHSIG. The assistant
died with no log line and left arecord recording into the unlinked raw
file for ~76 minutes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
start leaves a running assistant or overlay alone and starts only what
is missing; restart is the old restart.sh. status lists each process
with its uptime, memory and children, a stray arecord left by a dead
assistant, the socket, the presentation/gaming pause flags and the
log's last lines, and exits 1 if either process is down.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Logging-only trial, nothing wired into the assistant. The pretrained
model catches every attempt in a quiet room and with quiet music, but
only 3 of 8 under music at normal volume, and pipewire here has no echo
canceller to remove it. The options are listed for a later decision.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
History kept only what was said, so after a few factual answers the
model saw no tool behind them and invented the next one: asked for
pending updates it made up counts without calling the tool (1/10 on a
replayed session). Keeping each turn's tool calls brings it back to
10/10. Their results are replaced by a placeholder, which scores the
same and keeps the context close to what it was; a follow-up on an old
result calls the tool again. The window is now the last 10 whole turns.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The 0.3 s lead silence no longer covered the wake-up of the default
sink, now on HDMI. A WirePlumber rule outside the repo keeps that sink
from suspending.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Whisper wrote "Che ori sono?" twice in one day and the model once
answered with the weather. On 10 recorded short questions beam search
(beam_size=5) gets 9 right against 8 for greedy, for 0.06 s more; an
initial prompt also got 9 but lost one question entirely, so it is not
used.
The default system prompt now says the user's words come from speech
recognition and should be read by how they sound: on "Che ori sono?"
stray tool calls went from 1 in 10 to none, other tools unaffected.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
With the clock only in the system prompt, "what time is it?" asked again
an hour later copied the old answer from history. The current question
now carries the date and time too; history stays unstamped, because
stamping every message made the model drop tool arguments (the finance
account filter went from 6/6 to 0/6).
Gemma garbles numbers it spells out in Italian ("trent settler"), 3 in
10 time answers. The default system prompt asks for digits, which
Kokoro reads correctly: 20/20 clean.
temperature in config.toml is sent with every request; unset keeps the
llama-server preset's, which other clients share.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
updates.py compares the -current ChangeLog with the installed package
database: the newest batch holding an installed package is the last one
applied, everything newer is pending. The spoken summary gives counts,
security fixes and a kernel bump, never package lists; report=true writes
a full markdown recap and opens it in MD_EDITOR, detached.
restart.sh stops a running assistant and its quickshell overlay and
starts both again in their own session.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
speaking comes from the reply thread, not the speaker: the tool
announcement would otherwise replace the tool state while the tool is
still running. arecord gets a 33 ms period, because it writes its file
in periods and the default left the user's waves at 8 levels a second;
the context size is read at startup so the first hello carries it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
A quickshell overlay fed by a JSON-lines Unix socket the assistant
owns: state, tool, context use and real audio levels. Ignored presses
send a notification instead.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Asks llama-server for usage in the stream, so the log shows how full
the model's context is; history, tool definitions and tool results all
count.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
- Game controllers report battery through their kernel driver, not
BlueZ: bluetooth.sh falls back to the power supply named after the
device address.
- Asked for a VM's IP after a listing without one, the model made one up
without calling a tool. The default system prompt now says facts about
the user's computer, devices, accounts, mail, calendar or money come
only from a tool, or it says it does not know.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Read-only: bluetoothctl show/devices/info and virsh list, domstate,
dominfo and domifaddr. Connecting devices and handling VMs are phase 2.
The DHCP lease source is empty for bridged guests, so the VM's IP comes
from ARP or the guest agent.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The status registry's effective presentation is the OR of the manual
flag and status.gaming, which the shell's game detector writes;
statusctl presentation get reads only the manual half and printed 0
with a game running. presenting() now reads both files.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Every press bumps a turn counter and kills the running aplay; queued
audio from an older turn is dropped, and reply() now runs on its own
thread and returns once its turn is stale, so the button loop is never
blocked. A cut-off exchange is left out of history so user and
assistant messages still alternate.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
- mail printed threads and the model called them emails; it now
reports messages and threads.
- finance spending takes a since date (default the first of the month)
instead of a day count, and an optional asset account. The
per-account listing needs an end date or the API rejects it; an
unknown account name gets the user's accounts back.
- Tool errors are capped at 2000 characters like normal output.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
All read-only: each command is fixed in its tool file, so the model
fills parameters but can never reach mailctl tag or firefly tx add.
qalc reads "17.5% of 240" as a modulo, so the calc hint shows percent
as a factor.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
- The model has no clock and invented a 2025 start date for the
calendar; the system prompt now carries the current date and time.
- It also derived a wrong weekday from a date; agenda.py prints the
weekday itself.
- An announcement ran straight into the answer; a 0.6 s pause follows it.
- The calendar days hint asks for 30 or more when looking for the next
event.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
A bare city name is ambiguous for the API (plain "Rome" and "Roma"
both resolve to Rome, US), so the parameter asks the model for
City,CC and the output names the country.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Phase 1 of 2: read-only tools (time, calendar, weather, search) defined
as shell-command TOML files in a config folder, plus config.toml for the
settings that are constants today. Modifying tools get their own spec
after phase 1 is tested live.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
kokoro-onnx is now packaged (python3-kokoro-onnx, without
espeakng-loader) and finds the system espeak-ng with its default
config, so the explicit EspeakConfig and the .venv setup go away.
Tested live: two Italian questions answered and spoken correctly.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Piper voices and ggml-base/small are gone from /data/voice-models;
the installed piper-tts and python3-pathvalidate packages remain.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|