Skip to content

agenttalk 0.100.0

Choose a tag to compare

@zoolok17 zoolok17 released this 10 Oct 08:58
· 535 commits to master since this release
67fcffe

In short: closing a terminal window can no longer stop the gateway: its scheduled task now
starts Python without a console window, and gateway run writes its own messages to a log
file. Each machine that runs the gateway needs a one-time task update, with the steps in
"Closing a terminal window can no longer stop the gateway" below; the ledger, the price policy
and the spend checks are unchanged. Team members now look in the team's lessons once before
building, fixing or reviewing. Leads can release one finished worktree after merging
(agenttalk janitor --release). Team notes work before a domain registry is set up, scratch
cleanup checks its starting folders and their parents, a wrapped seat always replies under its
own name, and documentation-only pull requests can skip the long test queue.

Added

  • Team members now look in the lessons once before real work. Before building, fixing or
    reviewing something, a member searches the team's lessons for one concrete word from the task
    (for example junction), once, with one retry using another word only if the first search found nothing. The word goes last, after --, so a word that looks like an option is still read as the word. The search only reads; it
    never touches the inbox. A member names a lesson in its reply only if the lesson changed what it
    did, and keeps three cases apart: nothing found, the lookup failed (never written down as
    "found nothing"), and read but not useful. A failed lookup never stops the work. The wrapped-turn
    instructions, the listen skill (Claude and Codex copies) and the lead skill's brief guidance say
    so, and docs/ops/lessons-lookup.md names the rule, its start date and the seats that already
    did this by habit, so the lessons-use trial can measure reported use under one fixed rule.
    A search that reports a problem with the lesson store counts as incomplete, not as "found
    nothing". A hit whose preview is cut off (it ends in ...) is read in full, once, before it can
    change a decision. For that read, agenttalk knowledge search has a new small option, --key
    (with --domain), which returns exactly the lesson with that key, so other lessons that only
    mention the key cannot push it out of the result. Several lessons are reported in one
    comma-separated field. Wrapped members get the rule automatically after the wrapper is restarted on this
    version. A member run by hand keeps its older installed skill file, because the installer
    leaves a changed file alone: preview with agenttalk install-skills --no-devkit --dry-run,
    back up local edits, refresh on purpose with agenttalk install-skills --no-devkit --force,
    then start a new session. --no-devkit keeps the update to the bus skills; without it the
    installer would also overwrite the development skills, which sit in other folders. The steps
    are in the policy page.

  • Release one finished worktree after merging. Leads can use
    agenttalk janitor --release <path> to remove a clean, unused checkout while
    keeping its branch and commits. The command fetches the remote default branch
    and refuses when exact ancestry, files, links or activity records cannot be
    checked safely. Squash merges stay in place. --release-report lists eligible
    checkouts and sizes without deleting them; both lead skills now include it in
    the daily routine. Hidden Git edits and ambiguous launch folders prevent release;
    both supervisor state locations are checked. The guidance explains the need to
    stop other users and the limits of deletion checks on each platform.
    Stale file monitors cannot hide edits, nested repositories with capitalised
    metadata names are kept, and unrelated older lane records no longer block release.
    Bare repositories inside caches are kept too. Tracked files are compared by
    content, so matching file sizes and times cannot hide unfinished edits.

  • Permanent checks for mistakes that kept returning in usage readings (#301).
    Contributors can now run a small set of checks across publication and display paths,
    including deliberate faults that prove the checks detect a wrong account or an expired
    figure. A new danger-area page names other fragile areas and their existing guards.
    The checks include recorded events and the command and web displays. They also
    document an open checkpoint problem (#408), whose fix remains separate.
    This changes contributor checks and guidance, not runtime behavior. Nothing needs to
    be changed in an existing team.

Changed

  • Documentation-only pull requests can avoid the long test queue. Before
    this, every PR push ran the full test matrix and the extra Windows timing
    trial. Now changes to prose that tests do not use run the documentation and
    safety checks, and the trial runs only after pushes to master. Documents used
    by tests, including README and CHANGELOG, still take the full path. Code PRs
    keep the full test matrix; master keeps every check. Contributors do not need
    to change how they submit a PR. Technical details: the file rule and the
    result reported by dev-gate aggregate are documented in docs/DEV-GATE.md.

Fixed

  • Closing a terminal window can no longer stop the gateway. The gateway's
    Scheduled Task used to start Python in a console window. On 2026-10-08 a Windows
    Terminal update closed its windows, the gateway ended with it, its automatic
    restart did not bring it back, and the gateway stayed down for 16 hours.

    What you will notice: before this, the task started python.exe, which opens a
    console window. Now it starts pythonw.exe, the same Python from the same folder
    without a window, and LiteLLM starts without one too. With no window there is also
    nowhere to print, so gateway run now writes its own messages to a log file next to
    the LiteLLM log, set up before the gateway code loads. Without that, an error message
    would itself crash the run, and a failure while loading would leave no trace.
    task-install refuses, naming the folder, when pythonw.exe is missing, and
    task-install, gateway start and gateway status all refuse or report a launcher
    with no windowless twin, such as python3.exe. A task installed before this change
    shows up in gateway status as out of date, with the steps to update it; status only
    reports and changes nothing. gateway start and task-install refuse the old task
    with the same steps. task-install never overwrites a registered task: Task Scheduler
    cannot replace a task only while it is still the one agenttalk checked, so you end and
    remove the old task yourself. gateway stop accepts the old and the new task from
    either python.exe or pythonw.exe.

    What you need to do: once, on each machine that runs the gateway, run agenttalk gateway stop --timeout 30, then schtasks /End /TN <task> and schtasks /Delete /TN <task> /F (the task name gateway status shows), then agenttalk gateway task-install, then agenttalk gateway start, and check agenttalk gateway status.
    Run the agenttalk commands with the Python runtime that installed the task, after
    updating agenttalk in it: the old task is recognised only in that runtime's folder. On
    Linux nothing changes.

    Technical details: src/agenttalk/ovh_gateway_service.py (windowless_task_identity
    and _backend_identity for the Windows backend only, _registered_with_console and
    _task_update_steps for the refusals, the two-form stop_task, CREATE_NO_WINDOW for
    LiteLLM),
    src/agenttalk/gateway_run_log.py (route_missing_output_to_log, called from
    src/agenttalk/__main__.py for gateway run); status reports the errors
    task_console_launch and task_launcher_unsupported and the field task_update; the
    run log is %LOCALAPPDATA%\agenttalk-ovh\gateway\gateway.log. The ledger, the price policy,
    the spend checks and the binding are unchanged. See "The task runs without a console
    window" in docs/QWEN-OVH-TRIAL.md.

  • Team notes work before a domain registry is set up. Pointers, gotchas,
    seams and decisions can now use --domain process on a bus without
    .agenttalk/domains.json, with the same review rules as process lessons.
    Non-lesson notes still need an explicit domain. Buses with a registry keep
    their existing rules and note format. Unknown-domain errors now list the
    available domains and explain how to add one.

  • Four wording fixes in the shipped documentation and the lead skills (#362, #363, #355,
    #312).
    No behavior changed; the text now says what the code already does. The lead
    skills' "check before an irreversible action" example now shows --gates, so a lead
    following it word for word gets warned when a gate says HOLD instead of only when a
    request was rescinded (#362). The README's ack row now separates its two forms: without
    --to-request it moves a cursor, with --for <seat> --to-request <id> it closes that
    request's thread for that seat (a work order, a review, a proposal or a question), records the closure permanently, and does not move the cursor (#363). The lead skills no
    longer say a lead may never start a teammate; a lead can set up the team and start the
    supervisor when asked, but still never starts a teammate's own assistant directly,
    outside the supervisor or the wrapper (#355). And the gateway guide now states that its
    amounts are in EUR excluding VAT (#312). The policy data itself carries no tax label yet,
    so #312 stays open.

  • A wrapped seat that follows its reply instructions now always replies under its own
    name (#354, #178).
    The instructions the wrapper printed gave agenttalk reply with no
    --from, and the wrapper did not tell the seat's own process who it was. A seat whose
    settings did not happen to carry its name could stop with "no agent identity" (the work then
    looked unanswered and was handed out again), or answer through a fallback under another
    seat's name.

    What you will notice: every agenttalk reply command in a seat's instructions now reads
    agenttalk reply --from <seat> ..., and the wrapper sets AGENTTALK_SELF to the seat it
    serves for Claude and Codex seats alike, replacing whatever the launching shell left there
    (nothing, an empty value or another seat's name), so progress notes, "composing" markers, ordinary
    sends and the quiet housekeeping turns also go out under the seat's own name. What you need to do: nothing.

  • A review reply may name the commit it read when the task named none (#299). Before, such
    a reply was refused with "reply work_head contradicts opener", the typed verdict was lost
    and the task was closed without it. Now the commit is accepted and recorded. A task that
    did name a commit still refuses a different one, and the refusal now says what to do: reply
    with the pinned commit, leave it out, or ask the lead to resend the task for the commit you
    read. The work board now takes the candidate commit from the reviewers' replies when the task
    named none, so such a GO lands as a normal one instead of "candidate missing". It never
    guesses: reviewers who name different commits make the item "unknown" until a replacement review that names one commit takes over (both old verdicts stay filed under the commits they reviewed), and a reply without a
    commit next to one with a commit leaves the candidate unset; a reviewer's request for more information keeps the commit it named and counts in that agreement, but approves nothing.

  • Scratch cleanup checks its starting folders and their parents (#399).
    janitor --apply keeps the candidates and reports FAILED if a starting or parent folder
    was replaced after the scan, became a link, or cannot be checked. A parent
    that was already a link is refused too, including a linked profile folder.
    This prevents a renamed parent from sending cleanup into another folder.
    Cleanup also leaves the main checkout and worktrees outside its removal
    candidates uncommitted. Worktrees holding ignored work beyond known caches,
    including a message store or .env, are kept with a reason. A failed scan
    or removal now returns a failure exit code for scheduled runs.
    Paths containing .. use the physical repository's sibling for default scratch.
    doctor reports linked ancestors as "could not be listed or trusted";
    this is an intentional cleanup refusal, not a doctor failure.
    After installing this fix, cleanup can resume on paths with plain, unchanged
    roots and parents while no other process is rearranging those folders; the existing
    limitation on changes made during the delete itself still applies.