No description
  • TypeScript 76.7%
  • JavaScript 16.3%
  • CSS 6.3%
  • Dockerfile 0.3%
  • HTML 0.2%
  • Other 0.1%
Find a file
Ryan Grippeling 52afa4a583
All checks were successful
On Source Change / checks (push) Successful in 1m11s
On Source Change / release (push) Successful in 27s
docs(ci): retire the Vloer publisher after moving to Glide
2026-09-12 19:54:04 +02:00
.agents/contracts feat: build De Vloer remote agent workbench 2026-09-09 15:47:45 +02:00
.forgejo docs(ci): retire the Vloer publisher after moving to Glide 2026-09-12 19:54:04 +02:00
backlog docs: propose that people sign in with the estate and link their own accounts 2026-09-10 12:59:04 +02:00
config feat(ploeg): bind human sessions and tracker imports to shared execution 2026-09-11 06:24:22 +02:00
docs docs(extension): defer the Marketplace and ship through Open VSX 2026-09-12 09:37:59 +02:00
examples/order-service feat: build De Vloer remote agent workbench 2026-09-09 15:47:45 +02:00
extensions/vscode chore(release): v0.3.0-rc.16 [skip ci] 2026-09-11 14:35:34 +00:00
integrations/ploeg fix: make remote failures actionable and ship dogfood foundations 2026-09-09 20:26:25 +02:00
LICENSES feat(brand): add the De Vloer identity and hold Apache-2.0 in CI 2026-09-11 16:01:03 +02:00
ops chore(release): v0.3.0-rc.16 [skip ci] 2026-09-11 14:35:34 +00:00
public feat(ui): repaint the workbench on the brand palette and self-host Archivo 2026-09-11 16:01:03 +02:00
scripts fix(ci): stop the licence gate depending on a network tool install 2026-09-11 16:23:58 +02:00
skills feat: build De Vloer remote agent workbench 2026-09-09 15:47:45 +02:00
src feat(ui): repaint the workbench on the brand palette and self-host Archivo 2026-09-11 16:01:03 +02:00
test fix(kubernetes): frame API request bodies and use writable state directory 2026-09-11 08:01:21 +02:00
.dockerignore feat: build De Vloer remote agent workbench 2026-09-09 15:47:45 +02:00
.gitattributes fix: make remote failures actionable and ship dogfood foundations 2026-09-09 20:26:25 +02:00
.gitignore chore: pin opencode 1.18.30 through mise and ignore local launch scripts 2026-09-09 22:08:50 +02:00
.mailmap feat(brand): add the De Vloer identity and hold Apache-2.0 in CI 2026-09-11 16:01:03 +02:00
.releaserc.cjs fix(release): create the release directly so Forgejo emits the published event 2026-09-10 10:11:48 +02:00
AGENTS.md feat: build De Vloer remote agent workbench 2026-09-09 15:47:45 +02:00
CHANGELOG.md chore(release): v0.3.0-rc.16 [skip ci] 2026-09-11 14:35:34 +00:00
CONTRIBUTING.md feat(brand): add the De Vloer identity and hold Apache-2.0 in CI 2026-09-11 16:01:03 +02:00
Dockerfile feat: release images, chart and extension on one hardened Forgejo train 2026-09-10 07:43:14 +02:00
LICENSE feat(brand): add the De Vloer identity and hold Apache-2.0 in CI 2026-09-11 16:01:03 +02:00
mise.toml feat(brand): add the De Vloer identity and hold Apache-2.0 in CI 2026-09-11 16:01:03 +02:00
mkdocs.yml feat: release images, chart and extension on one hardened Forgejo train 2026-09-10 07:43:14 +02:00
NOTICE feat(brand): add the De Vloer identity and hold Apache-2.0 in CI 2026-09-11 16:01:03 +02:00
package-lock.json chore(release): v0.3.0-rc.16 [skip ci] 2026-09-11 14:35:34 +00:00
package.json chore(release): v0.3.0-rc.16 [skip ci] 2026-09-11 14:35:34 +00:00
README.md feat(brand): add the De Vloer identity and hold Apache-2.0 in CI 2026-09-11 16:01:03 +02:00
renovate.json feat: release images, chart and extension on one hardened Forgejo train 2026-09-10 07:43:14 +02:00
REUSE.toml feat(brand): add the De Vloer identity and hold Apache-2.0 in CI 2026-09-11 16:01:03 +02:00
tsconfig.json feat: build De Vloer remote agent workbench 2026-09-09 15:47:45 +02:00

