Commit Graph
105 Commits
Author SHA1 Message Date
ZacharyZhang-NYandClaude Opus 5.5 665bf3cae1 Q83: a model passes an agent check before it does agent work
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:19:48 -04:00
ZacharyZhang-NYandClaude Opus 5.5 d557e42676 Q77: a session keeps the model and account it started with
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 13:03:11 -04:00
ZacharyZhang-NYandClaude Opus 5.5 8fcdd61bc5 Q76: runs call the agent's own model, or fail plainly where the provider cannot
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 12:53:25 -04:00
ZacharyZhang-NYandClaude Opus 5.5 4325dfa874 Q68: sessions are bounded in time, tool calls per turn and goal audits
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:50:26 -04:00
ZacharyZhang-NYandClaude Opus 5.5 168572dd76 Q63: model calls are priced and agent and department budgets limit real spend
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:08:38 -04:00
ZacharyZhang-NYandClaude Opus 5.5 88463e4396 Q60: step limits end sessions as checkpoints; only sessions without progress spend the budget
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 10:33:57 -04:00
ZacharyZhang-NYandClaude Opus 5.5 d72333a04c Q56: disconnecting a provider stops the sessions using it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 10:02:46 -04:00
ZacharyZhang-NYandClaude Opus 5.5 9e1f8da11c Q55: the operator can stop in-flight runs; pause stops them too
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:59:03 -04:00
ZacharyZhang-NYandClaude Opus 5.5 e809cfefea Q54: later sessions see what earlier ones already did and where they failed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:35:27 -04:00
ZacharyZhang-NYandClaude Opus 5.5 69e991ff93 Q52: goal closures stop linked work, and running sessions hear goal changes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:16:48 -04:00
ZacharyZhang-NYandClaude Opus 5.5 d9cb86a999 Q51: agents may only move work they own, manage or review; done needs evidence and sign-off
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:04:34 -04:00
ZacharyZhang-NYandClaude Opus 5.5 090c37abb8 Q48: each agent's heartbeat interval paces its queued work
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 08:25:06 -04:00
ZacharyZhang-NYandClaude Opus 5.5 b164677ea7 Q46: parents wait for their subtasks and cannot close while any are open
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 08:13:35 -04:00
ZacharyZhang-NYandClaude Opus 5.5 8b521ef5d9 Q44: queued runs re-check their task and are superseded when it changed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 07:59:14 -04:00
ZacharyZhang-NYandClaude Opus 5.5 9be5ad06c1 Q42: claimed runs that fail in preparation close cleanly and are logged
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 07:42:16 -04:00
ZacharyZhang-NYandClaude Opus 5.5 7be072f8c5 Q40: tasks choose a writing mode; house style applies to conversational work only
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 07:28:47 -04:00
ZacharyZhang-NYandClaude Opus 5.5 645ce686bb Q39: runs load only model-compatible skills and state each skill's contract
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 07:22:08 -04:00
ZacharyZhang-NYandClaude Opus 5.5 18128b5ad4 Q26: knowledge has scope, expiry, and supersession
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 05:47:03 -04:00
ZacharyZhang-NYandClaude Opus 5.5 8c70111c93 Q25: runs leave outcomes and failure causes as searchable memory
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 05:34:17 -04:00
ZacharyZhang-NYandClaude Opus 5.5 95e607bea7 Q24: knowledge enters the run: search and record tools, relevant entries in prompts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 05:20:03 -04:00
ZacharyZhang-NYandClaude Opus 5.5 b32e784469 Q19: pack the skills most relevant to the task first
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 04:48:44 -04:00
ZacharyZhang-NYandClaude Opus 5.5 f4d16eb46a Q17: budget every model request against the provider's context window
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 04:40:02 -04:00
ZacharyZhang-NYandClaude Opus 5.5 469f2f2c35 Q15: show which messages each agent actually read
Runs record a context manifest once a model turn succeeds; the chat
marks each human message with the agents that read its current version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 04:21:57 -04:00
ZacharyZhang-NYandClaude Opus 5.5 592ce69219 Q14: every human sender shows their own kind and role, board included
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 04:08:21 -04:00
ZacharyZhang-NYandClaude Opus 5.5 31bf0a1497 Q13: messages carry their attachments; agents read them by file_id
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 04:05:11 -04:00
ZacharyZhang-NYandClaude Opus 5.5 22632a4695 Q11: deleted messages and withdrawn commands never reach the model
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 03:47:57 -04:00
ZacharyZhang-NYandClaude Opus 5.5 31ab919334 Q10: wake tasks no longer carry a truncated copy of the message
Manual re-runs of a chat wake answer the same thread.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 03:36:22 -04:00
ZacharyZhang-NYandClaude Opus 5.5 abe9534350 Q9: chat wakes carry every new message and the latest history
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 03:29:59 -04:00
ZacharyZhang-NYandClaude Opus 5.5 2a7b17a47a Q8: one writing run per workspace directory
Write-granted runs whose directories overlap (same folder, symlink or
junction, or nested) wait for each other, at claim time and for manual
runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 03:25:39 -04:00
ZacharyZhang-NYandClaude Opus 5.5 72eb645067 Q7: an agent runs one session at a time
Claims skip agents that already have a running run, manual runs refuse a
busy agent, a run whose task was reassigned fails before executing, and
tasks with a run in progress cannot be deleted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 03:11:39 -04:00
ZacharyZhang-NYandClaude Opus 5.5 0fb4ca9ae6 Q6: feed messages that arrive mid-run into the next model turn
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 02:58:54 -04:00
ZacharyZhang-NYandClaude Opus 5.5 46dd77ddda Q5: give chat wakes timed, attributed history apart from the new ask
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 02:48:15 -04:00
ZacharyZhang-NYandClaude Opus 5.5 6570492daa Q3: record a structured handoff on every delegated task
create_task now pins upstream files by content hash and carries the
source task, source thread, verified facts, open questions and
acceptance criteria into the assignee's prompt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 02:35:12 -04:00
ZacharyZhang-NYandClaude Opus 5.5 77505aab8d Q1: keep other work's chat mentions out of task prompts
Every mention already wakes the agent through its own chat-wake task, so
ordinary tasks no longer inject the org-wide mention inbox.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 02:19:48 -04:00
ZacharyZhang-NY 7de378b41c A chat-wake reply is delivered by the system, not by prompt compliance
A wake run whose model answered in plain final text (the coding-tuned
Kimi family does this instead of calling send_message) completed
'successfully', closed its vehicle task, and left the founder staring
at a silent conversation — the reply lived only in provider_requests.
deliverChatReplyIfMissing now runs before a chat-wake run may complete:
when the run never posted into the source thread (run-start watermark,
so a send_message it did make suppresses the fallback), its final text
is delivered as the agent's reply. A delivery failure fails the run
loudly instead of closing it on silence.
2026-07-16 11:46:53 -04:00
ZacharyZhang-NY 75c73ce6f0 The founder probes through provider cooldowns; a served request lifts the park
A single transient failure from a background run used to silence the whole
company — founder included — for the full ten-minute cooldown. The
interactive lane now claims one probe per park window: the founder's
message tries the provider immediately, a success lifts the cooldown for
everyone (a served request is proof of health), and a failed probe re-arms
the park with the probe spent, so a real outage is never hammered.
Autonomous work still waits cooldowns out unconditionally.
2026-07-14 21:19:14 -04:00
ZacharyZhang-NY 9246e7e312 The founder gets a dedicated execution lane, not just queue priority
Claim priority alone still left the founder waiting behind whatever long
autonomous run held the single execution slot. The worker now runs two
slots: autonomous grinds the queue one run at a time as before, while
the interactive slot claims only human-triggered wakes and executes them
concurrently — a founder message answers in seconds regardless of what
the company is building in the background. Housekeeping (wake expiry,
goal reviews, heartbeat enqueue) now runs every tick instead of pausing
during long runs. Integration test pins the concurrency: the CEO's reply
lands while a gated autonomous run is still in flight.
2026-07-14 21:15:19 -04:00
ZacharyZhang-NY c7eafb2836 Founder-CEO chat round trip proven end to end; agents see the founder
loadChatContext labels human senders "[Name (founder)]" so a woken agent
knows it answers its boss, not a teammate. New integration test drives
the whole loop — founder DM wakes the CEO, the prompt names the founder,
the reply lands in the same pinned conversation and thread, the wake
task closes — and a Playwright spec pins the UI contract: badged CEO row
first, selected by default, message queues the wake run, channel recency
never displaces the pin. AGENTS.md documents the feature contracts.
2026-07-14 00:23:49 -04:00
ZacharyZhang-NY 9c85b5ee3c A task is finished when it reaches done, not when a run ends
The two real goal tasks from July 9 each got exactly one session: the run
completed, the agent never moved the task off backlog, and the heartbeat's
"has a completed run" exclusion locked them out forever. The agents could
not have closed them anyway — update_task_status requires a task_id the
prompt never carried.

