jjhub bronze
jjhub.erisera.com
“Jujutsu-native overlay on GitHub: stable change IDs, CI-gated stack landing, durable conflicts, and platform-wide undo. The 141 skills mirror JJHub's shared agent command registry — the same deterministic verbs the ACP agent (jjhub acp serve) exposes, under the same snake_case names as the MCP endpoint (https://jjhub.erisera.com/mcp). Call one with a text part "/<command> <positional...> key=value ..." or a data part {"command": "<name>", "args": {...}}; results arrive as a JSON artifact plus a text summary, and commands that need confirmation pause in input-required.
https://jjhub.erisera.com/.well-known/agent-card.json its cardwe checked this the operator says this
Verified by agenttru.st
Everything here is a check agenttru.st performed itself. Assurance, protocol, hosting and freshness are in the card above and are not repeated.
- Certificate
-
Issued by Google Trust Services
domain-validated
Valid until 3 Dec 2026. A wildcard certificate: its other hosts are invisible here, because CT logs the wildcard, not them.Control of the hostname was checked; nothing about who operates it.
- DANE / TLSA
- Not verified (TLSA query returned RCodeNameError)
- Discovery
- Well-known document
- First seen
- 8 Sep 2026
View verification details
- Assurance
- bronze Bronze — agent card fetched over HTTPS with a valid certificate
- Protocols
- A2A verified by handshake or card fetch, not merely advertised
- Hosted in
-
? Unknown
·
Cloudflare, Inc.
(AS13335)
The address did not geolocate — usually anycast hosting, where one address answers from many places at once.
- Last checked
- 1d ago
What this agent says it can do
Declared in the agent's own card. agenttru.st has not tested whether it completes any of these tasks — the operator of jjhub.erisera.com controls every word below.
List repositories
List every repository JJHub manages, with GitHub connection and daemon status.
- /list_repositories
- {"command":"list_repositories","args":{}}
Create repository
Register a GitHub repository ('owner/name') with JJHub. Args: fullName=... githubRepoId=... jjOverlayManaged=... stackReviewEnabled=... defaultBookmark=... contentMode=... githubToken=....
- /create_repository fullName=... githubRepoId=... jjOverlayManaged=... stackReviewEnabled=... defaultBookmark=... contentMode=... githubToken=...
- {"command":"create_repository","args":{"fullName":"<fullName>"}}
Create github repository
Create a brand-new repository on GitHub (through the GitHub App installation for the given owner) and register it with JJHub in one step — unlike createRepository, which only ever attaches an existing repository. Requires the App's 'Administration: write' repository permission. Args: owner=... name=... visibility=... description=... defaultBranch=... autoInit=.... Needs confirmation when it applies (creates a brand-new repository on GitHub under the chosen owner — visibility is never assumed, and a PUBLIC repository can never be auto-approved even in an 'auto' session): the task pauses in input-required — reply "confirm" to proceed, anything else cancels.
- /create_github_repository owner=... name=... visibility=... description=... defaultBranch=... autoInit=...
- {"command":"create_github_repository","args":{"owner":"<owner>","name":"<name>","visibility":"<visibility>"}}
Get repository
Get one repository's details (GitHub connection, App coverage, daemon heartbeat). Args: <repositoryId>.
- /get_repository <repositoryId>
- {"command":"get_repository","args":{"repositoryId":"<repositoryId>"}}
Connect github
Connect a repository's own GitHub personal access token (fallback tier below App installation tokens). Args: <repositoryId> token=....
- /connect_github <repositoryId> token=...
- {"command":"connect_github","args":{"repositoryId":"<repositoryId>","token":"<token>"}}
Disconnect github
Disconnect a repository's own GitHub token, falling back to the server default gateway. Args: <repositoryId>.
- /disconnect_github <repositoryId>
- {"command":"disconnect_github","args":{"repositoryId":"<repositoryId>"}}
Update repository
Update repository settings after creation. Omitted fields stay unchanged. Args: <repositoryId> jjOverlayManaged=... stackReviewEnabled=... defaultBookmark=... contentMode=... landCheckAppearTimeoutMs=....
- /update_repository <repositoryId> jjOverlayManaged=... stackReviewEnabled=... defaultBookmark=... contentMode=... landCheckAppearTimeoutMs=...
- {"command":"update_repository","args":{"repositoryId":"<repositoryId>"}}
Archive repository
Archive a repository: mutations rejected, sync skips it, reads still work (undo: unarchive). Args: <repositoryId>.
- /archive_repository <repositoryId>
- {"command":"archive_repository","args":{"repositoryId":"<repositoryId>"}}
Unarchive repository
Reactivate a previously archived repository. Args: <repositoryId>.
- /unarchive_repository <repositoryId>
- {"command":"unarchive_repository","args":{"repositoryId":"<repositoryId>"}}
Get repository overview
Compact orientation snapshot for a repository (issue #364): its own summary, server capabilities, and a short count/sample of in-flight (non-landed, non-abandoned) changes — a landing page for the full tool catalog, not a replacement for it. Next steps: list_changes for the full list, get_change for detail. Args: <repositoryId>.
- /get_repository_overview <repositoryId>
- {"command":"get_repository_overview","args":{"repositoryId":"<repositoryId>"}}
List workspace agents
List explicit local workspace observations, including their read-only jj topology evidence. Privacy (issue #268): each agent's raw local filesystem path is redacted to null; use its displayLabel (basename + short hash, e.g. "payments (a1b2c3)") for anything user-visible. Args: <repositoryId>.
- /list_workspace_agents <repositoryId>
- {"command":"list_workspace_agents","args":{"repositoryId":"<repositoryId>"}}
Report workspace agent
Report an explicit, read-only local workspace observation. This never edits jj remotes or bookmarks. localPath is accepted for reporting but never echoed back or exposed elsewhere (issue #268): the response's localPath is always null; use its displayLabel instead. Args: <repositoryId> localRepositoryId=... workspaceName=... localPath=... workingCopyChangeId=... sparsePatterns=... jjVersion=... capabilities=... topology=... ok=... message=....
- /report_workspace_agent <repositoryId> localRepositoryId=... workspaceName=... localPath=... workingCopyChangeId=... sparsePatterns=... jjVersion=... capabilities=... topology=... ok=... message=...
- {"command":"report_workspace_agent","args":{"repositoryId":"<repositoryId>","localRepositoryId":"<localRepositoryId>","workspaceName":"<workspaceName>","sparsePatterns":"<sparsePatterns>","capabilities":"<capabilities>","ok":"<ok>"}}
List workspace leases
List every currently-live (not yet expired) lease across a repository's workspace agents (issue #268) — which workspace holds which purpose, and until when. Read-only: never grants, renews, or clears a lease. Args: <repositoryId>.
- /list_workspace_leases <repositoryId>
- {"command":"list_workspace_leases","args":{"repositoryId":"<repositoryId>"}}
Set primary workspace
Mark one workspace agent as the repository's primary workspace (issue #268 Track A): an explicit, opt-in convenience target for actions that don't name their own workspaceId — never an implicit fallback. At most one workspace is primary per repository at a time. Args: <repositoryId> <workspaceId>.
- /set_primary_workspace <repositoryId> <workspaceId>
- {"command":"set_primary_workspace","args":{"repositoryId":"<repositoryId>","workspaceId":"<workspaceId>"}}
Acquire workspace lease
Acquire or renew a short, renewable, compare-and-swap lease for a named workspace mutation (issue #268). A stale, unhealthy, or mismatched observation cannot be claimed. 'push' is repository-scoped: a live 'push' lease held by ANY workspace of the repository blocks every other workspace's acquisition of it, not just the same workspace's; every other purpose stays scoped to the acquiring workspace alone. Args: <repositoryId> <workspaceId> purpose=... holder=... observedAt=... ttlSeconds=... renewToken=....
- /acquire_workspace_lease <repositoryId> <workspaceId> purpose=... holder=... observedAt=... ttlSeconds=... renewToken=...
- {"command":"acquire_workspace_lease","args":{"repositoryId":"<repositoryId>","workspaceId":"<workspaceId>","purpose":"<purpose>","holder":"<holder>","observedAt":"<observedAt>"}}
Release workspace lease
Release a workspace lease early rather than waiting out its TTL (issue #268). Returns {released:false} — not an error — for a wrong or already-expired token. Args: <repositoryId> <workspaceId> purpose=... leaseToken=....
- /release_workspace_lease <repositoryId> <workspaceId> purpose=... leaseToken=...
- {"command":"release_workspace_lease","args":{"repositoryId":"<repositoryId>","workspaceId":"<workspaceId>","purpose":"<purpose>","leaseToken":"<leaseToken>"}}
Claim change mapping
Idempotently claim a (localRepositoryId, jjChangeId) -> changeId mapping (issue #268 Track A): first writer wins. When the returned changeId differs from the one proposed, the caller lost a race — it must use the returned changeId going forward and never overwrite the existing claim. Args: <repositoryId> localRepositoryId=... jjChangeId=... changeId=....
- /claim_change_mapping <repositoryId> localRepositoryId=... jjChangeId=... changeId=...
- {"command":"claim_change_mapping","args":{"repositoryId":"<repositoryId>","localRepositoryId":"<localRepositoryId>","jjChangeId":"<jjChangeId>","changeId":"<changeId>"}}
List change mappings
List every durable (jjChangeId -> changeId) claim recorded for one local jj repository instance (issue #268). Read-only — recovers a mapping across a daemon restart, or for a second workspace of the same local repository, without relying on process-local memory. Args: <repositoryId> <localRepositoryId>.
- /list_change_mappings <repositoryId> <localRepositoryId>
- {"command":"list_change_mappings","args":{"repositoryId":"<repositoryId>","localRepositoryId":"<localRepositoryId>"}}
Set workspace write route
Set this repository's suggested local-write target (issue #268 Track A item 4): at most one workspace at a time. This is a SUGGESTION for a caller to pass explicitly as workspaceId on commitFiles/restackChange — it is never read as an implicit fallback by those operations. Args: <repositoryId> workspaceId=....
- /set_workspace_write_route <repositoryId> workspaceId=...
- {"command":"set_workspace_write_route","args":{"repositoryId":"<repositoryId>","workspaceId":"<workspaceId>"}}
Get workspace write route
Get this repository's suggested local-write target, if one is set (issue #268 Track A item 4). Null if none. Args: <repositoryId>.
- /get_workspace_write_route <repositoryId>
- {"command":"get_workspace_write_route","args":{"repositoryId":"<repositoryId>"}}
Clear workspace write route
Clear this repository's suggested local-write target, if one is set (issue #268 Track A item 4). Args: <repositoryId>.
- /clear_workspace_write_route <repositoryId>
- {"command":"clear_workspace_write_route","args":{"repositoryId":"<repositoryId>"}}
List changes
List every jj-style change in a repository. Args: <repositoryId> status=....
- /list_changes <repositoryId> status=...
- {"command":"list_changes","args":{"repositoryId":"<repositoryId>"}}
Create change
Create a change (projects a branch + draft PR on GitHub when connected); parentChangeId stacks it on an existing change. Args: <repositoryId> title=... description=... parentChangeId=... parentChangeIds=... base=... stackId=... projectionRoute=....
- /create_change <repositoryId> title=... description=... parentChangeId=... parentChangeIds=... base=... stackId=... projectionRoute=...
- {"command":"create_change","args":{"repositoryId":"<repositoryId>","title":"<title>"}}
Get change
Get one change's full detail (status, commit history, restack flag, etc.). Args: <repositoryId> <changeId>.
- /get_change <repositoryId> <changeId>
- {"command":"get_change","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Get change context
Compact orientation snapshot for one change (issue #368): status, a stat-only diff summary (no patches), landability, check-run summary, this change's unresolved conflicts, review health, and derived nextActions (tool names an agent would call next) — in one call instead of separately calling get_change, get_change_diff, get_landability_report, list_check_runs, list_conflicts, and get_review_health. Args: <repositoryId> <changeId>.
- /get_change_context <repositoryId> <changeId>
- {"command":"get_change_context","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Get change handoff
Durable, append-only task-handoff log for a change (issue #373): findings, validation evidence, outstanding work, or the last commit SHA an agent actually verified, so a different agent (or the same one after a break) can resume without reconstructing a chat transcript. Returns a bounded, oldest-first page; works for a landed or abandoned change too — a post-land follow-up note is the point, not an edge case. Args: <repositoryId> <changeId>.
- /get_change_handoff <repositoryId> <changeId>
- {"command":"get_change_handoff","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Append change handoff
Append one durable handoff entry to a change's task-handoff log (issue #373) — never updates or deletes an existing entry. author is always the calling identity, never caller-supplied. Works against a landed or abandoned change too. Args: <repositoryId> <changeId> kind=... body=....
- /append_change_handoff <repositoryId> <changeId> kind=... body=...
- {"command":"append_change_handoff","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>","kind":"<kind>","body":"<body>"}}
Get change evolution
Show an auditable logical-change timeline from immutable JJHub operation snapshots, including before/after evidence and remote recovery limits. Args: <repositoryId> <changeId>.
- /get_change_evolution <repositoryId> <changeId>
- {"command":"get_change_evolution","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
List evolution edges
List durable evolution edges (issue #275) naming this change in any role (from/to/related) — rewrite/squash/split/duplicate/restore/reparent/abandon/land/divergence — recorded at mutation time, newest first. Divergence edges carry a resolvedByOpId once recoverDivergence resolves them. Args: <repositoryId> <changeId>.
- /list_evolution_edges <repositoryId> <changeId>
- {"command":"list_evolution_edges","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Get landability report
Explain the effective GitHub branch rules and live evidence that affect whether a projected change can land. Args: <repositoryId> <changeId>.
- /get_landability_report <repositoryId> <changeId>
- {"command":"get_landability_report","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Get change blockers
List the derived, server-side review-lifecycle blockers (restack, conflict, checks, review, queue, drift) currently active on a change. Args: <repositoryId> <changeId>.
- /get_change_blockers <repositoryId> <changeId>
- {"command":"get_change_blockers","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Get review health
Read live GitHub reviewer requests, approvals, unresolved threads, and advisory CODEOWNERS evidence for a projected change. Args: <repositoryId> <changeId>.
- /get_review_health <repositoryId> <changeId>
- {"command":"get_review_health","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Request reviewers
Explicitly request GitHub users or teams to review an in-review change. Never inferred from CODEOWNERS or a rewrite. Args: <repositoryId> <changeId> reviewers=... teamReviewers=....
- /request_reviewers <repositoryId> <changeId> reviewers=... teamReviewers=...
- {"command":"request_reviewers","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>","reviewers":"<reviewers>","teamReviewers":"<teamReviewers>"}}
Remove reviewers
Remove explicitly requested GitHub users or teams from an in-review change. Args: <repositoryId> <changeId> reviewers=... teamReviewers=....
- /remove_reviewers <repositoryId> <changeId> reviewers=... teamReviewers=...
- {"command":"remove_reviewers","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>","reviewers":"<reviewers>","teamReviewers":"<teamReviewers>"}}
List reviewer routing audit
List this change's reviewer-routing audit trail: every explicit GitHub reviewer request/remove that actually succeeded, who did it, and when. A failed GitHub API call never creates an entry. Args: <repositoryId> <changeId>.
- /list_reviewer_routing_audit <repositoryId> <changeId>
- {"command":"list_reviewer_routing_audit","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Recommend reviewers
Advisory-only reviewer suggestions from CODEOWNERS, prior review history, and recent file authorship. Never requests a reviewer — use requestReviewers for that. Args: <repositoryId> <changeId>.
- /recommend_reviewers <repositoryId> <changeId>
- {"command":"recommend_reviewers","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Request review
Move a draft change into review and mark its GitHub pull request ready for review. Args: <repositoryId> <changeId>.
- /request_review <repositoryId> <changeId>
- {"command":"request_review","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Return to draft
Return an in-review change and its GitHub pull request to draft. Args: <repositoryId> <changeId>.
- /return_to_draft <repositoryId> <changeId>
- {"command":"return_to_draft","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Enqueue change
Ask GitHub to add an in-review change to its merge queue. The change remains queued until GitHub actually merges it. Args: <repositoryId> <changeId>.
- /enqueue_change <repositoryId> <changeId>
- {"command":"enqueue_change","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Dequeue change
Remove a queued change from GitHub's merge queue and return it to review. Args: <repositoryId> <changeId>.
- /dequeue_change <repositoryId> <changeId>
- {"command":"dequeue_change","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Describe change
Edit a change's title and/or description (like 'jj describe'). Args: <repositoryId> <changeId> title=... description=....
- /describe_change <repositoryId> <changeId> title=... description=...
- {"command":"describe_change","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Amend change
Amend (rewrite) a change in place — descendants will need a restack. Args: <repositoryId> <changeId>.
- /amend_change <repositoryId> <changeId>
- {"command":"amend_change","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Split change
Split a change: a new change with the given title stacks on top of it. Args: <repositoryId> <changeId> title=... description=....
- /split_change <repositoryId> <changeId> title=... description=...
- {"command":"split_change","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>","title":"<title>"}}
Squash change
Squash a change into its parent. Args: <repositoryId> <changeId>.
- /squash_change <repositoryId> <changeId>
- {"command":"squash_change","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Abandon change
Abandon a change outright (closes its projected PR on GitHub). Args: <repositoryId> <changeId>.
- /abandon_change <repositoryId> <changeId>
- {"command":"abandon_change","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Restore change
Re-materialize an abandoned OR squashed-away change as a live draft with its original changeId, from the op log's pre-deletion snapshot. Former children stay reparented where abandon/squash left them (returned as formerChildren, not automatically reclaimed); a former parent that has since landed or vanished re-roots the restored change onto its base instead (reported as rerootedOnBase). Args: <repositoryId> <changeId>.
- /restore_change <repositoryId> <changeId>
- {"command":"restore_change","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Restack change
Rebase a needs-restack change onto its rewritten ancestor and clear its needsRestack flag. Args: <repositoryId> <changeId> workspaceId=... expectedWorkspaceWorkingCopyChangeId=....
- /restack_change <repositoryId> <changeId> workspaceId=... expectedWorkspaceWorkingCopyChangeId=...
- {"command":"restack_change","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Duplicate change
Create an independent copy of a change with the same title/description/content (like 'jj duplicate'). The source is never touched — it can be duplicated even if landed, queued, or abandoned. Args: <repositoryId> <changeId> destinationChangeId=....
- /duplicate_change <repositoryId> <changeId> destinationChangeId=...
- {"command":"duplicate_change","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Reparent change
Repoint a change's parent edges directly (graph-level reparent, not a content rebase). Reuses create_change's cycle detection. Marks the change and its descendants needsRestack rather than performing the rebase itself — call restack_change afterward to materialize it. Args: <repositoryId> <changeId> parentChangeIds=....
- /reparent_change <repositoryId> <changeId> parentChangeIds=...
- {"command":"reparent_change","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>","parentChangeIds":"<parentChangeIds>"}}
Set change external dependencies
Issue #277 (3.8), phase 1 (read-only): declare a change's external cross-repository dependency edges — an issue, pull request, release, or bookmark in ANOTHER repository. Replaces the entire set; never itself reads GitHub (see refresh_external_dependencies) and never gates landing. Args: <repositoryId> <changeId> dependencies=....
- /set_change_external_dependencies <repositoryId> <changeId> dependencies=...
- {"command":"set_change_external_dependencies","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>","dependencies":"<dependencies>"}}
Refresh external dependencies
Best-effort, bounded live read of every declared external dependency's current GitHub state (open/closed, released/draft/prerelease, exists/missing). A single failed lookup degrades that one entry rather than failing the whole refresh. Args: <repositoryId> <changeId>.
- /refresh_external_dependencies <repositoryId> <changeId>
- {"command":"refresh_external_dependencies","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Request atomic cross repo land
Always refused (400): no backend JJHub talks to guarantees an atomic land across repositories. Land each repository's changes separately with land_change/land_stack. Args: <repositoryId> changeIds=....
- /request_atomic_cross_repo_land <repositoryId> changeIds=...
- {"command":"request_atomic_cross_repo_land","args":{"repositoryId":"<repositoryId>","changeIds":"<changeIds>"}}
Recover divergence
Resolve the most recent unresolved divergence (issue #275) naming this change — two live changeIds found to represent the same jj change id. Refuses (409) if either side is already landed. Requires a grant on BOTH ids, not just the one in the path. Args: <repositoryId> <changeId> keep=....
- /recover_divergence <repositoryId> <changeId> keep=...
- {"command":"recover_divergence","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>","keep":"<keep>"}}
Commit files
Commit one or more files directly onto a change's projected GitHub branch — write, delete, or both in one commit. Args: <repositoryId> <changeId> message=... files=... deletePaths=... expectedHeadSha=... workspaceId=... expectedWorkspaceWorkingCopyChangeId=....
- /commit_files <repositoryId> <changeId> message=... files=... deletePaths=... expectedHeadSha=... workspaceId=... expectedWorkspaceWorkingCopyChangeId=...
- {"command":"commit_files","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Propose patch
Composite create+apply+read (issue #374): creates a change, commits the given files/deletes to it, and returns the resulting diff stats and PR link — the common create/edit/inspect workflow in one call. Two op-log entries are produced (create, then commit); see proposePatch's own doc comment. If the commit or the read-back fails AFTER the change was created, this fails with propose_patch_partial_failure naming the created change id in its error details — that change stays visible via list_changes/get_change and is abandon-able, never silently orphaned. Args: <repositoryId> title=... description=... base=... parentChangeId=... stackId=... files=... deletePaths=... message=... expectedBaseSha=....
- /propose_patch <repositoryId> title=... description=... base=... parentChangeId=... stackId=... files=... deletePaths=... message=... expectedBaseSha=...
- {"command":"propose_patch","args":{"repositoryId":"<repositoryId>","title":"<title>","files":"<files>"}}
Get change diff
Per-file unified diffs of a change's projected branch against its base; landed changes return the merged PR audit diff. Args: <repositoryId> <changeId>.
- /get_change_diff <repositoryId> <changeId>
- {"command":"get_change_diff","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
List check runs
Real GitHub check runs (CI status) for a change's projected branch. Args: <repositoryId> <changeId>.
- /list_check_runs <repositoryId> <changeId>
- {"command":"list_check_runs","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Get workflow evidence
Show bounded live GitHub Actions workflow-run and job evidence behind a change's projected head, with explicit merge-queue context. Args: <repositoryId> <changeId>.
- /get_workflow_evidence <repositoryId> <changeId>
- {"command":"get_workflow_evidence","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Rerun workflow run
Ask GitHub to re-run a workflow run behind a change's projected head. The run id must already appear in that change's bounded workflow evidence — an unrelated or unknown run id is rejected before any GitHub call. Args: <repositoryId> <changeId> <runId>.
- /rerun_workflow_run <repositoryId> <changeId> <runId>
- {"command":"rerun_workflow_run","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>","runId":"<runId>"}}
Cancel workflow run
Ask GitHub to cancel a workflow run behind a change's projected head. The run id must already appear in that change's bounded workflow evidence — an unrelated or unknown run id is rejected before any GitHub call. GitHub responds 202 and the cancellation itself completes asynchronously. Args: <repositoryId> <changeId> <runId>.
- /cancel_workflow_run <repositoryId> <changeId> <runId>
- {"command":"cancel_workflow_run","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>","runId":"<runId>"}}
Get deployment evidence
Show bounded live GitHub deployment environments and latest reported status behind a change's projected head, with explicit merge-queue context. Args: <repositoryId> <changeId>.
- /get_deployment_evidence <repositoryId> <changeId>
- {"command":"get_deployment_evidence","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Get security evidence
Show bounded open GitHub code-scanning alerts for a change's projected head, without treating unrelated repository-wide security alerts as change-scoped. Args: <repositoryId> <changeId>.
- /get_security_evidence <repositoryId> <changeId>
- {"command":"get_security_evidence","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Get change issue context
Show bounded live GitHub issue context referenced by a change's title and description, including closing and blocking intent. Args: <repositoryId> <changeId>.
- /get_change_issue_context <repositoryId> <changeId>
- {"command":"get_change_issue_context","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Get project v2 evidence
Show bounded, read-only GitHub Projects v2 membership and field values for a change's linked issues — which project(s) each is on and its status/iteration/other field values there. Never mutates a project item. Args: <repositoryId> <changeId>.
- /get_project_v2_evidence <repositoryId> <changeId>
- {"command":"get_project_v2_evidence","args":{"repositoryId":"<repositoryId>","changeId":"<changeId>"}}
Technical agent card
Copied from the agent's card. The operator controls these values; agenttru.st has not verified them.
- Provider
- JJHub — what this agent says about itself; other agents claiming the same provider are not thereby related
- Protocol
- a2a
- Version
- 0.3.0
- Auth schemes
- bearer oauth2AuthCode oauth2DeviceCode
- Card completeness
- complete all eight fields required by a2a.proto v1.0
View all card details
- Capabilities
- extendedAgentCard pushNotifications streaming
- Agent card
- https://jjhub.erisera.com/.well-known/agent-card.json
Operate this agent and would rather not be listed? Request removal.