De Vloer

A self-hosted workbench for people steering remote agent crews. Bring a task from Vikunja, ClickUp, Forgejo, GitHub or GitLab, choose a reusable crew and budget, and supervise the work from a browser or VS Code. Your configured server runs the agents; your workstation remains the place you steer and review them.

De Vloer sits beside Ploeg. The tracker owns priorities, Ploeg owns unattended dispatch, and De Vloer owns interactive sessions and human intervention. The Ploeg workbench now exposes scoped work, evidence and spending snapshots. An opt-in shared execution path lets Ploeg admit interactive sessions while De Vloer provides their workspace and human controls. Run the unified baseline. A completed shared session can now pass through a canonical candidate, independent Docker checks and candidate-bound approval; Ploeg retains the authority and evidence. Live publication remains disabled.

Try it in ten minutes

Requirements: Node 24, Git and a modern browser. mise install selects the pinned tools if you use mise. No provider account, Kubernetes cluster or npm installation is needed for this demonstration.

npm run demo

Open http://127.0.0.1:4080Tasks. Preview [Demo fixture] Fix checkout rounding, choose Delivery crew, then Create session. Select Start crew, inspect the diff, failing baseline, repaired tests and independent review, then download the candidate from Repository handoff. You can also create an Order service session directly. Follow the 0.2.0 coworker walkthrough.

This is an explicitly labeled deterministic demo. It copies an isolated Git fixture, modifies real source and executes real Node tests. It makes zero AI calls and records zero model spend. It demonstrates the operating workflow, not model quality.

To test the shared execution with real Ploeg and PostgreSQL, use mise exec -- npm run demo:unified. Keep the matching Ploeg checkout beside this one and follow the local shared execution guide for prerequisites and cleanup. The launcher prints a browser URL and prepares a session you can start, pause and supervise.

With the server running, a second terminal can verify the full demonstration:

npm run smoke

What 0.2.0 provides

  • One task connection contract for Forgejo issues, GitHub issues, GitLab issues, ClickUp List tasks and Vikunja project tasks. An administrator registers each connection once; browser and editor use the same sources.
  • An explicit task preview and import into a queued session, with source identity and revision retained. Importing a task does not start a model request or change the tracker.
  • Durable sessions and event replay, operator instructions, pause/resume/cancel, and human permission responses.
  • Reusable crews with one optional writer followed by explicit reviewers, a branch per session, and reviewable evidence.
  • Retained candidate export for supported workspaces, with a manifest, binary-capable Git patch and self-contained snapshot bundle. Export availability and limits are visible; see the iteration guide.
  • OpenCode server integration and a JSON-lines command bridge for additional harnesses.
  • LiteLLM virtual-key lifecycle and visible accounting states; authorized budget additions are administrator actions.
  • Sandboxes that dial out, an Agent Host Protocol endpoint for VS Code and other clients, warm Kata pools through the Sandbox CRDs, and candidates signed with in-toto provenance and Agent Trace records.
  • Per-session workspace placement: a hardened container on the workbench host, a pod in a Kubernetes workspace namespace, or a plain working directory for trusted development; a browser can supervise a remote server without running agents on the laptop.

The application uses native Node TypeScript and browser modules, with zero third-party npm runtime dependencies. Development-only dependencies provide strict type checking. SQLite requires one application replica. Live integrations have separate prerequisites and qualification limits; read the validation matrix before treating them as production-tested.

Actual 0.2.0 task browser showing a demo task, its source brief and an explicit queued-session import

Run real agents

Follow live operation to configure a registered repository, LiteLLM gateway and OpenCode runtime on a remote server or Kubernetes. Live mode is the default and requires deliberate setup; it does not silently substitute the demo. A shared pre-existing OpenCode endpoint cannot accept this implementation's per-session managed key safely and is not the managed live path.

On a workstation, enable the Docker backend so agents run in a sandboxed container from the pinned agent image. For a shared team pilot, deploy the workbench in the cluster and use the Kubernetes backend. The local backend shares the servers OS user and is intended for trusted single-user development (ADR 0009).

The portable model interface is the configured LiteLLM gateway. Use API-backed model credentials for the managed budget path. This release does not turn a personal coding subscription into shared LiteLLM credit.

Connect your task system and forge

