Managing approvals
Skill pvnarp/harness-agentic-skills/skills/harness/managing-approvals
Manage Harness pipeline approval gates via MCP. List approval instances for an execution, filter by status (WAITING, APPROVED, REJECTED, FAILED, ABORTED, EXPIRED) or type (HarnessApproval, JiraApproval, CustomApproval, ServiceNowApproval), and approve or reject Harness approvals with optional comments and approver inputs. Use when asked to approve a deployment, reject a release, check who's blocking a pipeline, find pending approvals, or audit approval history. Trigger phrases: approve, reject, approval gate, waiting approval, pending approval, deployment approval, release gate, jira approval, service now approval.From its SKILL.md
npx -y skills add pvnarp/harness-agentic-skills --skill managing-approvalsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
6.9 KB, as published. Nobody here has run it
Manage Approvals
What this skill uses
Harness MCP tools: harness:harness_execute, harness:harness_get, harness:harness_list
Resource types: approval_instance, execution
Pipeline approvals are managed via the approval_instance resource type. Approvals are always scoped to a pipeline execution. The MCP supports listing approvals for an execution and approving / rejecting HarnessApproval-type instances directly. Jira / ServiceNow / Custom approvals are surfaced for visibility but are completed in their respective external systems.
Instructions
Step 1: Find the execution
If you don't have an execution_id, list executions:
Call MCP tool: harness:harness_list
Parameters:
resource_type: "execution"
org_id: "<org>"
project_id: "<project>"
filters:
status: "Paused" # paused executions are usually waiting on an approval
Or paste a Harness UI execution URL into any subsequent call's url parameter to auto-extract the execution_id.
Step 2: List approvals for an execution
execution_id is required on list.
Call MCP tool: harness:harness_list
Parameters:
resource_type: "approval_instance"
filters:
execution_id: "<execution_id>"
approval_status: "WAITING" # optional - WAITING|APPROVED|REJECTED|FAILED|ABORTED|EXPIRED
approval_type: "HarnessApproval" # optional - HarnessApproval|JiraApproval|CustomApproval|ServiceNowApproval
node_execution_id: "<node_id>" # optional - filter by step
Returns approval instances with their identifiers, current status, approver groups, expiration, comments history.
Step 3: Approve a Harness approval
approval_id is the resource id. comments and approver_inputs are optional.
Call MCP tool: harness:harness_execute
Parameters:
resource_type: "approval_instance"
action: "approve"
resource_id: "<approval_id>"
body:
comments: "Approved after security review. Deployment safe to proceed."
approver_inputs:
- name: change_ticket
value: CHG-12345
- name: reviewer
value: [email protected]
approver_inputs populate user-defined fields on the approval step. The schema for these is set when the approval step is authored (see /creating-pipelines).
Step 4: Reject a Harness approval
Call MCP tool: harness:harness_execute
Parameters:
resource_type: "approval_instance"
action: "reject"
resource_id: "<approval_id>"
body:
comments: "Rejecting - missing test coverage on the auth flow. Re-run after fix."
Pipeline execution moves to a Failed / Rejected terminal state once the approval is rejected.
Step 5: External approvals (Jira / ServiceNow)
Approval types JiraApproval, ServiceNowApproval, and CustomApproval cannot be approved via MCP. The list response shows their state for visibility, but completion happens in:
- Jira: transition the linked ticket through the configured statuses.
- ServiceNow: complete the change request per its workflow.
- Custom: invoke the configured custom approval endpoint with the right payload.
The pipeline polls the external system and resumes when the configured status is reached.
Common patterns
"Who's holding up the prod deploy?"
harness:harness_list execution filters.status=Paused org_id=<org> project_id=<project>
For each paused execution:
harness:harness_list approval_instance filters.execution_id=<id> filters.approval_status=WAITING
The response shows approver groups (users + group identifiers), so you can ping them directly.
"Approve this deploy with a change ticket reference"
harness:harness_execute approval_instance action=approve resource_id=<approval_id>
body:
comments: "Linked to CHG-12345"
approver_inputs:
- name: change_ticket
value: CHG-12345
"Show all my pending approvals"
There's no direct "approvals waiting on me" query - you'd need to list executions in Paused state and check each. For a frequent workflow, consider building a saved filter on the Harness UI.
Examples
- "Approve the staging deploy for checkout-service" - find execution, list approvals filtered to WAITING, approve by id
- "What's blocking the prod release?" -
harness:harness_list execution filters.status=Pausedthen list approvals - "Reject this deploy - tests are flaky" -
harness:harness_execute approval_instance action=rejectwithcomments - "Approve with a Jira ticket reference" - approve with
approver_inputs: [{name: change_ticket, value: ...}] - "Audit approvals from last week" - list approvals filtered by
approval_status: APPROVEDand inspect timestamps
Related skills
Prerequisites (skills typically run before this one):
Composes with (skills commonly invoked together):
Follow-ups (skills commonly chained after this one):
Performance Notes
execution_idis required on list - approvals don't have a global query path. Always start from an execution.- Status filter narrows the response - prefer
WAITINGwhen triaging blockers,APPROVED/REJECTEDfor audit. - External approval state is reflected in the list response but not modifiable here.
Troubleshooting
- "execution_id required" - approvals are always scoped to an execution. Use
harness:harness_list execution filters.status=Pausedto find candidates. - "approval_id not found" - the approval may already be
APPROVED/REJECTED/EXPIRED. List with no status filter to see history. - External approval not progressing - this skill can't influence Jira / ServiceNow / Custom approvals. Check the external system's workflow status.
- Approve action returns 403 - the calling user / service account must be a member of the configured approver group on that approval step.
approver_inputsrejected - the input schema is defined on the approval step itself. Runharness:harness_get approval_instancefirst and look at the configured input definitions.