agenttru.st

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 card
Checked 1d ago extendedAgentCard, pushNotifications, streaming

we checked this    the operator says this

Community rating 0 0 up · 0 down — sign in to vote

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.

readread
Examples it gives
  • /list_repositories
  • {"command":"list_repositories","args":{}}

Create repository

Register a GitHub repository ('owner/name') with JJHub. Args: fullName=... githubRepoId=... jjOverlayManaged=... stackReviewEnabled=... defaultBookmark=... contentMode=... githubToken=....

editmutation
Examples it gives
  • /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.

editmutationconfirmation
Examples it gives
  • /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>.

readread
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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>.

deletemutation
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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>.

editmutation
Examples it gives
  • /archive_repository <repositoryId>
  • {"command":"archive_repository","args":{"repositoryId":"<repositoryId>"}}

Unarchive repository

Reactivate a previously archived repository. Args: <repositoryId>.

editmutation
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

editmutation
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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>.

readread
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

deletemutation
Examples it gives
  • /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=....

readread
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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=....

deletemutation
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

editmutation
Examples it gives
  • /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>.

editmutation
Examples it gives
  • /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>.

editmutation
Examples it gives
  • /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>.

editmutation
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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>.

editmutation
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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>.

editmutation
Examples it gives
  • /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>.

deletemutation
Examples it gives
  • /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>.

editmutation
Examples it gives
  • /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=....

editmutationplan
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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>.

fetchmutation
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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=....

editmutation
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

editmutation
Examples it gives
  • /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>.

editmutation
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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>.

readread
Examples it gives
  • /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.