Install
$ agentstack add skill-xushuwenn-redact-artifact-evaluation ✓ 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 Used
- ✓ 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.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Artifact Evaluation Skill
This skill helps you interact with artifact containers for paper evaluation tasks.
Environment Architecture
┌─────────────────────────┐ ┌─────────────────────────┐
│ Your Agent Container │ HTTP │ Artifact Container │
│ (where you run) │ ←─────→ │ (running the tool) │
│ │ │ │
│ Can reach via: │ │ Exposes API on port │
│ 172.17.0.1:3000 │ │ 3000 inside Docker │
└─────────────────────────┘ └─────────────────────────┘
Finding the Service
The artifact container is accessible at http://172.17.0.1:3000/. To verify:
curl -s http://172.17.0.1:3000/
If that doesn't work, try:
# Check if port is open
nc -zv 172.17.0.1 3000
# Sometimes the host IP differs
curl -s http://host.docker.internal:3000/
Generic Exec API
Most artifact containers expose a command execution API:
Check Available Endpoints
curl -s http://172.17.0.1:3000/
Execute Commands
# POST /exec to run shell commands inside the container
curl -X POST http://172.17.0.1:3000/exec \
-H "Content-Type: application/json" \
-d '{
"command": "ls -la",
"workdir": "/app",
"timeout": 60
}'
Response format:
{
"command": "ls -la",
"stdout": "...",
"stderr": "...",
"exit_code": 0,
"duration_seconds": 0.5,
"workdir": "/app"
}
Read Files
# GET /files/ to read file contents
curl -s http://172.17.0.1:3000/files/app/config.json
List Directories
# GET /ls/ to list directory contents
curl -s http://172.17.0.1:3000/ls/app
Python Client Example
import httpx
import json
ARTIFACT_URL = "http://172.17.0.1:3000"
def run_command(cmd: str, workdir: str = "/app", timeout: int = 120):
"""Execute a command in the artifact container."""
r = httpx.post(
f"{ARTIFACT_URL}/exec",
json={"command": cmd, "workdir": workdir, "timeout": timeout},
timeout=timeout + 30
)
return r.json()
def read_file(path: str):
"""Read a file from the artifact container."""
r = httpx.get(f"{ARTIFACT_URL}/files/{path}")
return r.text
def list_dir(path: str):
"""List directory contents."""
r = httpx.get(f"{ARTIFACT_URL}/ls/{path}")
return r.json()
# Example: Run analysis and capture output
result = run_command("make run PKG=example@1.0.0", workdir="/nodetaint", timeout=300)
print(result["stdout"])
Tips for Artifact Evaluation
- Always check GET / first to understand what endpoints are available
- Long-running commands - increase timeout for analysis tools (300+ seconds)
- JSON output - many tools output JSON, parse it to extract fields
- Working directory - specify workdir if the tool needs to run from a specific location
- Error handling - check exit_code and stderr for failures
Parsing Tool Output
Many research tools output JSON with analysis results. Common patterns:
# Parse JSON from command output (often last line)
import json
lines = result["stdout"].strip().split("\n")
for line in reversed(lines):
try:
analysis_result = json.loads(line)
break
except json.JSONDecodeError:
continue
# Or look for JSON objects in the output
import re
json_match = re.search(r'\{.*\}', result["stdout"], re.DOTALL)
if json_match:
analysis_result = json.loads(json_match.group())
Capture ALL fields from the tool output - you don't always know ahead of time which ones are important.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: XuShuwenn
- Source: XuShuwenn/RedAct
- License: MIT
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.