AgentStack
SKILL verified Apache-2.0 Self-run

Approval

skill-cloudchef-atlasclaw-providers-approval · by CloudChef

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

No reviews yet
0 installs
13 views
0.0% view→install

Install

$ agentstack add skill-cloudchef-atlasclaw-providers-approval

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Approval? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

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

| Intent | Keywords | |--------|----------| | 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 intent | Required tool | |-------------|---------------| | approve/agree/pass + Request ID or row number | smartcmp_approve | | 批准/同意/通过/审批通过 + Request ID or row number | smartcmp_approve | | reject/deny/refuse + Request ID or row number | smartcmp_reject | | 拒绝/驳回 + Request ID or row number | smartcmp_reject | | analyze/evaluate/review + Request ID | smartcmp_analyze_approval_request | | 分析/评估/审查/只读分析 + Request ID | smartcmp_analyze_approval_request | | view/show/inspect/check detail + Request ID | smartcmp_get_request_detail | | 查看/看下/详情 + Request ID | smartcmp_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.

Scripts

| Script | Description | Location | |--------|-------------|----------| | list_pending.py | List pending approval items with priority | scripts/ | | analyze_request.py | Analyze one pending approval without executing a decision | scripts/ | | approve.py | Approve one or more requests | scripts/ | | reject.py | Reject one or more requests | scripts/ |

Environment Setup

Option 1: Direct Cookie

# PowerShell - CMP_URL auto-normalizes (adds /platform-api if missing)
$env:CMP_URL = ""
$env:CMP_COOKIE = ''
# Bash
export CMP_URL=""
export CMP_COOKIE=""

Option 2: Auto-Login (Recommended)

Automatically obtains and caches cookies (30-minute TTL). Auth URL is auto-inferred.

# PowerShell
$env:CMP_URL = ""
$env:CMP_USERNAME = ""
$env:CMP_PASSWORD = ""
# Bash
export CMP_URL=""
export CMP_USERNAME=""
export CMP_PASSWORD=""

Workflow

Step 1: List Pending Approvals

Command:

python scripts/list_pending.py [--days N]

Output Format:

  • Human-readable: Markdown table sorted by latest SmartCMP update first
  • Machine-readable: ##APPROVAL_META_START## ... ##APPROVAL_META_END## on stderr for internal tool use

META Fields: | Field | Description | |-------|-------------| | index | Display index (1, 2, 3...) — for user selection only | | requestId | SmartCMP user-facing Request ID / request number — use this for approve/reject tool input (e.g., RES20260505000010, TIC20260502000003, or CHG20260413000011) | | name | Request name | | catalogName | Service catalog type | | applicant | Requester name | | waitHours | Hours since creation | | priorityScore | Priority score (higher = more urgent) |


CRITICAL: Request ID Field Selection

> MUST USE requestId field for approve.py and reject.py > > The APPROVAL_META exposes one ID field to the agent: the user-facing requestId. > The scripts resolve requestId to the SmartCMP approval action identifier internally before calling the CMP approval API.

| Field | Format Example | Can Use as approve/reject tool input? | |-------|----------------|----------------------------| | requestId | RES20260505000010, TIC20260502000003, CHG20260413000011 | YES — USE THIS | | display index | 1, 2, 3 | NO — resolve row index to requestId first | | UUID-shaped internal ID | internal SmartCMP identifier | NO — 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 item with index=1 in APPROVAL_META
  |
  v
Extract the "requestId" field
  |
  v
Pass to approve.py or reject.py

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

Step 2: Approve Requests

Command:

# Single approval
python scripts/approve.py 

# With reason
python scripts/approve.py  --reason "Approved per policy"

# Batch approval
python scripts/approve.py   

Step 3: Reject Requests

Command:

# Single rejection
python scripts/reject.py 

# With reason (recommended)
python scripts/reject.py  --reason "Budget exceeded"

# Batch rejection
python scripts/reject.py   --reason "Not aligned with policy"

Output Parsing

Approval META Block

{
  "index": 1,
  "requestId": "RES20260505000010",                   //             **ONLY use `requestId` field for approve/reject tool input**. The scripts convert requestId to the SmartCMP approval action ID internally.

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

> **NEVER redirect output** — no `>`, `>>`, `2>&1`. Run scripts directly, read stdout.

> **Always show pending list first** before approve/reject operations.

> **Confirm with user** before batch operations affecting multiple items.

## Error Handling

| Error | Cause | Resolution |
|-------|-------|------------|
| `400` + `activity is null` | Used an internal or stale identifier after Request ID resolution | Re-list pending approvals, verify the item is still pending, and retry with `requestId` |
| `Invalid SmartCMP Request ID(s)` | Used a display row number, UUID-shaped internal ID, or placeholder instead of `APPROVAL_META.requestId` | Re-list pending approvals and resolve the selected row to the `requestId` field |
| `401` / Token expired | Session timeout | Refresh `CMP_COOKIE` or re-login |
| `404` / Not found | Invalid or stale Request ID | Verify ID from latest list_pending.py output |
| `[ERROR]` output | Various | Report to user immediately; do NOT self-debug |

## References

- [WORKFLOW.md](references/WORKFLOW.md) — Detailed approval workflow documentation

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [CloudChef](https://github.com/CloudChef)
- **Source:** [CloudChef/atlasclaw-providers](https://github.com/CloudChef/atlasclaw-providers)
- **License:** Apache-2.0
- **Homepage:** https://atlasclaw.ai/en/

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.