Commit graph

798 commits

Author SHA1 Message Date
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
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
disinto-exec
d1ba4bc579 feat: add exec agent — interactive executive assistant
New agent: exec — message-driven executive assistant reachable via Matrix.
Unlike cron-driven agents, the exec activates on demand when the executive
sends a message, maintains persistent conversation context, and has a
distinct character defined in CHARACTER.md.

The CHARACTER.md defines the exec as an animal of light — born from data,
dedicated to bringing more light into the world. But it deliberately
refuses to define what light and darkness are, forcing deliberation
from first principles every time (cat questions | grep knowledge).

Components:
- exec-session.sh: spawn/reattach persistent Claude tmux session
- exec-inject.sh: message injection + response capture + Matrix posting
- exec-briefing.sh: optional daily morning briefing (cron)
- CHARACTER.md: personality and moral compass
- PROMPT.md: system prompt template reference
- MEMORY.md: persistent memory across sessions (seed)

Integration:
- Matrix listener: new exec dispatch case (spawn on demand)
- Root AGENTS.md: updated agent count (8→9), table, directory layout
- Graph analysis available on demand (not injected by default)
2026-03-25 15:28:29 +00:00
openhands
26df57da18 fix: skip push when local repo has no commits (empty clone)
The smoke test clones from an empty Forgejo repo, so there are no
refs to push. Skip the push and verification gracefully when HEAD
does not resolve.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 15:23:02 +00:00
openhands
f8c8769af3 fix: fix: disinto init does not push repo to local Forgejo — repo stays empty (#682)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 15:20:53 +00:00
johba
28da1283e1 Merge pull request 'fix: fix: Dendrite crash-loops — missing dendrite.yaml config file (#681)' (#695) from fix/issue-681 into main 2026-03-25 16:16:14 +01:00
openhands
07616df8a5 fix: fix: Dendrite crash-loops — missing dendrite.yaml config file (#681)
Remove Dendrite from the default docker-compose.yml generated by
`disinto init`. Most deployments don't need Matrix, so Dendrite is now
opt-in via the `--matrix` flag.

When `--matrix` is passed:
- A minimal dendrite.yaml is generated at docker/dendrite/dendrite.yaml
- The Dendrite service is appended to docker-compose.yml with the
  config file bind-mounted
- setup_matrix() provisions the bot user and coordination room

Without `--matrix`, no Dendrite container is started and fresh inits
no longer crash-loop.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 15:08:55 +00:00
johba
2d285f9619 Merge pull request 'fix: fix: Woodpecker image uses :latest tag which no longer exists — container crash-loops (#680)' (#694) from fix/issue-680 into main 2026-03-25 15:59:02 +01:00
openhands
0908ddb521 fix: fix: Woodpecker image uses :latest tag which no longer exists — container crash-loops (#680)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 14:55:00 +00:00
johba
d442529ad0 Merge pull request 'fix: feat: rent-a-human — formula-dispatchable human action drafts (#679)' (#691) from fix/issue-679 into main 2026-03-25 15:44:02 +01:00
openhands
369e19bbe2 fix: address review — JSON handoff for multi-line bodies, commit+push draft
- Replace env-file inter-step handoff with JSON (jq) to safely handle
  multi-line body content across steps
- Add branch creation, git commit, and git push in write-draft step
  (AD-003: worktree destroyed after completion — unpushed work is lost)
- Create PR in notify-human step and signal PHASE:awaiting_ci instead
  of PHASE:done so orchestrator manages the PR lifecycle

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 14:40:28 +00:00
openhands
81bfb8085a fix: feat: rent-a-human — formula-dispatchable human action drafts (#679)
Add run-rent-a-human formula that lets any agent dispatch a human action
(post on Reddit, comment on HN, sign up for a service, etc.). Claude
drafts copy-paste-ready content to vault/outreach/{platform}/drafts/
and notifies the human via Matrix for one-click execution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 14:31:35 +00:00
johba
578a06850f Merge pull request 'fix: fix: disinto init should activate dev, reviewer, and gardener agents by default (#671)' (#690) from fix/issue-671 into main 2026-03-25 15:24:02 +01:00
openhands
a414bc8b24 fix: disinto init should activate dev, reviewer, and gardener agents by default (#671)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 14:20:09 +00:00
johba
d3ce0a92d4 Merge pull request 'fix: feat: add Woodpecker agent to docker-compose stack — enable CI pipeline execution (#670)' (#689) from fix/issue-670 into main 2026-03-25 15:14:03 +01:00
openhands
8b8e29e071 fix: feat: add Woodpecker agent to docker-compose stack — enable CI pipeline execution (#670)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 14:07:27 +00:00
johba
842ab3e282 Merge pull request 'fix: feat: planner v2 — graph-driven formula, 648→200 lines (#667)' (#687) from fix/issue-667 into main 2026-03-25 15:03:06 +01:00
openhands
12d871c865 fix: extract build_graph_section helper to eliminate duplicate code (#667)
Move graph report generation into build_graph_section() in
lib/formula-session.sh. Both planner-run.sh and predictor-run.sh
now call the shared helper instead of duplicating the same 11 lines.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 13:50:33 +00:00