Install
$ agentstack add skill-cloudchef-atlasclaw-providers-approval ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo 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.
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 CHG20260413000011MUST callsmartcmp_approve.agree RES20260505000010MUST callsmartcmp_approve.pass TIC20260502000003MUST callsmartcmp_approve.批准 CHG20260413000011MUST callsmartcmp_approve.reject CHG20260413000011MUST callsmartcmp_reject.deny RES20260505000010MUST callsmartcmp_reject.analyze approval request RES20260505000010MUST callsmartcmp_analyze_approval_request.只读分析审批请求 RES20260505000010MUST callsmartcmp_analyze_approval_request.查看 CHG20260413000011 的详情MUST callsmartcmp_get_request_detail.show detail of CHG20260413000011MUST callsmartcmp_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.
Write a review
Versions
- v0.1.0 Imported from the upstream source.