Commit graph

1014 commits

Author SHA1 Message Date
openhands
b8c9334880 fix: Set CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC in factory sessions and disinto init (#725)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 13:21:22 +00:00
johba
3244e23950 Merge pull request 'fix: Planner files vault items for human-blocked constraints (#723)' (#751) from fix/issue-723 into main 2026-03-26 14:14:08 +01:00
openhands
36cd0c1817 fix: Planner files vault items for human-blocked constraints (#723)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 13:01:36 +00:00
johba
4c8cfbc0fa Merge pull request 'fix: feat: observable addressables — engagement measurement for deployed artifacts (#718)' (#749) from fix/issue-718 into main 2026-03-26 13:54:02 +01:00
openhands
946921431c fix: address review — error fallback, schema consistency, line-level recovery (#718)
- Add jq error fallback to TOP_PAGES pipeline (matches TOP_REFERRERS guard)
- Add referred_visitors and response_time to empty-period report schema
- Switch Caddy log parsing to jq -R with try/fromjson for line-level recovery

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 12:47:18 +00:00
openhands
192fc39198 fix: feat: observable addressables — engagement measurement for deployed artifacts (#718)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:57:19 +00:00
johba
4c438b7c59 Merge pull request 'fix: evaluate: MCP server wrapper for factory tools (#713)' (#746) from fix/issue-713 into main 2026-03-26 12:44:57 +01:00
openhands
68c47a6c04 fix: evaluate: MCP server wrapper for factory tools (#713)
Recommend against building an MCP server at this time. The SKILL.md skill
already exposes the same factory operations, and an MCP server would add a
new language dependency (TypeScript/Python) to an all-bash codebase for
marginal benefit. Document conditions under which to revisit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:37:42 +00:00
johba
afc06bee03 Merge pull request 'fix: Update skill package: init flow, docker default, system requirements, git mirror (#735)' (#739) from fix/issue-735 into main 2026-03-26 12:28:09 +01:00
openhands
e54423d52c fix: Update skill package: init flow, docker default, system requirements, git mirror (#735)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:18:55 +00:00
johba
053a1cf5dd Merge pull request 'fix: ship: publish disinto skill to ClawHub registry (#711)' (#734) from fix/issue-711 into main 2026-03-26 12:11:50 +01:00
openhands
b9c81ee8ed fix: ship: publish disinto skill to ClawHub registry (#711)
Published disinto@0.1.1 to ClawHub with env_vars and tools declared
in SKILL.md frontmatter. Added ClawHub badge to README.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 10:59:45 +00:00
johba
13bf487bef Merge pull request 'fix: Remove escalation — planner routes through vault instead (#721)' (#727) from fix/issue-721 into main 2026-03-26 11:49:02 +01:00
openhands
ecd68769ca fix: correct supervisor/AGENTS.md — stale escalation-reply text + phase name
- Remove stale Matrix escalation-reply routing text (supervisor-run.sh no
  longer calls consume_escalation_reply)
- Fix preflight description: PHASE:escalate (matches actual code), not
  PHASE:failed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 10:40:16 +00:00
openhands
5b6c7c962b fix: update AGENTS.md docs and handle stale PHASE:escalate in gardener
Address review feedback:
- gardener/AGENTS.md: remove escalation flow references, describe vault routing
- supervisor/AGENTS.md: remove escalation flow references, describe vault routing
- gardener-run.sh: treat PHASE:escalate as terminal (kills session) to prevent
  zombie sessions from stale/legacy escalation writes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 10:32:04 +00:00
johba
a91d81fb93 Merge pull request 'fix: Session lock must not block during idle phases (awaiting_review/awaiting_ci) (#724)' (#731) from fix/issue-724 into main
Reviewed-on: https://codeberg.org/johba/disinto/pulls/731
2026-03-26 11:14:13 +01:00
openhands
af39b833af fix: Session lock must not block during idle phases (awaiting_review/awaiting_ci) (#724)
Restructure session.lock from command-wrapper flock to fd-based flock so
the lock can be released when Claude is idle and re-acquired before
injecting the next prompt.

- agent-session.sh: add session_lock_acquire/release helpers, open fd in
  create_agent_session instead of wrapping claude with flock, auto-acquire
  in agent_inject_into_session before injecting
- phase-handler.sh: call session_lock_release at start of awaiting_ci and
  awaiting_review handlers (Claude is idle during CI polling / review wait)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 10:11:50 +00:00
johba
cc4c6d7efa Remove exec agent — replaced by OpenClaw skill + vault API (#722)
## What

Removes the exec agent (PR #697). Its functionality is replaced by:

1. **OpenClaw skill** — teaches any OpenClaw instance to be the factory's face
2. **Vault API** — structured interface for proposals, approvals, rejections

The exec agent was rebuilding OpenClaw in bash. Every piece has a native OpenClaw equivalent:
- CHARACTER.md → SOUL.md
- exec/MEMORY.md → MEMORY.md
- exec-session.sh → session management
- exec-briefing.sh → heartbeats/cron
- Matrix dispatch → channel plugins

## Why

Prudence isn't a separate agent. She's what OpenClaw becomes when it has the disinto skill. One LLM, one vault API, no LLM-to-LLM.

## Related

- #721 — remove escalation, route through vault
- #709 — skill registry research
- #466 — example project (vault should have handled this, not escalation)

Co-authored-by: openhands <openhands@all-hands.dev>
Reviewed-on: https://codeberg.org/johba/disinto/pulls/722
2026-03-26 10:36:27 +01:00
openhands
f2064ba67c fix: Remove escalation — planner routes through vault instead (#721)
Remove ESCALATED signal and escalation handling from planner, supervisor,
and gardener. When blocked on external resources or human decisions, these
agents now file vault procurement items (vault/pending/*.md) instead of
escalating directly to the human.

Changes:
- Planner formula: ESCALATED signal replaced with HUMAN_BLOCKED; files
  vault items and marks prerequisites as blocked-on-vault
- Supervisor formula/prompt: escalation sections replaced with vault item
  filing; preflight now reports pending vault items instead of escalation
  replies
- Gardener formula: ESCALATE action replaced with VAULT action; files
  vault/pending/*.md for human decisions
- Groom-backlog formula: same ESCALATE→VAULT replacement
- Gardener shell: PHASE:escalate replaced with PHASE:failed for merge
  blocks and CI exhaustion; escalation reply consumption removed
- Supervisor shell: escalation reply consumption removed from both
  supervisor-run.sh and legacy supervisor-poll.sh
- Prerequisite tree: #466 updated from "escalated" to "blocked-on-vault"

The vault is the factory's only interface to the human for resources and
approvals. Dev/action agents retain PHASE:escalate for operational session
issues (CI timeouts, merge blocks) which are a different mechanism.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 09:09:58 +00:00
johba
850a8d743f Merge pull request 'chore: planner run — prerequisite tree update' (#719) from chore/planner-20260326-0718 into main 2026-03-26 09:54:08 +01:00
johba
60bbaa4b60 Merge pull request 'fix: feat: create disinto skill package (SKILL.md + helper scripts) (#710)' (#720) from fix/issue-710 into main 2026-03-26 09:54:02 +01:00
openhands
63727e76a3 fix: eliminate duplicate code blocks across skill scripts (#710)
Deduplicate the three 5-line windows flagged by CI duplicate-detection:
- read-journal.sh: replace sed-based usage() with inline heredoc
- file-issue.sh: use printf with script name prefix for unknown options

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 07:29:26 +00:00
openhands
26fcb186a0 feat: create disinto skill package (SKILL.md + helper scripts) (#710)
Add skill/ directory implementing the Agent Skills open standard (SKILL.md
format) for the disinto factory. Includes:

- SKILL.md with YAML frontmatter, 9-agent architecture overview, env var
  documentation, 6 common workflows, and gotchas section (170 lines)
- scripts/factory-status.sh — query agent status, open issues, CI pipelines
- scripts/file-issue.sh — create forge issues with label resolution and
  secret scanning
- scripts/read-journal.sh — read planner/supervisor/exec journals by date
- templates/issue-template.md — standard issue body format

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 07:26:54 +00:00
openhands
b6c2b611e3 chore: planner run 2026-03-26 2026-03-26 07:18:30 +00:00
johba
805fa69770 Merge pull request 'chore: gardener housekeeping 2026-03-26' (#717) from chore/gardener-20260326-0606 into main 2026-03-26 07:44:02 +01:00
johba
3c97ddb255 vision: factory primitives — resources, addressables, observables (#708)
## What

Rewrites the factory lifecycle model in VISION.md around three primitives:

- **Resources** — what the factory can use
- **Addressables** — artifacts reachable by users (the outbound path)
- **Observables** — addressables with signal flowing back (the return path)

## The lifecycle

```
Resources → build → Addressable → promote → Observable → experiment → learn → build
```

## Key ideas

- **Three folds** (Build, Ship, Learn) as concurrent capabilities, not sequential phases
- **Vault-gated fold transitions** — dormant infrastructure activates on human approval
- **"It's not shipped until it's measured"** — observable-by-default principle
- **Assumptions register** over variation surfaces — track beliefs, challenge them with data
- **Signal detection** — follow the energy, not the hypothesis
- **Maximum contact with reality** — vary the audience, instrument everything, notice surprises

## Milestone updates

- Added Ship (Fold 2) and Learn (Fold 3) milestones
- Updated Adoption milestone to reflect containerization
- Added knowledge graph to Foundation
- Added observable-by-default to design principles

Co-designed in conversation, 2026-03-25.

Co-authored-by: openhands <openhands@all-hands.dev>
Reviewed-on: https://codeberg.org/johba/disinto/pulls/708
Reviewed-by: Disinto_bot <disinto_bot@noreply.codeberg.org>
2026-03-26 07:37:55 +01:00
openhands
ec5de7d2e0 chore: gardener housekeeping 2026-03-26 2026-03-26 06:06:51 +00:00
johba
043bf0f021 Merge pull request 'chore: gardener housekeeping 2026-03-26' (#716) from chore/gardener-20260326-0005 into main 2026-03-26 05:14:02 +01:00
Gardener
99933bef7b chore: gardener housekeeping 2026-03-26 2026-03-26 00:05:34 +00:00
johba
cebcb8c13a Merge pull request 'fix: fix: shared Claude OAuth credentials in containers — mount + flock to prevent token rotation race (#693)' (#705) from fix/issue-693 into main 2026-03-25 18:59:05 +01:00
openhands
ff8d773d7a fix: use flock -w 300 instead of -n to queue concurrent agent sessions
Non-blocking flock (-n) silently drops work items when concurrent agents
race for the lock. Switch to -w 300 so sessions queue up to 5 minutes,
and single-quote the lock path to handle spaces in $HOME.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 17:54:48 +00:00
openhands
cf6400e8f3 fix: shared Claude OAuth credentials in containers — mount + flock to prevent token rotation race (#693)
- Make ~/.claude volume mount read-write (was :ro) so containers can
  write back refreshed OAuth tokens
- Wrap Claude CLI in flock(1) inside tmux sessions using
  ~/.claude/session.lock — prevents concurrent token refresh races
  across agents sharing the same credentials
- Add ANTHROPIC_API_KEY detection in entrypoint.sh: when set, skips
  OAuth entirely (no rotation issues, metered billing)
- Log active auth method (API key vs OAuth vs missing) at container
  startup for easier 401 debugging
- Document 'claude auth login' requirement in disinto init output

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 17:48:21 +00:00
johba
cfdbaeeb5b Merge pull request 'fix: fix: action agent should check issue dependencies before spawning Claude (#688)' (#704) from fix/issue-688 into main 2026-03-25 18:39:02 +01:00
openhands
9b9f6717d0 fix: action agent should check issue dependencies before spawning Claude (#688)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 17:31:00 +00:00
johba
62bb7db559 Merge pull request 'fix: feat: kill prediction/backlog — planner must act or dismiss, with action budget (#686)' (#703) from fix/issue-686 into main 2026-03-25 18:24:05 +01:00
openhands
86c8ef4720 fix: feat: kill prediction/backlog — planner must act or dismiss, with action budget (#686)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 17:16:13 +00:00
johba
c5978eb124 Merge pull request 'fix: fix: landing page still says bring-your-own Codeberg + CI — now containerized (#684)' (#702) from fix/issue-684 into main 2026-03-25 18:09:02 +01:00
openhands
01d7c0c251 fix: address review — step 1 title misleading, remove redundant disinto up (#684)
- Rename step 1 from "Clone and start the stack" to "Clone disinto"
- Remove bin/disinto up from step 2 snippet (init already starts the stack)
- Clarify that disinto init handles the full bootstrap including stack start
- Note disinto up/down as available for subsequent restarts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 16:59:36 +00:00
openhands
dc22cb5f1e fix: landing page still says bring-your-own Codeberg + CI — now containerized (#684)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 16:52:05 +00:00
johba
e036e1d5e7 Merge pull request 'feat: add exec agent — interactive executive assistant (#699)' (#697) from feat/exec-agent into main 2026-03-25 17:44:02 +01:00
disinto-exec
18cea8cad5 merge: integrate origin/main to resolve CI (matrix_send_ctx)
Merge main into feat/exec-agent to pick up ba1ab6e which added
matrix_send_ctx to lib/env.sh and action/action-agent.sh. Without
this merge, CI smoke test fails on the PR merge commit.

Re-applied exec changes on top of main:
- .env.example, AGENTS.md, bin/disinto, lib/matrix_listener.sh
- .woodpecker/agent-smoke.sh: exec scripts added to checks
2026-03-25 16:37:49 +00:00
disinto-exec
f95d4f90f9 fix: rewrite journal loading to avoid duplicate detection (CI) 2026-03-25 16:22:15 +00:00
disinto-exec
c3acce7f8f refactor: cherry-pick improvements from dev-agent's PR #700
Two wins from the dev-agent's implementation:

1. exec-briefing.sh: rewritten to just call exec-inject.sh with a
   briefing prompt (57 lines, down from 154). No more duplicated
   compass/character/context loading.

2. exec-inject.sh: response capture now uses agent_wait_for_claude_ready
   + pane line diff instead of custom EXEC-RESPONSE-START/END markers.
   Claude just responds naturally — no special output format needed.

Also: matrix listener uses nohup for robustness and validates TOML
path before passing to exec-inject.sh.
2026-03-25 16:15:10 +00:00
disinto-exec
8375611244 fix: remove unused PHASE_FILE in exec-inject.sh (shellcheck) 2026-03-25 15:58:47 +00:00
disinto-exec
a7608ef062 refactor: compress compass to 12 lines
The compass said in 50 lines what it can say in 12.
Same compass, fewer tokens, more force.
2026-03-25 15:51:49 +00:00
disinto-exec
b125277db2 feat: auto-provision compass via disinto init from disinto.ai
disinto init now silently downloads the compass from
https://disinto.ai/compass.md to ~/.disinto/compass.md, sets
EXEC_COMPASS in .env, and activates the exec agent. No prompts,
no friction — the compass is public philosophy, not a secret.

Once on disk, the factory cannot modify it. Only the executive
can edit ~/.disinto/compass.md directly.

- site/compass.md: compass hosted on disinto.ai (Codeberg Pages)
- bin/disinto: init downloads compass, sets env var, activates exec
- exec-session.sh, exec-briefing.sh: fallback to ~/.disinto/compass.md
- .env.example: updated comment to reflect auto-provisioning
2026-03-25 15:45:15 +00:00
johba
ba1ab6e653 Merge pull request 'fix: fix: create_labels creates duplicate labels on re-run — no idempotency check (#683)' (#698) from fix/issue-683 into main 2026-03-25 16:44:10 +01:00
openhands
54ce91e09e fix: fix: create_labels creates duplicate labels on re-run — no idempotency check (#683)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 15:35:31 +00:00
disinto-exec
5c1c91bae2 refactor: extract compass from CHARACTER.md into runtime-loaded secret
The compass (identity, moral core) now lives outside the repo at a path
specified by EXEC_COMPASS in .env or .env.enc. The agent hard-fails if
the compass file is missing — it refuses to start without its soul.

This means the factory (dev agent, gardener, planner) can evolve the
exec's voice and relationships via PRs to CHARACTER.md, but cannot
touch the compass. Only the executive controls it directly.

- exec-session.sh: loads compass from $EXEC_COMPASS, merges with CHARACTER.md
- exec-briefing.sh: same compass loading, hard fail without it
- CHARACTER.md: compass sections replaced with runtime-load comments
- COMPASS.md.example: template for the compass file
- .env.example: added EXEC_COMPASS variable
- exec/AGENTS.md: documented compass separation and EXEC_COMPASS requirement
2026-03-25 15:34:55 +00:00
johba
ec658e3c52 Merge pull request 'fix: fix: disinto init does not push repo to local Forgejo — repo stays empty (#682)' (#696) from fix/issue-682 into main 2026-03-25 16:30:19 +01:00