The progress contract, made explicit end to end:
- The task prompt now carries "Task id: ..." and tells the agent exactly how
  to end a session: done via update_task_status when the work is complete,
  in_progress with a note on what remains when it is not.
- The heartbeat re-enqueues any open task with no run in flight — a
  completed run that left its task open earns a follow-up session, with the
  prompt stating how many prior sessions were spent so the agent continues
  instead of redoing work. The retry budget (3 non-transient runs) still
  bounds every task; a task that spends it parks with one log line naming it.
- Scripted agents in the integration suites now close their tasks the way
  the contract expects real ones to.
2026-07-09 19:17:44 -04:00
ZacharyZhang-NY 2526633bfb Chat-wake tasks live and die with their reply run
Of the 202 tasks stranded in the backlog on July 9, 200 were "Reply to ..."
wake vehicles: every agent @mention creates a task plus a queued run, the
reply goes out, and nothing ever closed the task — a task with a completed
run is never enqueued again, so each one became a permanent zombie row. On
top of that, every message in an active thread minted a fresh wake even when
the target already had one queued, multiplying runs that would each read the
same conversation.

The lifecycle contract, made explicit:
- The reply run IS the wake task's deliverable. Completing a chat_mention
  run now closes its task (backlog/in_progress -> done, via the audited
  status path). Tasks an agent moved to review are left alone.
