agentsclimarketplace

Approval

Skill CloudChef/atlasclaw-providers/providers/SmartCMP-Provider/skills/approval

Approval workflow skill. View pending approval tasks and approve or reject service requests.From its SKILL.md

Install
npx -y skills add CloudChef/atlasclaw-providers --skill approval

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 15 stars15 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.

SKILL.md

20.0 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it

approval

Approval workflow management skill.

Purpose

Manage approval workflows for service catalog requests:

  • Query pending approval items with priority analysis
  • Approve one or more requests with optional reason
  • Reject one or more requests with reason

Trigger Conditions

Use this skill when user intent is any of:

  • View pending approvals / list approvals / check what needs approval
  • Analyze one pending approval in read-only mode
  • Approve a request / approve all / batch approve
  • Reject a request / deny request / batch reject
IntentKeywords
View pending"show pending approvals", "list approvals", "what needs approval"
Analyze"analyze approval request", "review approval", "只读分析审批请求", "审批分析"
Approve"approve request", "agree request", "pass request", "approve #1", "agree 1", "同意 1", "批准 1", "通过 1", "approve all", "batch approve"
Reject"reject request", "deny request", "refuse request", "reject #1", "deny 1", "拒绝 1", "驳回 1", "batch reject"

Intent Priority

Action commands always win over detail lookup.

User intentRequired tool
approve/agree/pass + Request ID or row numbersmartcmp_approve
批准/同意/通过/审批通过 + Request ID or row numbersmartcmp_approve
reject/deny/refuse + Request ID or row numbersmartcmp_reject
拒绝/驳回 + Request ID or row numbersmartcmp_reject
analyze/evaluate/review + Request IDsmartcmp_analyze_approval_request
分析/评估/审查/只读分析 + Request IDsmartcmp_analyze_approval_request
view/show/inspect/check detail + Request IDsmartcmp_get_request_detail
查看/看下/详情 + Request IDsmartcmp_get_request_detail

Examples:

  • approve CHG20260413000011 MUST call smartcmp_approve.
  • agree RES20260505000010 MUST call smartcmp_approve.
  • pass TIC20260502000003 MUST call smartcmp_approve.
  • 批准 CHG20260413000011 MUST call smartcmp_approve.
  • reject CHG20260413000011 MUST call smartcmp_reject.
  • deny RES20260505000010 MUST call smartcmp_reject.
  • analyze approval request RES20260505000010 MUST call smartcmp_analyze_approval_request.
  • 只读分析审批请求 RES20260505000010 MUST call smartcmp_analyze_approval_request.
  • 查看 CHG20260413000011 的详情 MUST call smartcmp_get_request_detail.
  • show detail of CHG20260413000011 MUST call smartcmp_get_request_detail.

Handlers and helpers

All five Tool commands are co-located in scripts/adapter.py:

HandlerDescription
list_pendingList pending approval items with priority
get_request_detailRead one approval request
analyze_requestAnalyze one pending approval without executing a decision
approveApprove one or more requests
rejectReject one or more requests

scripts/_approval_object_actions.py remains separate because the embedded assistant Context resolver also calls it to build page actions. It is not a one-command forwarding script.

The Adapter receives the selected instance and Cookie/user/robot credential from AtlasClaw Context. SmartCMP Provider owns authentication resolution and all SmartCMP API calls.

Workflow

Step 1: List Pending Approvals

Call smartcmp_list_pending with optional days.

Output Format:

  • Human-readable: Markdown table sorted by latest SmartCMP update first
  • Machine-readable: _internal.items in the Tool result, retained by AtlasClaw workflow context

_internal.items fields:

FieldDescription
indexDisplay index (1, 2, 3...) — for user selection only
request_idSmartCMP user-facing Request ID / request number — use this for approve/reject tool input (e.g., RES20260505000010, TIC20260502000003, or CHG20260413000011)
nameRequest name
catalog_nameService catalog type
applicantRequester name
approval_stepCurrent approval step
current_approverCurrent approver display name

CRITICAL: Request ID Field Selection

MUST USE request_id field for smartcmp_approve and smartcmp_reject

The list result exposes one ID field to the agent: the user-facing _internal.items[].request_id. SmartCMP Provider resolves request_id to the internal approval action identifier before calling the CMP approval API.

FieldFormat ExampleCan Use as approve/reject tool input?
request_idRES20260505000010, TIC20260502000003, CHG20260413000011YES — USE THIS
display index1, 2, 3NO — resolve row index to request_id first
UUID-shaped internal IDinternal SmartCMP identifierNO — not exposed to the agent and not accepted by approve/reject

Mapping user selection to correct ID:

User says "1", "approve 1", "同意 1", or "批准 1"
  |
  v
Find the selected item in the latest `smartcmp_list_pending` `_internal.items`
  |
  v
Extract the `request_id` field
  |
  v
Pass to `smartcmp_approve` or `smartcmp_reject`

Never invent or pass placeholder values such as dummy-id-placeholder, placeholder, example, or <request_id>. If the latest list metadata is unavailable, list pending approvals again before calling approve/reject.

Step 2: Approve Requests

Call smartcmp_approve with one or more request_ids and an optional reason.

Step 3: Reject Requests

Call smartcmp_reject with one or more request_ids and an optional rejection reason.

Output Parsing

Approval _internal.items entry

{
  "index": 1,
  "request_id": "RES20260505000010",
  "name": "Test Request",
  "catalog_name": "Issue Ticket",
  "applicant": "TestUser",
  "approval_step": "Level 1 Approval",
  "current_approver": "Pending"
}

Quick Reference: Which ID to Use

[OK]    smartcmp_approve(request_id) <- RES20260505000010
[OK]    smartcmp_reject(request_id)  <- TIC20260502000003 or CHG20260413000011

[FAIL]  smartcmp_approve(<uuid>) <- internal SmartCMP UUID, not accepted
[FAIL]  smartcmp_approve(1)      <- display row number; resolve it to request_id first
[FAIL]  smartcmp_approve(dummy-id-placeholder) <- placeholder, never send to CMP

Critical Rules

ONLY use request_id field for approve/reject tool input. SmartCMP Agent SmartCMP Provider converts it to the approval action ID internally.

NEVER create temp files — no .py, .txt, .json. Your context IS your memory.

Always show pending list first before approve/reject operations.

Confirm with user before batch operations affecting multiple items.

Error Handling

ErrorCauseResolution
400 + activity is nullUsed an internal or stale identifier after Request ID resolutionRe-list pending approvals, verify the item is still pending, and retry with request_id
Invalid SmartCMP Request ID(s)Used a display row number, UUID-shaped internal ID, or placeholder instead of _internal.items[].request_idRe-list pending approvals and resolve the selected row to its request_id field
401 / Token expiredSelected SmartCMP session expiredRefresh the selected SmartCMP session or credential
404 / Not foundInvalid or stale Request IDVerify ID from the latest smartcmp_list_pending result
[ERROR] outputVariousReport to user immediately; do NOT self-debug

References

  • WORKFLOW.md — Detailed approval workflow documentation

What ships with it: 3 files

18.5 KB alongside SKILL.md, 2 of them executable

references/

scripts/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.