Task connections includes copyable configuration for all five providers. Start with config/task-sources.example.json, retain the connections you use, and supply their tokens to the server through the named environment variables.

Task management and code hosting are independent choices. For example, a Vikunja project can map to a repository hosted on Forgejo, or a ClickUp List can map to GitLab. Repository registration fixes the clone URL and branch; a task cannot choose its own execution endpoint. A source marked for Ploeg remains available for context, while standalone execution is restricted to repositories assigned to Vloer. Shared execution uses an explicit Ploeg registration. Vikunja and ClickUp binding adopts an existing unstarted Ploeg Work Item after source, scope and routing checks.

Connection registration in this iteration is administrator configuration. OAuth installation, a graphical connection-management wizard, bidirectional task updates and unattended intake are roadmap items.

Use it from VS Code

The desktop extension adds a native session tree, task import, remote crew controls, a themed work/evidence/activity panel, human decisions and evidence export. Share a selection or file only after previewing its exact destination and content. Agents and model calls stay on the configured server.

The release archive includes extensions/vscode/de-vloer-0.2.0.vsix. Install it with Extensions → … → Install from VSIX, connect to the demo or your remote HTTPS workbench, and import a task or create a session. To build from source:

npm ci --prefix extensions/vscode
npm run extension:package
code --install-extension extensions/vscode/de-vloer-0.2.0.vsix

The validation matrix records actual-server integration, browser webview and package checks. Installation and native behavior in an actual VS Code Extension Host still require desktop qualification. The package is not published to a marketplace.

Actual 0.2.0 extension webview rendering a retained task snapshot and downloadable candidate evidence

Improve Vloer with Vloer

The 0.2.0 iteration connects task selection to an interactive session and retained review evidence. The earlier implementation increment added keyboard evidence navigation, stable reading/draft behavior and actionable failures. The release also includes reviewable Ploeg prerequisite patches, whose historical qualification notes are superseded for this increment by the real cross-service baseline.

Run the stable service separately from the candidate checkout, register the Vloer repository, and connect the task source that holds its backlog. Preview one bounded task, import it, authorize a small LiteLLM budget and start the crew. Export and independently verify the candidate before a human publishes the proposal and reviews the merge. The iteration guide describes the current loop; the self-improvement design specifies its planned automation.

The complete product and market design specifies the full system: one Ploeg work authority, interchangeable task adapters, immutable candidates, trusted verification and publication, browser/editor intervention, client boundaries and operational recovery. It includes competitive research and a marketing/pilot plan. The release scope distinguishes implemented behavior from the larger roadmap.

The 78-ticket backlog maps every one of 30 audited gaps to acceptance criteria and dependencies. Import instructions cover the included ClickUp CSV and Forgejo payloads. No external tickets have been created. To inspect the first candidate and its remaining acceptance work:

npm run backlog -- validate
node scripts/backlog.mjs brief PV-001

Develop and review

npm ci
npm run typecheck
npm test
npm run check
npm run design:check
helm lint ops/helm/de-vloer
helm template de-vloer ops/helm/de-vloer

npm run check verifies erasable source syntax, relative source imports, JSON and basic committed-secret hygiene without executing application entrypoints. It is not a security audit. GitHub and Forgejo quality jobs make the checks fatal. The Forgejo runner must supply the ubuntu-latest label with a compatible Linux environment and access to the pinned tool downloads.

Releases, images, the chart and the extension ship from one Forgejo train; see releases. Read architecture, decisions, the HTTP contract and source research. The operator skill is portable procedure; its local contract contains repository facts. Copying it does not install client hooks.

The distributable ZIP contains a complete Git repository on development, including its commit history, design, importable backlog and packaged extension. No remote is configured. Create an empty repository on your forge, add it as origin, and push development to run the hosted checks.

Trunk: development. License: Apache-2.0.

Name and mark

Vloer is Dutch for floor, and de werkvloer is where the work actually happens. The brand identity draws that: a capital V standing on a floor that carries it, with the construction, the palette and its measured contrast, and the type choices written down. Every asset is generated by scripts/build-brand.mjs; run npm run brand:build after changing it and npm run brand:check to confirm the committed files still match.

The name De Vloer and the De Vloer mark are trademarks — §6 of the Apache licence grants no rights in them, deliberately. docs/brand/TRADEMARK.md says what you may do without asking (reproduce them, link, say your software works with De Vloer) and the two things that need permission (shipping a fork under the name, implying endorsement). Settled in ADR 0020.