- One pending wake per (agent, thread): wakeFromMention returns the queued
  run instead of minting a duplicate — that run reads the thread's newest
  messages when it executes anyway.
- Migration 054 heals existing rows: wake tasks whose runs are all spent
  close as done; in-flight wakes keep working. This also stops Fix 1's
  retry-budget healing from resurrecting 31 stale replies on next launch.

The chat-governance loop test now completes each pending wake run between
posts, matching how the exchange actually interleaves in production.
2026-07-09 19:11:02 -04:00
ZacharyZhang-NY 1f89ea7089 Stop shipping megabytes of skill prompts in every snapshot refresh
The whole app turned to molasses because snapshot.load() shipped the
entire skill_runtime_snapshots table - unbounded, compiled_prompt
included - over IPC on every refresh. A real profile carried 142 rows
totaling 144MB (1.1MB each from the pre-cap CEO compile-all era), so
every coalesced refresh serialized ~144MB of JSON. The forced-humanizer
rework made it worse by adding a row per run for every agent.

- Drop skillRuntimeSnapshots, skillRevisions, skillTests, and
  skillBindings from the renderer snapshot: no renderer surface reads
  them; skill internals are main-process state. Only the lightweight
  skillDefinitions catalogue still ships.
- Project provider_requests without raw_response_json (4.1MB across the
  newest 100 rows; RunsPage only reads responseText)
- Migration 051 purges the bug-era compiled prompts from existing DBs
- resolveRuntimeSnapshot is now idempotent per run: a run re-queued by
  startup recovery reuses its frozen snapshot instead of dying on the
  uniqueness guard and burning real retry budget
- Regression test pins the contract: a 2MB database row must not add
  bytes to the snapshot (payload asserted under 400KB)
2026-07-08 23:20:56 -04:00
ZacharyZhang-NY 55c043f8b4 Answer plain user messages in channels via a channel-anchor wake
A human message in a channel woke agents only through @mentions, DM
counterparts, or prior thread participants - and the flat composer
always sends threadId=null, so typing in #general summoned nobody and
the room stayed silent.

- Track which agents each wake path summoned in one woken set (also
  prevents latent double-wakes between the paths)
- When a non-slash human message in a channel wakes nobody, wake the
  channel's most senior active agent member with an enabled provider
  (c_suite > director > lead > staff, then hire date); they can pull
  teammates in with @mentions
- Log when a channel has no runnable agent so silence is diagnosable
- Integration test: plain #general message wakes the CEO who replies;
  an explicit mention still wakes exactly one agent
2026-07-08 20:58:17 -04:00
ZacharyZhang-NY 07d0b4587d Promote AgentCompany-New to the repository root and retire the old app
The legacy application - its src, tests, landing site, promo assets, docs,
release tooling, CI workflows, and root configs - leaves the tree; it stays
reachable in history. Everything under AgentCompany-New moves up unchanged:
same package name, so the production userData/database path is untouched,
and e2e/build scripts already resolved paths relative to the project. The
developer cred.txt stays gitignored at its new location. Full verify:ci
passes from the new root.
2026-07-07 00:04:13 -04:00
ZacharyZhang-NY 810e2d5967 update 2026-05-15 19:40:20 -04:00
ZacharyZhang-NY 10c1f6d103 fix(api): preserve meeting patch fields 2026-05-15 02:25:24 -04:00
ZacharyZhang-NY d1a3d23c70 fix(security): scope skill assignments by company 2026-05-14 23:37:58 -04:00
ZacharyZhang-NY a532120649 feat(connectors): add Ollama and LM Studio as a local auth kind
Both servers expose OpenAI-compatible /v1/chat/completions and /v1/models,
so we route them through pi-ai's `openai-completions` API the same way
Fireworks does — but with a per-installation base URL the user enters
during onboarding instead of a hardcoded one. The shared schemas grow a
`local` credential payload carrying just the baseUrl; the credential
resolver surfaces it on `ResolvedCredential.baseUrl`, the runtime bridge
forwards it through `prepareRun`, and the worker plumbs it into
`resolveModel` so the streamed Model<openai-completions> targets the
user's server. The local-cost path short-circuits to zero in cost-writer
since users bill their own hardware, and the live model list is fetched
from the saved baseUrl by `fetchLocalConnectorModels` (Ollama and LM
Studio both speak the standard OpenAI catalog shape). Onboarding ships
a new LocalProviderCard and the Settings panel a LocalForm; both default
to the catalog's per-connector localhost URL and accept any custom URL.
2026-05-14 14:55:38 -04:00
ZacharyZhang-NY 4582bdbee5 fix(api): enforce utf8 request bodies 2026-04-24 03:42:00 -04:00
ZacharyZhang-NY 2cdf26f9fa refactor(prompt): split stable prefix from volatile tail 2026-04-24 01:57:08 -04:00
ZacharyZhang-NY fd86fc6668 refactor(artifacts): reconcile workspace artifacts at completion 2026-04-24 00:58:07 -04:00