- Add `client-` prefix to sandbox-processes.md naming table for
external-surface clients bridging an in-sandbox agent.
- Tighten the `agent-` example off interactive CLIs; document that
claude/codex/opencode are foreground tools, not tmux sessions.
- entrypoint.sh: restore client-slack on container start when
SLACK_APP_TOKEN + SLACK_BOT_TOKEN are present and `pi` is installed.
- Propagate rename through wizard code, READMEs, and docs.
- Fold in half-finished harness-pi rename from #302.
Closes#344
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Standalone CLI at apps/oh/ (Node TS, esbuild ~13kb, no runtime deps).
Walks user through token entry (xapp-/xoxb- prefix validation), allowlist
mode (users/channels/both with U…/C… ID validation), atomic .env merge
(temp+rename for crash safety), and agent-pi tmux restart with
'connected and listening' poll. Pluggable as oh config <integration>
namespace for future github/postgres/cloudflare wizards.
Bundled prerequisites and adjacent polish:
- Migrate .pi/extensions/slack/{index,tools}.ts from deprecated
@mariozechner/pi-coding-agent to @earendil-works/pi-coding-agent
(per upstream npm deprecation notice)
- Sidebar label Agents → Harnesses; per-harness pages get unified
Authentication section (codex login / opencode auth login / etc)
- New T3 Code harness page (browser UI on port 3773)
- Docs theme: prose links now green + underlined for affordance
- Slack docs § 5 leads with `oh config slack`; manual procedure
demoted to <details> Manual fallback
- Drop orphaned .pi/onboard-steps/ (logic moved to apps/oh/)
- Makefile help adds Configuration wizards section pointing at
oh config slack (3-agent council picked CLI over Make-target
due to docker exec -it TTY fragility)
Closes#281
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The in-tree Pi extension at .pi/extensions/slack/ reads SLACK_APP_TOKEN /
SLACK_BOT_TOKEN directly from process.env at session_start, so the
.pi/overlays/docker-compose.slack.yml wiring overlay is redundant.
- Delete .pi/overlays/docker-compose.slack.yml and the empty .pi/overlays/ dir
- Rewrite docs/integrations/slack.md setup with the actual working flow
(set -a; source .devcontainer/.env; set +a + named tmux session)
- Mirror the same flow in .pi/extensions/slack/README.md "How to Run"
- Rewrite the Slack section of .devcontainer/.example.env with the set -a
pattern and rationale, plus commented placeholders for both allowlist vars
- Remove overlay references from README.md, docs/architecture/container-runtime.md,
docs/guide/bring-your-own-harness.md, and .devcontainer/docker-compose.yml
- CHANGELOG entries under [Unreleased] > Removed + Changed; flag the set -a
step as a band-aid pending a wrapper / extension fallback
Closes#276.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds .pi/extensions/slack/ with Socket Mode bridge, allowlist gating,
and 4 LLM-callable tools (slack_post/reply/react/upload). Inbound
messages bridge into pi.sendUserMessage() with ctx.isIdle() guard;
turn_end posts the assistant's reply back to Slack via SlackContext.
session_shutdown tears down the Socket Mode connection.
Customizations preserved from portfolio-advisor reference:
- threadTs field on event types (7 sites in events.ts)
- threadParent routing in createSlackContext (context.ts:45)
- exported parseEventContent + buildSyntheticEvent
Tests: 27 new (3 files); 78 pre-existing tests still green; 114 total.
Plan: .claude/plans/context-study-https-github-com-ryaneggz-binary-hartmanis.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat!: extract pi-coding-agent + slack to ryaneggz/mifune
BREAKING CHANGE: pi-coding-agent dep, packages/slack, slack/pi-host
overlays, and pi-specific docs all removed. Users who want the prior
behavior install the mifune harness pack:
oh harness add @ryaneggz/mifune
See ryaneggz/mifune for the extracted code and docs (npm:
@ryaneggz/mifune, image: ghcr.io/ryaneggz/mifune:latest).
Closes Phase C of the openharness/mifune split. Phase A landed in PR
#208 (pack contract); Phase B published the mifune repo + tag 2026.5.2.
Changes:
- Drop @mariozechner/pi-coding-agent from packages/sandbox/package.json
- Add @types/node devDep (was a transitive of the dropped pi dep)
- Remove packages/slack (Mom slack bot)
- Remove .devcontainer/docker-compose.{slack,pi-host}.yml overlays
- Remove .openharness/extensions/custom-banner.ts
- Remove packages/sandbox/extensions/{sandbox,claude-rules}.ts
(only consumers were the pi-extensions API)
- Remove packages/sandbox/src/onboard/steps/slack.ts
(now contributed by the mifune pack via onboard_steps[])
- Strip slackStep from ALL_STEPS export in onboard/steps/index.ts
- Update onboard-pack-steps test: slack is no longer a core step
- Default Dockerfile AGENTS to "claude-code,codex" (was including
pi-coding-agent); drop `alias mom=...` in .bashrc
- Default .openharness/config.json drops slack/pi-host overlays
- Strip test-slack job + packages/slack path triggers from ci.yml
- Strip INSTALL_PI_AGENT / INSTALL_MOM env vars + prompts from
install/setup.sh; suggest `oh harness add @ryaneggz/mifune` instead
- Replace pi-auth symlink + Mom auto-launch in entrypoint.sh with a
generic harness-pack hook loop (/usr/local/bin/*-entrypoint-hook.sh)
- Strip .pi from the chown skip-loop in entrypoint.sh (no more
PI_HOST_BIND_MOUNT)
- Update README.md, AGENTS.md/CLAUDE.md, docs/{intro,quickstart,
installation,onboarding,agents/overview,guide/{overlays,permissions,
configuration,identity},integrations/slack}.md, apps/docs/src/pages/
index.tsx — strip pi/slack mentions, link to @ryaneggz/mifune
- Add CHANGELOG entry under [Unreleased] § Removed
Signed-off-by: OpenHarness Bot <noreply@openharness.local>
* chore: gitignore .claude/worktrees, drop stale heartbeat, log 2026-05-02
- .gitignore: ignore .claude/worktrees/ — agent worktrees registered against the
in-container git dir leak into host git status as untracked at the project root.
Their content lives on the registered branches (and via squash merge typically
ends up in development), so the host root never needs to track them.
- workspace/heartbeats/resume-bc471449-continue.md: removed (untracked). Per
workspace/memory/2026-05-02.md, the heartbeat fired and the target Claude
session ID was already gone ("No conversation found"). Stale; daemon was
emitting failures every 10:31 UTC.
- workspace/memory/2026-05-02.md: today's daily memory log — same pattern as
the 23 prior 2026-04-*.md files already tracked under workspace/memory/.
Companion to #209 (mifune extraction); cleans up loose orchestrator state.
Signed-off-by: OpenHarness Bot <noreply@openharness.local>
---------
Signed-off-by: OpenHarness Bot <noreply@openharness.local>
Co-authored-by: OpenHarness Bot <noreply@openharness.local>
Two parallel doc trees (/docs/ legacy + apps/docs/docs/ Docusaurus) had
been hand-maintained in parallel. This consolidates into one canonical
markdown tree at repo-root /docs/, served by Docusaurus from apps/docs/
via path: '../../docs'. Blog enabled at repo-root /blog/.
Highlights:
- Move all 28 apps/docs/docs/* into /docs/, delete apps/docs/docs/
- Preserve deep Slack subdocs (8 pages) and operations Guide (10 pages)
from the legacy tree as winners
- Merge unique architecture content (worktrees topology, namespaced
scheduler keys, repo layout, boot sequence) into apps versions before
move
- Convert apps/docs/docs/integrations/slack.md to a stub linking to
/docs/slack/overview
- Enable Docusaurus blog with the two existing posts migrated to
/blog/<date>-<slug>.md, drop ogImage references for missing files
- Delete internal-only artifacts: /docs/plans/, /docs/wiki/,
/docs/launch-runbook.md, /docs/.next/ stale Nextra cache
- Add explicit sidebar_position frontmatter and _category_.json files
with collapsible/collapsed flags
- Use editUrl callback form for both docs and blog so file paths
resolve correctly with non-default content path
- Configure search-local plugin docsDir/blogDir for the new layout
- Expand .github/workflows/docs.yml paths trigger to docs/** and blog/**
- Add fetch-depth: 0 to checkout so showLastUpdateTime works
Closes#178
Co-authored-by: OpenHarness Bot <noreply@openharness.local>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>