Tianyi Cui 06cebf1bf4 fix(scope): make the dispatch carrier method-transparent for native-private subjects 2 ay önce
..
agent 7c5133488a refactor(core): every registry register-method returns the exact effect disposer 2 ay önce
agent-core 72933ec558 refactor(system-prompt): rename TOOL_ORDER_REST from '...' to '<unlisted-tools>' 2 ay önce
agent-loop 06cebf1bf4 fix(scope): make the dispatch carrier method-transparent for native-private subjects 2 ay önce
scope 06cebf1bf4 fix(scope): make the dispatch carrier method-transparent for native-private subjects 2 ay önce
session cc24e79cd2 docs: agent-scope RFC, CONTEXT.md glossary, architecture scope section, README sync 2 ay önce
system-prompt 7c5133488a refactor(core): every registry register-method returns the exact effect disposer 2 ay önce
tools 7c5133488a refactor(core): every registry register-method returns the exact effect disposer 2 ay önce
README.md cc24e79cd2 docs: agent-scope RFC, CONTEXT.md glossary, architecture scope section, README sync 2 ay önce

README.md

core/ — product API spine

The packages every harness build is assembled from: the session log, the system-prompt assembly, the tool registry, the agent vocabulary, and the one concrete loop that drives them. These are product packages — the stable surface plugins and consumers build against.

Package Role ctx key
scope/ Scoped-context registration primitive (scope tags, scope-filtered dispatch) (library — no ctx key)
session/ Event-sourced session log + in-memory store ctx.sessions
system-prompt/ Prompt-section + tool-schema assembly registry ctx.systemPrompt
tools/ Tool registry + tools/pre-execute/tools/post-execute pipeline ctx.tools
agent/ Agent interface, registry, agent/* event vocabulary ctx.agents
agent-loop/ The concrete loop plugin: ReactLoopAgent + the loop driver ctx.agentLoop
agent-core/ Bundle plugin: the providerless/executor-less/UI-less spine as code (loads the spine)

scope/ is the one non-service package here: a dependency-free library (createScope/scopeOf/scopeTarget) the registries and the loop build per-agent scoping on — it sits below session/ and system-prompt/ in the module graph precisely so they can consume it without a cycle.

agent-loop is the one concrete implementation of the agent seam and lives here because it is the harness's default product loop; everything else in core/ is interface/vocabulary. Plugins depend on the agent vocabulary, never on agent-loop directly, so the loop stays swappable.

agent-core is the composition counterpart: one bundle plugin that loads the whole providerless spine (timer + llm + sessions + system-prompt + tools + agents + invariants + tool-bash + agent-loop) and forwards agent-loop's agents list as its own config. App packages (ui/stdio-agent, ui/acp-agent) consume it and add only a front door; a leaf adds the swappable backends plus any optional product tools it wants to expose. It lives in core/ because it composes exclusively core/ + interface packages and ships no provider, executor, or UI of its own.