Repository navigation
Still v0.3.0
Minor release after v0.2.0; milestone v0.3.0 (27 closed issues) and everything merged to main since v0.2.0. New for the owner: the owner's Slack direct message as a conversation surface over Socket Mode (#214) and the owner's Mattermost direct message, outbound only (#213), with one owner across messengers for connectors and current context (#319), Slack answers sent as Slack Markdown (#372), the Slack thread status saying what Still is doing (#446) and every chat surface's worker told it answers in a chat (#375); a tool-free independent question answered while another Work runs (#17), and a shorter critical path for short replies (#309); messages sent mid-answer steer the running worker natively, a reply is never delivered with a steer its worker did not see, and the owner is told what happened to each one (#308), and a mid-Work correction reaches planning, not only the running worker (#428); a subscription CLI update no longer stops Still: the installed Codex or Claude Code binary is qualified locally in the background instead of against an in-code version list (#346, #344, #349), and on Linux and WSL a subscription CLI qualifies by those probes instead of a macOS-only list (#450); recall of earlier conversation exchanges, both sides (#205); a separate opt-in Gmail modify grant for organising the mailbox, with no send (#355), and mail results that carry a Gmail web link the owner can open (#497); Google Calendar changes made by the owner's AI through the Calendar API with Google's own refusal reason visible, replacing the fixed calendar draft and approval flow, with Still forcing no invitation e-mails (#432); forget and delete keep a record instead of erasing and cover the transcript (#367), and teach the owner model nothing (#380); the owner's stated plans remembered as durable facts (#398), a once-a-day look back over recent requests that finds facts first, then tidies quietly, raises only what the owner relies on and reads only the owner's own words (#402, #416, #423, #424, #425, #429), dated event records in each brief (#442), 내 기록 marking what the look back wrote (#443), an answer showing the memory it relied on by using it (#426), and every remembered fact saying what it rests on, the owner's own words or an inference, so a sentence the assistant wrote is never saved as something the owner said (#493); one shared voice for every owner-facing generator and Still's standing instructions sent to Codex as developer instructions (part of #198); the owner told what was understood and the plan before a long Work, and what the worker found while it works (#407), plan previews and interim messages that read like a person (#452), and a waiting bubble that names the launched AI and model (#458), shows only dots on Telegram (#445) and, with /dev on, shows them while the Work runs (#477); Claude Code sub-agents run inside the worker's turn and are shown by name in the waiting bubble, with the answer arriving only when they are done (#460); the worker brief states the Work's remaining allowance (#468), a Work that stops at its budget mid-progress offers Continue (#471), the token usage each CLI reports is recorded and shown on the Work (#467), and the worker catalogue shows each model's measured speed and usage next to its task size (#473, #498); a terminal first run that leads straight into a conversation, with Telegram connected from that conversation and its token typed hidden (#438); the web management screen with connection status first, files and permissions, memory first, and scheduled and diagnostics entry points (#390), settings panes that show what is on and add a connection by type through one dialog (#474), and site login reporting what it saved (#488); a judgment that may ask for the engine's strongest model, never a pinned name (#420), and the Judgment model chosen by measured speed among the qualified candidates, with Settings naming it, its median and p95 and the candidates compared (#472, #465), a failed candidate naming the case it failed (#470) and a Codex judgment taken at turn.completed (#469); a missing connection on the CLI route parks the Work and hands over the link, and a slot's write connection is offered in conversation (#363, #366); independent effect-free reads run concurrently on the CLI route (#386); and per-Work tool-attempt and browser-step caps raised to 200 (#353). Fixes include the login window opened at the full sign-in address (#340), a desktop-only page widening the phone sign-in window instead of being cropped (#254), predecessor browser and location fixes ported (#201), connector handoff, resume refusals and folder-permission lines in the owner's language (#242), the held-value comparison saying when it was cut off (#245), direct-route history labelled as earlier Works and a typed awaiting-the-owner fact (#240), evaluation in context with critique treated as advice (#202), the 8-character redaction floor applied to API responses so provider ids are not corrupted (#368), stored secrets redacted in the service so bridge text and method_gap notes are not withheld (#369), an attempt that could not be confirmed reported as such instead of as an irreversible action that ran (#387), the early plan kept when only the clock moved during routing (#384), watch and preparation fixes (#393, #394, #395, #404, #412), planner effort weighed against observed time (#410), a needed question about a missing request detail not treated as a prerequisite (#406), earlier scheduled goals shown as saved task context (#360), a resumed Work's request shown once in recall (#361), Still bridge calls counted apart from the CLI's own actions (#377), an interim message to the owner no longer blocking re-delegation (#466), and release workflow fixes for re-runs, the formula PR and milestone closing (#313, #301, #335). For development only, an AppWorld-based action sandbox for evaluations (#484).
Not claimed: No install of this tag archive was observed before publication; the publish workflow's macOS brew install/brew test and the installer smoke run only after the tag exists, and the owner's own upgrade is not yet recorded. Tests and CI do not prove live external integrations, model-dependent behavior or a background service surviving a restart. In particular, no live Slack or Mattermost workspace session, no live Gmail mailbox organising run, no live cross-model voice consistency and no completed Intel Mac Homebrew install is claimed by this release. Calendar drafts left pending by v0.2.0 are not applied after the upgrade, because the draft and approval flow is removed (#432). No live Linux or WSL subscription CLI judgment run is claimed (#450 is checked by tests). Known open items: the rest of one consistent voice, the messages.json register audit and live cross-model samples (#198); the README hero visual still shows the removed calendar draft and approval flow (#436); and test_mcp_sdk_bridge is flaky on Linux CI (#457).
Scope: https://github.com/Jongtae/Still/milestone/3
What's Changed
- docs(release): list #296 and #297 in what v0.2.0 carries (#286) by @Jongtae in #305
- fix(release): let the formula name the release in progress before it is recorded (#301) by @Jongtae in #302
- refactor(surface): route delivery claims, owner identity, guards, owner acts and notices through the surface (#213) by @Jongtae in #299
- release: install Still v0.2.0 with Homebrew (#286) by @Jongtae in #298
- test(api-requests): one fixed clock per stale-answer turn (#290) by @Jongtae in #300
- fix(judgment): label direct-route history as earlier Works; say the time only when known (#240) by @Jongtae in #303
- fix(information-use): say when the held-value comparison was cut off; fewer false matches (#245) by @Jongtae in #304
- fix(remote-login): a page wider than the phone window widens the window instead of being cropped (#254) by @Jongtae in #310
- feat(mattermost): the owner's Mattermost direct message as a conversation surface, outbound only (#213) by @Jongtae in #306
- fix(locale): connector handoff, resume refusals, folder-permission and phone sign-in lines follow the owner's language (#242) by @Jongtae in #312
- feat(judgment): one typed awaiting-the-owner fact for the plan, the judgment and the self-review; waiting is not a shortfall (#240) by @Jongtae in #311
- release: record published v0.2.0 and set 0.2.1 as the next placeholder (#286) by @Jongtae in #314
- test(steer): pin how Claude Code and Codex take a message sent mid-answer (#308 S0) by @Jongtae in #315
- docs: pin the one-line installer to the commit that installs v0.2.0 (#286) by @Jongtae in #318
- feat(steer): never deliver a reply with a steer its worker did not see (#308 S1) by @Jongtae in #320
- feat(slack): the owner's Slack direct message as a conversation surface over Socket Mode (#214) by @Jongtae in #316
- test(webkit): fit the #254 desktop-only fixture in the CI runners' 1024-px screen (#321) by @Jongtae in #322
- feat(steer): a Claude Code turn takes the owner's steers live in its stream-json session (#308 S2) by @Jongtae in #324
- chore(plan): close out WORKPLACE-01 (#206) by @Jongtae in #325
- feat(steer): the owner is told what happened to each message sent mid-answer (#308 S4) by @Jongtae in #326
- perf(decision): a judgment's record keeps when its CLI started, first answered and exited (#309 L3) by @Jongtae in #329
- test: behavioural tests for working-notes blockers, the serial-class guard and cue-guard coverage (#248) by @Jongtae in #330
- fix(browser): port offscreen controls and fail-closed navigation decisions from the predecessor (#201) by @Jongtae in #328
- perf(turn): ask the Work's first plan beside continuity, not after it (#309 L1) by @Jongtae in #331
- ci(release): resume a full re-run on its own tag, keep earlier-release lines, deploy the site last (#313) by @Jongtae in #323
- feat(connectors): one owner across messengers for connectors and current context (#319) by @Jongtae in #327
- chore(plan): activate RESPONSIVE-01 (#332) by @Jongtae in #334
- perf(engine): qualify the Codex binary once per binary identity per process (#309 L7) by @Jongtae in #333
- ci(release): close the release milestone after publication (#335) by @Jongtae in #336
- test(runtime): behavioural tests for the read cap, mid-group stop/deadline and threaded provenance (#248) by @Jongtae in #339
- fix(browser,location): port agentos#1578 and #1583 (#201) by @Jongtae in #338
- fix(browser): open the login window at the full sign-in address (#340) by @Jongtae in #341
- test(browser,login): behavioural tests for the re-armed login prompt, press misses and plain contenteditable (#248) by @Jongtae in #343
- fix(decision): qualify Codex 0.164.0 for the Judgment route (#344) by @Jongtae in #345
- feat(conversation): answer a tool-free independent question while a Work runs (#17) by @Jongtae in #342
- fix(decision): qualification follow-up cases send the previous request and reply the question needs (#349) by @Jongtae in #350
- fix(presence): one shared voice for every owner-facing generator (#198) by @Jongtae in #351
- fix(decision): evaluate in context and treat critique as advice (#202) by @Jongtae in #352
- fix(budget): raise per-Work tool-attempt and browser-step caps to 200 (#353) by @Jongtae in #354
- chore(plan): add CLI-UPDATE-01 (#346) to RESPONSIVE-01 by @Jongtae in #356
- feat(mail): separate opt-in Gmail modify grant for mailbox organising, no send (#355) by @Jongtae in #357
- fix(presence): Codex gets Still's standing instructions as developer instructions; drop secretary framing (#198) by @Jongtae in #359
- feat(memory): recall earlier conversation exchanges, both sides (#205) by @Jongtae in #362
- build(actions): bump astral-sh/setup-uv from 10.3.0 to 10.3.2 by @dependabot[bot] in #347
- fix(handoff): offer a slot's write connection in conversation, and say to open it on the PC (#363) by @Jongtae in #365
- fix(context): show earlier scheduled goals as saved task context, not owner turns (#360) by @Jongtae in #364
- fix(handoff): park for a missing connection on the CLI route, stop re-delegating, hand over the link, label the change grant (#366) by @Jongtae in #371
- feat(forget): keep a record instead of erasing; forget and delete cover the transcript (#367) by @Jongtae in #370
- fix(engine): qualify the installed subscription CLI locally instead of an in-code version list (#346) by @Jongtae in #358
- fix(slack): send answers as Slack Markdown so formatting renders (#372) by @Jongtae in #374
- fix(recall): owner_said shows a resumed Work's request once (#361) by @Jongtae in #378
- fix(presence): chat answers lead with the answer; every chat surface is a fact (#375) by @Jongtae in #376
- chore(plan): close out RESPONSIVE-01 (#332) by @Jongtae in #379
- test(settings): join the settings worker before removing the temp store (#373) by @Jongtae in #382
- fix(forget): no owner-model lesson from forget/delete Works; Evidence states undo and scope (#380) by @Jongtae in #381
- fix(cli): count Still bridge calls apart from the CLI's own actions so large read-only turns stay observable (#377) by @Jongtae in #383
- fix(orchestrator): keep the early plan when only the clock moved during routing (#384) by @Jongtae in #385
- fix(redaction): apply the 8-character floor to API response redaction too (#368) by @Jongtae in #389
- fix(orchestration): say an attempt could not be confirmed instead of claiming an irreversible action ran (#387) by @Jongtae in #388
- perf(bridge): run independent effect-free reads concurrently on the CLI route (#386) by @Jongtae in #391
- fix(preparations): a watch accepted after its window ended is not started (#395) by @Jongtae in #396
- fix(preparations): tell the owner once when a watch's runs fail (#394) by @Jongtae in #397
- fix(evals): see current state and tool events, judge with gpt-6.1-terra (#392) by @Jongtae in #400
- feat(owner-model): remember the owner's stated plans as durable facts (#398) by @Jongtae in #401
- fix(preparations): the owner reads and accepts an offer, not the worker brief (#393) by @Jongtae in #399
- fix(preparations): tell the model until is exclusive and when its last check is (#404) by @Jongtae in #405
- fix(decision): a needed question about a missing request detail is not a prerequisite (#406) by @Jongtae in #408
- feat(presence): tell the owner what was understood and the plan before a long Work (#407) by @Jongtae in #409
- fix(preparations): name a watch's last check minute when its deadline follows it (#412) by @Jongtae in #413
- fix(planner): weigh effort against its observed time and judge account_change on this message (#410) by @Jongtae in #414
- feat(owner-model): a once-a-day look back ("dream") over recent requests (#402) by @Jongtae in #415
- fix(owner-model): anchor a dream on the newest request the owner can be told on (#416) by @Jongtae in #417
- fix(owner-model): a dream keeps scoped conditions and current states out of standing memory (#416) by @Jongtae in #419
- fix(bridge): redact stored secrets in the service, so bridge text and method_gap notes are not withheld (#369) by @Jongtae in #418
- feat(presence): the worker tells the owner what it found while it works (#407) by @Jongtae in #411
- feat(judgment): a judgment may ask for the engine's strongest model, never a pinned name (#420) by @Jongtae in #421
- docs(memory): memory is shown in use; consolidation is quiet and reads only the owner's words (#422) by @Jongtae in #427
- feat(owner-model): the dream finds facts in a first pass, then tidies (#429) by @Jongtae in #430
- fix(owner-model): requests that did not come from the owner are not the owner's words (#423) by @Jongtae in #434
- feat(web): connections status first, files·permissions, memory first, scheduled and diagnostics entry points (#390) by @Jongtae in #433
- fix(owner-model): a dream ends a fact only when it restates it or the owner's words replace it (#424) by @Jongtae in #431
- feat(orchestration): a mid-Work correction reaches planning, not only the running worker (#428) by @Jongtae in #435
- feat(owner-model): a nightly look back tidies quietly and raises only what the owner relies on (#425) by @Jongtae in #439
- feat(calendar): the AI changes events through the Calendar API and sees Google's reason (#432) by @Jongtae in #437
- feat(presence): an answer shows the memory it relied on by using it (#426) by @Jongtae in #441
- feat(memory): 내 기록 marks what the look back wrote, and a dream fact names the requests it came from (#443) by @Jongtae in #444
- feat(telegram): the waiting bubble shows only the dots, no progress line (#445) by @Jongtae in #447
- feat(memory): dated event records from the dream, and recent ones in each brief (#442) by @Jongtae in #448
- feat(first-run): a polished terminal setup that leads straight into a conversation (#438) by @Jongtae in #440
- feat(evals): run paired-chat scenarios through a loopback Telegram stand-in (#452) by @Jongtae in #455
- feat(terminal): connect Telegram from the terminal conversation, token typed hidden (#438) by @Jongtae in #456
- fix(presence): the plan preview and interim messages read like a person (#452) by @Jongtae in #453
- feat(presence): the waiting bubble names the launched AI and model (#458) by @Jongtae in #459
- fix(engine): subscription CLIs qualify on Linux/WSL by their probes, not a macOS-only list (#450) by @Jongtae in #451
- fix(engine): no sub-agent in a Claude Code worker turn (#460) by @Jongtae in #463
- feat(slack): the thread status says what Still is doing (#446) by @Jongtae in #454
- fix(orchestrator): an interim message to the owner no longer blocks re-delegation (#466) by @Jongtae in #476
- fix(decision): a failed Judgment candidate names the case it failed and its answer (#470) by @Jongtae in #475
- perf(decision): take a Codex judgment at turn.completed, reap the CLI afterwards (#469) by @Jongtae in #478
- fix(settings): 판단 AI names the qualified follow model, not the first candidate (#465) by @Jongtae in #480
- feat(evidence): record the token usage each CLI reports and show it on the Work (#467) by @Jongtae in #479
- feat(runtime): the worker brief states the Work's remaining allowance (#468) by @Jongtae in #481
- feat(engine): Claude Code sub-agents run inside the turn and show in the bubble (#460) by @Jongtae in #483
- feat(web): settings panes show what is on; add by type through one dialog; grouped cards (#474) by @Jongtae in #482
- feat(presence): /dev on shows the launched AI and model while Work runs (#477) by @Jongtae in #485
- feat(evals): AppWorld world adapter for the action sandbox (#484) by @Jongtae in #486
- feat(evals): action sandbox wiring, owner-played approvals and world report (#484) by @Jongtae in #487
- feat(judgment): choose the Judgment model by measured speed among qualified candidates (#472) by @Jongtae in #490
- fix(evals): world runs find their data and tell the AI how a world task ends (#484) by @Jongtae in #492
- feat(orchestrator): worker catalogue shows measured speed and usage per model (#473) by @Jongtae in #494
- feat(web): site login reports what it saved; rows without a sign-in offer login (#488) by @Jongtae in #489
- feat(presence): offer Continue when a Work stops at its budget mid-progress (#471) by @Jongtae in #491
- feat(memory): a fact records what it rests on, and "the owner said it" only from the owner's words (#493) by @Jongtae in #495
- feat(orchestrator): worker catalogue shows task size next to measured speed (#498) by @Jongtae in #499
- fix(gmail): mail results carry an owner-openable Gmail web link (#497) by @Jongtae in #500
- chore(release): prepare v0.3.0 (#461) by @Jongtae in #464
Full Changelog: v0.2.0...v0.3.0