agentsclimarketplace

Approval

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

atlasclaw-providers are the integration with enterprise systems through skills and webhook.

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

  • 14 stars14 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 author says it does

Copied from the file, not written here

Approval workflow skill. View pending approval tasks and approve or reject service requests.

SKILL.md

20.0 KB, 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

Keep looking

Skills are one crate of 328,083. 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.