Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
b985cff
docs(plans): plan offloading the harness to another device
claude Sep 4, 2026
faf4303
docs(plans): tie the offload plan to the library-splits parent
claude Sep 5, 2026
6ab6211
docs(plans): point O0 at the client/server split's own plan
claude Sep 5, 2026
8061b59
docs(plans): refresh the electron measurement after the rebase
claude Sep 6, 2026
b6cb073
docs(plans): reconcile with the container plan that landed
claude Sep 9, 2026
3735744
Move automation actions into project row menus
Sep 9, 2026
3a3d9d0
fix(ui): pad expanded reasoning callouts
Sep 9, 2026
02eafd0
fix(prompts): reduce clarification and validation churn across executors
Sep 9, 2026
a76f83b
Fix sandboxed recovery checkpoint index allocation
Sep 9, 2026
a1bf303
docs: design sandboxed artifact image downloads
jonathanKingston Sep 9, 2026
93d7e32
Enforce task network policy for browser previews
Sep 9, 2026
f9989cb
fix(renderer): stabilize live tool disclosures
Sep 9, 2026
54df105
fix(renderer): open new-file links from thread worktrees
jonathanKingston Sep 9, 2026
7007470
docs: refresh architecture map and subsystem contracts
jonathanKingston Sep 9, 2026
de8b26f
fix(usage): show Codex plan routes in value map (#2639)
jonathanKingston Sep 9, 2026
1add28a
Show images in proposed changes (#2637)
jonathanKingston Sep 9, 2026
f5f93cb
Merge pull request #2629 from copse-dev/codex/recoverable-edit-checkp…
jonathanKingston Sep 9, 2026
5a0bd71
Merge pull request #2626 from copse-dev/codex/thread-friction-review
jonathanKingston Sep 9, 2026
d6c753a
style: apply eslint --fix and oxfmt
github-actions[bot] Sep 9, 2026
ad9af1b
Merge pull request #2364 from copse-dev/claude/harness-cross-device-o…
jonathanKingston Sep 9, 2026
bda4b1a
Merge pull request #2632 from copse-dev/copse/in-terms-of-inference-b…
jonathanKingston Sep 9, 2026
1a55cd3
fix(protocol): version task-scoped browser payloads
Sep 9, 2026
06493f8
Merge main and preserve reasoning callout references
Sep 9, 2026
6710305
fix(protocol): version thread-scoped file link payloads
Sep 9, 2026
941427f
Merge main and isolate architecture deep-link evaluation
Sep 9, 2026
110afe3
Merge main and preserve project automation menu references
Sep 9, 2026
d133b49
fix(ui): preserve disclosure intent during adoption updates
Sep 9, 2026
f504642
fix(browser): block preview navigation network escapes
Sep 9, 2026
dedcd1e
Merge pull request #2625 from copse-dev/codex/reasoning-callout-padding
jonathanKingston Sep 9, 2026
e1f24f8
fix(docs): keep architecture host label within its node
Sep 9, 2026
981c653
Merge pull request #2636 from copse-dev/fix/thread-worktree-markdown-…
jonathanKingston Sep 9, 2026
ccfeea1
Merge pull request #2623 from copse-dev/codex/project-automation-menu
jonathanKingston Sep 9, 2026
a4f6d07
Merge main and advance browser ownership protocol to v7
Sep 9, 2026
cab62bc
test(ui): inspect failed tools inside stable turn rollups
Sep 9, 2026
f02e99f
fix(docs): refit architecture labels after fonts load
Sep 9, 2026
169c75c
Merge pull request #2635 from copse-dev/copse/take-a-look-at-latest-m…
jonathanKingston Sep 10, 2026
26fd997
fix(browser): validate task-owned plugin pane sessions
Sep 10, 2026
5e67b7b
test(ui): inspect nested failures after the active tool settles
Sep 10, 2026
e8e6b9f
Merge pull request #2634 from copse-dev/codex/thread-layout-stability
jonathanKingston Sep 10, 2026
74ea6d2
fix(browser): share content from window-owned task profiles
Sep 10, 2026
eba0abf
Merge pull request #2633 from copse-dev/codex/browser-preview-network…
jonathanKingston Sep 10, 2026
efda2f4
chore(deps): bump the electron group with 2 updates (#2641)
dependabot[bot] Sep 10, 2026
a8c56b3
fix(deps): repair grouped update and security notices (#2644)
jonathanKingston Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,9 @@ for writers before deciding. See

### State and permissions

Every Copse store lives under one root, `~/.copse/` (`COPSE_DIR` moves the profile). Persistent
settings live in `user-data/config.json`, but chat threads do **not**.
Every Copse store lives under one root, `~/.copse/` (`COPSE_DIR` moves the profile). General app
state lives in `user-data/config.json`; validated settings and encrypted secrets
live in `user-data/settings.json`. Chat threads live in neither store.
Threads live under `~/.copse/workspace/<projectId>/<threadId>/`; use `writeSeedConfig`
(`tests/e2e/helpers/seed-config.ts`) so test threads are routed into the native thread store. See
[`docs/thread-store-format.md`](docs/thread-store-format.md) and
Expand Down Expand Up @@ -126,7 +127,7 @@ oracle. Detailed local commands and screenshot ownership behavior are in

## Specialized surfaces

Conversation messages, subagent timelines, and file preview use the hand-rolled renderer in
`src/renderer/markdown/`. Before markdown or list-indent changes, read
Conversation messages, subagent timelines, and file preview use `@copse/streaming-markdown`,
with app integration in `src/renderer/markdown/`. Before markdown or list-indent changes, read
[`src/renderer/markdown/README.md`](src/renderer/markdown/README.md); then run
`pnpm run build && pnpm run test:e2e:markdown`.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ Install, first run, approvals, and the project sandbox:

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md). No paid model key is required to explore the development build: connect a local model, or launch with `COPSE_PANEL_MOCK_LLM=1 pnpm run dev` to opt into the built-in mock agent.
See [CONTRIBUTING.md](CONTRIBUTING.md) and the [architecture map](site/architecture.html). No paid model key is required to explore the development build: connect a local model, or launch with `COPSE_PANEL_MOCK_LLM=1 pnpm run dev` to opt into the built-in mock agent.

Before submitting a change, run:

Expand Down
5 changes: 5 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,10 @@ sandbox, troubleshooting. A hosted site at `copse.dev/docs/` is planned
([plans/docs-site.md](plans/docs-site.md)); do not file a how-to for end users
at this directory’s root.

Start with the [interactive architecture map](../site/architecture.html) for runtime
boundaries, package ownership, subsystem contracts, and the distinction between
shipped features, experiments, and plans. [Plan status](plans/README.md) retains
delivery history and deferred decisions.

Public-readiness decisions that still need an owner stamp live in
[public-readiness-decisions.md](public-readiness-decisions.md).
39 changes: 39 additions & 0 deletions docs/browser-network-policy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Browser network policy

The visible Browser pane (including MCP HTML/URL artefacts and chat links) and the
agent's browser tools enforce `webAllowedOrigins` at the Electron session request
boundary. This is the same allowlist used for web tools, including wildcard hosts
and ports. An explicitly empty network allowlist denies all network requests.
The old `browserAllowedOrigins` setting no longer grants separate network access.

Every HTTP(S) request, redirect target, embedded resource and WebSocket handshake
is checked. Private/link-local targets are denied. Requests without an owning
page, including background service-worker traffic, fail closed. Both the browser
and web approval settings must permit approval before a new origin can prompt.
A remembered navigation approval adds the origin to the network allowlist;
a one-time approval lasts for this app session and belongs only to its task.

Browser partitions and automation tab managers are scoped by project and task.
Interactive and agent browser profiles remain separate. Existing tabs keep their
original owner when the selected task changes; popup tabs inherit that owner.
Tab persistence, pop-outs and agent preview promotion preserve that scope too.

Local HTTP previews get an additive CSP in response headers. It allows resources
from the page's own origin, inline scripts/styles and embedded data/blob images,
but denies external origins, frames, workers, plugins and base URL changes.
Existing server CSPs still apply. A network approval does not relax this local
preview CSP: bundle assets locally and proxy required APIs through the dev server
under the user's normal network policy.

HTML artefacts prepend the same CSP before untrusted markup. Data URL documents
have no network access even if their HTML omits the CSP, including access to
allowlisted hosts and localhost. Direct browser navigation supports HTTP(S) only. Workspace file previews use
the existing static preview server, so relative files load from its loopback
origin under the same policy. This does not enable arbitrary file URL browsing;
file documents, if encountered, cannot make network requests.

Validation: `browser-network-policy.test.ts` covers the request matrix and additive
CSP; `browser-network-grants.test.ts` and the permission-gate tests cover task
isolation. `browser-network-policy.e2e.ts` exercises real Chromium enforcement,
asserts that blocked images/fetches never reach a second test origin, verifies
same-origin images and captures `browser-preview-network-policy.png`.
13 changes: 7 additions & 6 deletions docs/hooks.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@ author writes. Read this doc for **how the pieces fit** — where the harness fi
how a decision flows back, and the cross-cutting concerns (budget, spine, sandbox, UI)
that are dialect-agnostic.

> Everything below reflects what has **landed** (through the
> [validation & tooling phase](./plans/hooks-and-feature-packs.md#phase-g--validation--tooling)).
> [Feature packs](./plans/hooks-and-feature-packs.md#feature-packs) are the intended end
> state and are not implemented yet; the packs section of the plan doc describes them.
> Where behavior differs by phase, the phase tag links to the plan's issue breakdown.
> Current architecture reviewed at `main` `a2880354f` (2026-09-09).
> The hooks platform and [plugin lifecycle](plugins.md) are implemented; the
> historical feature-pack phases record how they landed. External isolated
> function-hook registration is a separate, partial SDK capability: explicit host
> invocation exists, but canonical fire sites do not dispatch those registrations
> automatically. See [the SDK contract](../packages/plugin-sdk/README.md).

## What a hook is

Expand Down Expand Up @@ -331,7 +332,7 @@ hooks cannot retroactively block work that already completed.
summary. It is **side-effect-free by construction** — it reuses only the pure seams
(adapter marshal/interpret + `spawnHookProcess`), so it never records a spine line, never
propagates `sessionStart` env, and **never applies the outcome**; it reproduces the live
spawn boundary faithfully (sandboxed-by-default, macOS-only enforcement). Host module:
spawn boundary faithfully (sandboxed by default on macOS/Linux when the OS sandbox is active). Host module:
`src/main/services/hooks/dry-run.ts`.

## Payload stability & schema drift tooling
Expand Down
Loading
Loading