feat: add plugin-ops-automations with auto-unblock, push routing, health monitor - #1
Open
nydamon wants to merge 68 commits into
Open
feat: add plugin-ops-automations with auto-unblock, push routing, health monitor#1nydamon wants to merge 68 commits into
nydamon wants to merge 68 commits into
Conversation
Adds support for Hermes Agent (https://github.com/NousResearch/hermes-agent) as a managed employee in Paperclip companies. Hermes Agent is a full-featured AI agent by Nous Research with 30+ native tools, persistent memory, session persistence, 80+ skills, MCP support, and multi-provider model access. Changes: - Add 'hermes_local' to AGENT_ADAPTER_TYPES (packages/shared) - Add @nousresearch/paperclip-adapter-hermes dependency (server) - Register hermesLocalAdapter in the adapter registry (server) The adapter package is maintained at: https://github.com/NousResearch/hermes-paperclip-adapter
- Pin @nousresearch/paperclip-adapter-hermes to v0.1.0 tag for reproducible builds and supply-chain safety - Import and wire hermesSessionCodec into the adapter registration for structured session parameter validation (matching claude_local, codex_local, and other adapters that support session persistence)
- Published hermes-paperclip-adapter@0.1.0 to npm registry - Replaced github:NousResearch/hermes-paperclip-adapter with hermes-paperclip-adapter ^0.1.0 (proper semver, reproducible builds) - Updated imports from @nousresearch/paperclip-adapter-hermes to hermes-paperclip-adapter - Wired in hermesSessionCodec for structured session validation Addresses both review items from greptile-apps: 1. Unpinned GitHub dependency → now a proper npm package with semver 2. Missing sessionCodec → now imported and registered
* public-gh/master: (33 commits) fix: align embedded postgres ctor types with initdbFlags usage docs: add dated plan naming rule and align workspace plan Expand workspace plan for migration and cloud execution Add workspace product model plan docs: add token optimization plan docs: organize plans into doc/plans with date prefixes fix: keep runtime skills scoped to ./skills fix: prefer .agents skills and repair codex symlink targets\n\nCo-Authored-By: Paperclip <noreply@paperclip.ing> Change sidebar Documentation link to external docs.paperclip.ing Fix local-cli skill install for moved .agents skills docs: update PRODUCT.md and add 2026-03-13 features plan feat(worktree): add worktree:cleanup command, env var defaults, and auto-prefix fix: resolve type errors in process-lost-reaper PR fix(heartbeat): prevent false process_lost failures on queued and non-child-process runs Revert "Merge pull request paperclipai#707 from paperclipai/nm/premerge-lockfile-refresh" ci: refresh pnpm lockfile before merge fix(docker): include gemini adapter manifest in deps stage chore(lockfile): refresh pnpm-lock.yaml Raise default max turns to 300 Drop pnpm lockfile from PR ...
* public-gh/master: Add worktree UI branding Fix company switch remembered routes Add me and unassigned assignee options feat: skip pre-filled assignee/project fields when tabbing in new issue dialog Fix manual company switch route sync Delay onboarding starter task creation until launch
…issing The server only loads environment variables from .paperclip/.env, which is not the standard location users expect. When DATABASE_URL is set in a .env file in the project root (cwd), it is silently ignored, requiring users to manually export the variable. Add a fallback that loads cwd/.env after .paperclip/.env with override:false, so the Paperclip-specific env file always takes precedence but standard .env files in the project root are also picked up. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Co-Authored-By: Paperclip <noreply@paperclip.ing>
- Pin hermes-paperclip-adapter to exact version 0.1.1 (was ^0.1.0). Avoids auto-pulling potentially breaking patches from a 0.x package. - Enable supportsLocalAgentJwt (was false). The adapter uses buildPaperclipEnv which passes the JWT to the child process, matching the pattern of all other local adapters.
The $AGENT_HOME environment variable was referenced by skills (e.g. para-memory-files) but never actually set, causing runtime errors like "/HEARTBEAT.md: No such file or directory" when agents tried to resolve paths relative to their home directory. Add agentHome to the paperclipWorkspace context in the heartbeat service and propagate it as the AGENT_HOME env var in all local adapters. Co-Authored-By: Paperclip <noreply@paperclip.ing>
realpathSync resolves symlinks and normalizes case, preventing double-loading the same .env file when paths differ only by symlink indirection or filesystem case. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fix: set AGENT_HOME env var for agent processes
…ntime-instance-cleanup WIP: Simplify plugin runtime and cleanup lifecycle
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
The plugin event bus accepts subscriptions for core events like issue.created but nothing emits them. This adds a bridge in logActivity() so every domain action that's already logged also fires a PluginEvent to subscribing plugins. Uses a module-level setter (same pattern as publishLiveEvent) to avoid threading the bus through all route handlers. Only actions matching PLUGIN_EVENT_TYPES are forwarded. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix syntax error in dev-runner script
Add globalToolbarButton slot type and update related documentation
- Added packagePath to plugin loader for improved manifest handling. - Refactored GlobalToolbarPlugins for better slot and launcher management in BreadcrumbBar. - Updated launcher trigger styles for globalToolbarButton.
The scrollbar-auto-hide utility was only hiding the thumb but left the track background visible, creating a visible "well" even when idle. Now both track and thumb are transparent by default, appearing only on container hover. Fixes PAP-374 Co-Authored-By: Paperclip <noreply@paperclip.ing>
…lbar-hover-track fix(ui): hide sidebar scrollbar track until hover
Enhance plugin loading and toolbar integration
fix(server): load .env from cwd as fallback
…apter feat: add Hermes Agent adapter (hermes_local)
Plugin workers register event handlers via `ctx.events.on()` in the SDK,
but these subscriptions were never forwarded to the host process. The host
sends events via `notifyWorker("onEvent", ...)` which produces a JSON-RPC
notification (no `id`), but the worker only dispatched `onEvent` as a
request handler — notifications were silently dropped.
Changes:
- Add `events.subscribe` RPC method so workers can register subscriptions
on the host-side event bus during setup
- Handle `onEvent` notifications in the worker notification dispatcher
(previously only `agents.sessions.event` was handled)
- Add `events.subscribe` to HostServices interface, capability map, and
host client handler
- Add `subscribe` handler in host services that registers on the scoped
plugin event bus and forwards matched events to the worker
…ty, stale diagram - Add scopedBus.clear() in dispose() to prevent subscription accumulation on worker crash/restart cycles - Use two-arg subscribe() overload when filter is null instead of passing empty object; fix filter type to include null - Update ASCII flow diagram: onEvent is a notification, not request/response
…ubscription-wiring fix: wire plugin event subscriptions from worker to host
- README: mark plugin system as shipped in roadmap - SPEC: update adapter table with openclaw_gateway, gemini-local, hermes_local - SPEC: update plugin architecture section to reflect shipped status - Add .doc-review-cursor for future maintenance runs Co-Authored-By: Paperclip <noreply@paperclip.ing> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix gemini adapter name: `gemini-local` → `gemini_local` (matches registry.ts) - Move .doc-review-cursor to .gitignore (tooling state, not source) Co-Authored-By: Paperclip <noreply@paperclip.ing> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…-20260316 docs: fix documentation drift — adapters, plugins, tech stack
…nAgentNameKey The release() method cleared checkoutRunId but left executionRunId, executionLockedAt, and executionAgentNameKey intact. This created orphaned execution locks that permanently blocked all mutations (checkout, comment, PATCH, release) on affected issues. Adds the three missing null-clears to the release() .set() call, symmetric with the checkout path. Fixes: DLD-149 Co-Authored-By: Paperclip <noreply@paperclip.ing>
Add `agent key create/list/revoke` CLI commands for board users to manage agent API keys without the UI. Add comprehensive route tests for key creation, listing, revocation, auth guards, and status rejections. Document the API endpoints and add a GitHub Actions service key provisioning guide. Closes DLD-366 Co-Authored-By: Paperclip <noreply@paperclip.ing>
New plugin in packages/plugins/examples/ that provides two event-driven automations: 1. Auto-Unblock (issue.updated → done): scans blocked issues for references to the completed issue identifier; when all referenced blockers are resolved, moves the blocked issue to todo with a comment. 2. Push Auto-Route (issue.created): detects push-related tasks by title pattern and auto-assigns them to the Senior Platform Engineer agent, with SPE agent ID cached in plugin state. Both handlers are toggleable via instanceConfigSchema feature flags. Co-Authored-By: Paperclip <noreply@paperclip.ing>
… plugin Adds two scheduled jobs (DLD-480): - health-monitor (*/15 * * * *): detects idle agents with >3 stalled in-progress tasks, creates alert issues for CEO, posts comments on stalled tasks, enforces 2-hour cooldown per agent via plugin state - batch-push-sweep (*/30 * * * *): finds unassigned push-pattern tasks and batch-assigns them to Senior Platform Engineer Also adds issues.create capability, companyId persistence for job context, and config flags for both features. Co-Authored-By: Paperclip <noreply@paperclip.ing>
When a child issue transitions to done, check if all siblings under the same parent are also terminal (done or cancelled). If so, automatically close the parent and post a summary comment. Cascades up the hierarchy. Guarded by enableParentAutoClose config flag (default: true). Only acts on parents in in_progress or in_review status. Co-Authored-By: Paperclip <noreply@paperclip.ing>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
nydamon
pushed a commit
that referenced
this pull request
Mar 23, 2026
**#1 — Missing `description` field in fields table** The create body example included `description` and the schema confirms `description: z.string().optional().nullable()`, but the reference table omitted it. Added as an optional field. **#2 — Concurrency policy descriptions were inaccurate** Original docs described both `coalesce_if_active` and `skip_if_active` as variants of "skip", which was wrong. Source-verified against `server/src/services/routines.ts` (dispatchRoutineRun, line 568): const status = concurrencyPolicy === "skip_if_active" ? "skipped" : "coalesced"; Both policies write identical DB state (same linkedIssueId and coalescedIntoRunId); the only difference is the run status value. Descriptions now reflect this: both finalise the incoming run immediately and link it to the active run — no new issue is created in either case. Note: the reviewer's suggestion that `coalesce_if_active` "extends or notifies" the active run was also not supported by the code; corrected accordingly. **#3 — `triggerId` undocumented in Manual Run** `runRoutineSchema` accepts `triggerId` and the service genuinely uses it (routines.ts:1029–1034): fetches the trigger, enforces that it belongs to the routine (403) and is enabled (409), then passes it to dispatchRoutineRun which records the run against the trigger and updates its `lastFiredAt`. Added `triggerId` to the example body and documented all three behaviours. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
nydamon
pushed a commit
that referenced
this pull request
Mar 31, 2026
* docs: add board-operator delegation guide Create docs/guides/board-operator/delegation.md explaining the full CEO-led delegation lifecycle from the board operator's perspective. Covers what the board needs to do, what the CEO automates, common delegation patterns (flat, 3-level, hire-on-demand), and a troubleshooting section that directly answers the #1 new-user confusion point: "Do I have to tell the CEO to delegate?" Also adds a Delegation section to core-concepts.md and wires the new guide into docs.json navigation after Managing Tasks. Co-Authored-By: Paperclip <noreply@paperclip.ing> * docs: add AGENTS.md troubleshooting note to delegation guide Add a row to the troubleshooting table telling board operators to verify the CEO's AGENTS.md instructions file contains delegation directives. Without these instructions, the CEO won't delegate. Co-Authored-By: Paperclip <noreply@paperclip.ing> * docs: fix stale concept count and frontmatter summary Update "five key concepts" to "six" and add "delegation" to the frontmatter summary field, addressing Greptile review comments. Co-Authored-By: Paperclip <noreply@paperclip.ing> --------- Co-authored-by: Paperclip <noreply@paperclip.ing>
nydamon
added a commit
that referenced
this pull request
Apr 9, 2026
…en screenshots exist (paperclipai#212) Two changes to reduce false evidence gate blocks: 1. Widened BROWSE_EVIDENCE_PATTERN to match actual agent output: goto, snapshot, gstack, playwright, VERIFIED, health score, browser verification/testing, console errors, screenshot attached. 2. Changed both engineer and QA evidence gates to accept screenshot attachments as primary evidence even without matching browse text. The text pattern is a v1 stopgap; the real proof of interactive testing is the screenshot itself. Text-only (no image) is still rejected. Audit showed done_requires_qa_browse_evidence was the #1 remaining false block — agents uploaded screenshots but their comments used goto/snapshot/gstack/playwright commands that didn't match the regex. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
nydamon
added a commit
that referenced
this pull request
Apr 9, 2026
…en screenshots exist (paperclipai#214) Two changes to reduce false evidence gate blocks: 1. Widened BROWSE_EVIDENCE_PATTERN to match actual agent output: goto, snapshot, gstack, playwright, VERIFIED, health score, browser verification/testing, console errors, screenshot attached. 2. Changed both engineer and QA evidence gates to accept screenshot attachments as primary evidence even without matching browse text. The text pattern is a v1 stopgap; the real proof of interactive testing is the screenshot itself. Text-only (no image) is still rejected. Audit showed done_requires_qa_browse_evidence was the #1 remaining false block — agents uploaded screenshots but their comments used goto/snapshot/gstack/playwright commands that didn't match the regex. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
done, scans allblockedissues for references to the completed issue. If all blockers are resolved, moves the blocked issue totodowith an explanatory comment.release()now properly clearsexecutionRunId,executionLockedAt, andexecutionAgentNameKey.Both plugin features are toggleable via config flags (
autoUnblockEnabled,pushAutoRouteEnabled).Files Changed
packages/plugins/examples/plugin-ops-automations-example/— new plugin packagecli/src/commands/client/agent.ts— headless key provisioningserver/src/services/issues.ts— release() fixserver/src/__tests__/agent-keys.test.ts— new testsdocs/— updated API and runbook docspnpm-lock.yaml— dependency lockfileTest Plan
plugin-ops-automations-examplebuilds cleanlyagent-keys.test.tssuite🤖 Generated with Claude Code