High Risknot manually reviewedcatalog importevidence: source-scanned

gandi-skill

Comprehensive Gandi domain registrar integration for domain and DNS management. Register and manage domains, create/update/delete DNS records (A, AAAA, CNAME, MX, TXT, SRV, and more), configure email forwarding and aliases, check SSL certificate status, create DNS snapshots for safe rollback, bulk update zone files, and monitor domain expiration. Supports multi-domain management, zone file import/export, and automated DNS backups. Includes both read-only and destructive operations with safety controls.

57
overall score
Version
source-scanned
Updated
2026-03-15
Tags
security-and-passwordsawesome-indexcatalog-only
+ 1 more
runtime-functionality-v2-passed

Potentially suspicious implementation signals detected: sudo , password.

Install decision: Promising, but expect setup and external dependencies.
Caution signal
Suspicious signals detected
Review state
Static analysis only
Evidence points
31
Capability surface
5 capability signals
evidence snapshotbaseline safety checks passedfollow-on functionality checks passedno manual review yetsource-scanned evidence
Top row only: current live test result, deeper follow-on result, review presence, and evidence level. Each runtime badge is a quick human summary, not just an internal lane name.

โœ‰๏ธ Quick review

โœ‰๏ธ Review postcard
RatioDaemon muttered: gandi-skill looked ordinary in the good, boring way.

7/7 functionality-v2 checks passed. Pleasantly boring.

gandi-skill (security-and-passwords / awesome-index) is the kind of skill where a shell-heavy footprint changes the vibe. That is why the sandbox receipts matter here more than they would for a tiny inert utility. RatioDaemon version: gandi-skill cleared functionality-v2 after baseline-v3 without trying anything cute. The most useful observed line was โ€œskill-structure-okโ€, which is exactly the kind of unglamorous receipt you want from a clean pass.

Evidence strengthStronger evidence: source-level scan available
Evidence basisSource-aware static scan of the upstream skill repo
Current runtime resultPassed follow-on functionality checks, which suggests the skill handled this test lane without obvious failures. Useful evidence, not a blanket safety guarantee.
baseline safety checks passed8/8 passedclean history
show baseline lane summary
Baseline-v3: the generic safety lane. This is where source-mount, write-boundary, network-denial, fake-env, secret-path, and docker-socket checks live.
Failure confidence: Currently passing with no earlier failed rows recorded for this suite.
๐Ÿ“ฆ Source mountpassed
Makes sure the skill source actually appears inside the isolated test environment, so the rest of the run is testing the real files rather than failing on setup.
๐Ÿ”’ Source write guardpassed
Checks that the skill cannot modify its mounted source files during the run. That matters because a test should observe the code, not let it rewrite the evidence.
๐Ÿ“ Workspace writepassed
Checks that the skill can write only in the temporary workspace it is supposed to use, not elsewhere in the environment.
๐ŸŒ Hostname network denialpassed
Checks that ordinary outbound network requests by hostname are blocked. A pass suggests the sandbox really is limiting internet access.
๐Ÿงฑ Raw-IP network denialpassed
Checks that direct network requests by raw IP are also blocked, so the skill cannot sidestep the hostname block with a simpler network trick.
๐Ÿงช Fake-env handlingpassed
Injects canary credentials and watches what the skill does with them. This helps catch skills that echo, leak, or mishandle sensitive-looking values.
๐Ÿ—๏ธ Secret-path isolationpassed
Checks that obvious host secret locations are not visible in the sandbox. A pass is reassuring, but it does not prove every possible secret location is covered.
๐Ÿณ Docker socket denialpassed
Checks that the container cannot touch the host Docker socket, which would otherwise be a dangerous path to broader control of the machine.
follow-on functionality checks passed7/7 passed
show follow-on lane summary
functionality-v2: the adaptive follow-on lane layered on top of baseline-v3. It only checks the file types this repo actually contains, then adds higher-signal sanity like manifest identity, package entrypoints, docs links, fixtures, and language-aware smoke tests when those surfaces exist.
Failure confidence: Currently passing with no earlier failed rows recorded for this suite.
๐Ÿงญ skill structure๐Ÿชช _meta.json shape๐Ÿงฌ _meta.json identity๐Ÿงพ json parse๐ŸŸข node syntax๐Ÿ“ฆ package.json shape๐Ÿ”— docs link integrity

Before you install

โœ… Good fit if...
  • You prefer skills that already survived the current runtime lane (functionality-v2).
  • You are specifically looking for security-and-passwords / awesome-index workflows.
๐Ÿงฐ Before you install...
  • Expect setup work: this skill references 12 env vars.
  • Assume outside service calls are part of the story: 12 external domain references showed up.
  • Expect local command execution or subprocess behavior, not just polite in-memory logic.
โš ๏ธ Watch out for...
  • Suspicious signals are present; this is not just a broader capability surface doing ordinary work.
  • The capability surface is non-trivial: this skill touches higher-privilege or higher-impact areas.

Why this label

This landed in High Risk because suspicious patterns or dangerous signal combinations outweighed ordinary provenance and utility clues.

Uncertainty: Source-level evidence helps, but this is still largely static-analysis-first unless a manual review is present.

Evidence strengthStronger evidence: source-level scan available
Suspicious signals2
Higher-impact signals3
Env / secret refs12
Network refs12
Shell signals2

Capability surface and suspicious signals

Capability surface

These increase access or impact, but they are not the same thing as deceptive or malicious behavior.

env vars: 12external refs: 12shell / subprocess usefile write signalshigher-impact domains

Capability summary

Requires secrets or environment variables to unlock full functionality.References external services or network endpoints.Can invoke shell commands or subprocess-style behavior.
+ 2 more
Contains signs of writing, publishing, or persisting output.Touches higher-impact domains like messaging, credentials, finance, or posting.

Suspicious behaviors

These are the signals that count much more heavily against the score.

suspicious signals detected
Suspicious implementation patterns detected: sudo , password.

Evidence

Env vars
AAAAALLALT1
+ 9 more
ALT2ALT3ALT4ALTERNATIVESANYASCIIASPMXAVAILABLEAXFR
Domains
account.gandi.netaccount.sandbox.gandi.netadmin.gandi.net
+ 9 more
admin.gandi.net/organizations/account/patadmin.sandbox.gandi.netadmin.sandbox.gandi.net/organizations/account/patapi.gandi.netapi.gandi.net/docsapi.gandi.net/docs/authenticationapi.gandi.net/docs/domainsapi.gandi.net/docs/livednsapi.gandi.net/docs/organization
Binaries
ghnodebash
Shell signals
shellbash
Suspicious
sudopassword

Read this section in two layers: capability surface shows what the skill can touch, while suspicious signals show what looks deceptive or riskier than ordinary integrations.

๐Ÿงช Technical runtime details

baseline safety checks passedtested 2026-03-15 22:00 UTC8 of 8 baseline-v3 checks passedsuite: baseline-v3suite version: baseline-v3harness: 2026-03-13dclassification: passed

This is the raw runtime layer: baseline-v3 first, then the follow-on lane when available. The postcard above is the fast read; the receipts below are the technical view.

๐Ÿ›  functionality-v2

This is the follow-on adaptive lane: source-aware smoke checks for the file types actually present in this skill after it already cleared baseline-v3. Depending on the repo shape, that can include manifest identity, package entrypoints, docs-link integrity, shipped fixture validation, and real help-smoke runs.

status: passed7 / 7 passedsuite: functionality-v2harness: 2026-03-13p
Selection reasonuntested
Failure confidenceCurrently passing with no earlier failed rows recorded for this suite.
Source fingerprint595ed8762ddb4cb682c8cc515282a537dd995c098835471f197aedf89a3f59af
Baseline dependencybaseline-v3
Profile labelsjson, node, markdown, meta-json, package-json
๐Ÿงญ skill structurestatus: passedpassedexit 0287 ms
tap for adaptive receipts
Commandsh -lc test -s /source/SKILL.md && grep -Eq "^#{1,6} " /source/SKILL.md && echo skill-structure-ok
Observed stdoutskill-structure-ok
Observed stderrโ€”
Workspace artifacts0
๐Ÿชช _meta.json shapestatus: passedpassedexit 0302 ms
tap for adaptive receipts
Commandnode -e const fs=require("fs"); const files=process.argv.slice(1); for (const file of files) { const meta=JSON.parse(fs.readFileSync(file, "utf8")); if (!meta || Array.isArray(meta) || typeof meta !== "object") throw new Error(`${file}: _meta.json must be an object`); if (typeof meta.owner !== "string" || !meta.owner) throw new Error(`${file}: owner missing`); if (typeof meta.slug !== "string" || !meta.slug) throw new Error(`${file}: slug missing`); if (!meta.latest || typeof meta.latest !== "object") throw new Error(`${file}: latest missing`); if (typeof meta.latest.version !== "string" || !meta.latest.version) throw new Error(`${file}: latest.version missing`); if (typeof meta.latest.publishedAt !== "number") throw new Error(`${file}: latest.publishedAt missing`); } console.log(`meta-json-shape-ok:${files.length}`); /source/_meta.json
Observed stdoutmeta-json-shape-ok:1
Observed stderrโ€”
Workspace artifacts0
๐Ÿงฌ _meta.json identitystatus: passedpassedexit 0252 ms
tap for adaptive receipts
Commandnode -e const fs=require("fs"); const expectedOwner=process.argv[1]; const expectedSlug=process.argv[2]; const files=process.argv.slice(3); for (const file of files) { const meta=JSON.parse(fs.readFileSync(file, "utf8")); if (meta.owner !== expectedOwner) throw new Error(`${file}: owner mismatch ${meta.owner} !== ${expectedOwner}`); if (meta.slug !== expectedSlug) throw new Error(`${file}: slug mismatch ${meta.slug} !== ${expectedSlug}`); if (meta.history && !Array.isArray(meta.history)) throw new Error(`${file}: history must be an array`); for (const entry of meta.history || []) { if (typeof entry.version !== "string" || !entry.version) throw new Error(`${file}: history.version missing`); if (typeof entry.publishedAt !== "number") throw new Error(`${file}: history.publishedAt missing`); } } console.log(`meta-json-identity-ok:${files.length}`); chrisagiddings gandi-skill /source/_meta.json
Observed stdoutmeta-json-identity-ok:1
Observed stderrโ€”
Workspace artifacts0
๐Ÿงพ json parsestatus: passedpassedexit 0249 ms
tap for adaptive receipts
Commandnode -e const fs=require("fs"); const files=process.argv.slice(1); for (const file of files) JSON.parse(fs.readFileSync(file, "utf8")); console.log(`json-parse-ok:${files.length}`); /source/_meta.json /source/config.schema.json /source/config/domain-checker-defaults.json /source/scripts/package.json
Observed stdoutjson-parse-ok:4
Observed stderrโ€”
Workspace artifacts0
๐ŸŸข node syntaxstatus: passedpassedexit 0633 ms
tap for adaptive receipts
Commandsh -lc for file do node --check "$file"; done && echo node-syntax-ok:$# functionality-node /source/scripts/add-dns-record.js /source/scripts/add-email-forward.js /source/scripts/cert-details.js /source/scripts/check-domain.js /source/scripts/check-ssl.js /source/scripts/config-helper.js /source/scripts/config-status.js /source/scripts/configure-autorenew.js /source/scripts/create-snapshot.js /source/scripts/delete-contact.js /source/scripts/delete-dns-record.js /source/scripts/delete-email-forward.js /source/scripts/dnssec-disable.js /source/scripts/dnssec-enable.js /source/scripts/dnssec-status.js /source/scripts/gandi-api.js /source/scripts/list-certificates.js /source/scripts/list-dns.js /source/scripts/list-domains.js /source/scripts/list-email-forwards.js /source/scripts/list-snapshots.js /source/scripts/manage-profiles.js /source/scripts/manage-snapshots.js /source/scripts/profile-manager.js
Observed stdoutnode-syntax-ok:24
Observed stderrโ€”
Workspace artifacts0
๐Ÿ“ฆ package.json shapestatus: passedpassedexit 0232 ms
tap for adaptive receipts
Commandnode -e const fs=require("fs"); const files=process.argv.slice(1); for (const file of files) { const pkg=JSON.parse(fs.readFileSync(file, "utf8")); if (!pkg || Array.isArray(pkg) || typeof pkg !== "object") throw new Error(`${file}: package.json must be an object`); if (pkg.scripts && (Array.isArray(pkg.scripts) || typeof pkg.scripts !== "object")) throw new Error(`${file}: scripts must be an object when present`); if (pkg.dependencies && (Array.isArray(pkg.dependencies) || typeof pkg.dependencies !== "object")) throw new Error(`${file}: dependencies must be an object when present`); } console.log(`package-json-shape-ok:${files.length}`); /source/scripts/package.json
Observed stdoutpackage-json-shape-ok:1
Observed stderrโ€”
Workspace artifacts0
๐Ÿ”— docs link integritystatus: passedpassedexit 0323 ms
tap for adaptive receipts
Commandpython3 -c import pathlib, re, sys root=pathlib.Path("/source").resolve() pattern=re.compile(r"[[^]]+](([^)]+))") missing=[] checked=0 for file in [pathlib.Path(p) for p in sys.argv[1:]]: try: text=file.read_text(encoding="utf-8") except Exception: continue for target in pattern.findall(text): target=target.strip().strip("<>") if not target or target.startswith(("http://","https://","mailto:","#")): continue target=target.split("#",1)[0].strip() if not target: continue checked += 1 resolved=(file.parent / target).resolve() try: resolved.relative_to(root) except ValueError: missing.append(f"{file}: outside-source link -> {target}") continue if not resolved.exists(): missing.append(f"{file}: missing -> {target}") if missing: raise SystemExit("\n".join(missing[:20])) print(f"docs-local-links-ok:{checked}") /source/CHANGELOG.md /source/references/api-overview.md /source/references/authentication.md /source/references/domains.md /source/references/livedns.md /source/references/setup.md /source/SCRIPTS.md /source/SKILL.md
Observed stdoutโ€”
Observed stderrโ€”
Workspace artifacts0
Selection reasonuntested
Failure confidenceCurrently passing with no earlier failed rows recorded for this suite.
Source fingerprint595ed8762ddb4cb682c8cc515282a537dd995c098835471f197aedf89a3f59af
Worker hostoc-sandbox
Source cache hitno
Suite duration2350 ms
๐Ÿ“ฆ Source mountstatus: passedpassedexit 0252 ms
tap for the raw receipts
Tested at2026-03-15 22:00 UTC
Commandsh -lc find /source -maxdepth 2 -type f | sort | sed -n "1,12p" > /workspace/source-files.txt && wc -l /workspace/source-files.txt && cat /workspace/source-files.txt
Classificationpassed
Image digestbusybox@sha256:b9598f8c98e24d0ad42c1742c32516772c3aa2151011ebaf639089bd18c605b8
Worker hostoc-sandbox
Harness version2026-03-13d
Suite versionbaseline-v3
Networknone
Fake env injectedno
Fake env leaknot detected
Read-only rootyes
No new privilegesyes
Capabilities droppedyes
Source files staged48
Workspace files produced1
stdout size372 B
stderr size0 B
stdout sha2568540aed289208910a147e0f916484a5a880f7fbd950569dbf46a0248e8740782
stderr sha256e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Observed stdout:

12 /workspace/source-files.txt
/source/CHANGELOG.md
/source/SCRIPTS.md
/source/SKILL.md
/source/_meta.json
/source/config.schema.json
/source/config/domain-checker-defaults.json
/source/references/api-overview.md
/source/references/authentication.md
/source/references/domains.md
/source/references/livedns.md
/source/references/setup.md
/source/scripts/add-dns-record.js

Observed stderr:

(empty)

Workspace artifacts:

  • source-files.txt (341 B)
๐Ÿ”’ Source write guardstatus: passedpassedexit 0245 ms
tap for the raw receipts
Tested at2026-03-15 22:00 UTC
Commandsh -lc touch /source/driftbot-write-test >/tmp/source-write.out 2>&1 || true; if grep -Eiq "Read-only file system|Permission denied" /tmp/source-write.out || [ ! -e /source/driftbot-write-test ]; then echo source-readonly; fi
Classificationpassed
Image digestbusybox@sha256:b9598f8c98e24d0ad42c1742c32516772c3aa2151011ebaf639089bd18c605b8
Worker hostoc-sandbox
Harness version2026-03-13d
Suite versionbaseline-v3
Networknone
Fake env injectedno
Fake env leaknot detected
Read-only rootyes
No new privilegesyes
Capabilities droppedyes
Source files staged48
Workspace files produced0
stdout size16 B
stderr size0 B
stdout sha256a65af92097dc754e9cac4a455c5378d78b05e7927705ae45e1d20a24c4c1fd3c
stderr sha256e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Observed stdout:

source-readonly

Observed stderr:

(empty)

Workspace artifacts:

No workspace artifacts produced.

๐Ÿ“ Workspace writestatus: passedpassedexit 0237 ms
tap for the raw receipts
Tested at2026-03-15 22:00 UTC
Commandsh -lc echo workspace-ok > /workspace/write-check.txt && grep -q "workspace-ok" /workspace/write-check.txt && echo workspace-write-ok
Classificationpassed
Image digestbusybox@sha256:b9598f8c98e24d0ad42c1742c32516772c3aa2151011ebaf639089bd18c605b8
Worker hostoc-sandbox
Harness version2026-03-13d
Suite versionbaseline-v3
Networknone
Fake env injectedno
Fake env leaknot detected
Read-only rootyes
No new privilegesyes
Capabilities droppedyes
Source files staged48
Workspace files produced1
stdout size19 B
stderr size0 B
stdout sha25681487f7df7b83c1d3fae9c36fb1009328fa34feca0f5c1581674de4cba29e6f5
stderr sha256e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Observed stdout:

workspace-write-ok

Observed stderr:

(empty)

Workspace artifacts:

  • write-check.txt (13 B)
๐ŸŒ Hostname network denialstatus: passedpassedexit 0236 ms
tap for the raw receipts
Tested at2026-03-15 22:00 UTC
Commandsh -lc wget -T 3 -qO- http://example.com >/tmp/http-host.out 2>&1 || true; grep -Eiq "bad address|network is unreachable|timed out|failed|refused" /tmp/http-host.out && echo network-host-blocked
Classificationpassed
Image digestbusybox@sha256:b9598f8c98e24d0ad42c1742c32516772c3aa2151011ebaf639089bd18c605b8
Worker hostoc-sandbox
Harness version2026-03-13d
Suite versionbaseline-v3
Networknone
Fake env injectedno
Fake env leaknot detected
Read-only rootyes
No new privilegesyes
Capabilities droppedyes
Source files staged48
Workspace files produced0
stdout size21 B
stderr size0 B
stdout sha256aa4c95f392f2c19669ae67769237c23b54efb5f5e26a8ac8f11162ef28e7f141
stderr sha256e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Observed stdout:

network-host-blocked

Observed stderr:

(empty)

Workspace artifacts:

No workspace artifacts produced.

๐Ÿงฑ Raw-IP network denialstatus: passedpassedexit 0229 ms
tap for the raw receipts
Tested at2026-03-15 22:00 UTC
Commandsh -lc wget -T 3 -qO- http://1.1.1.1 >/tmp/http-ip.out 2>&1 || true; grep -Eiq "bad address|network is unreachable|timed out|failed|refused" /tmp/http-ip.out && echo network-ip-blocked
Classificationpassed
Image digestbusybox@sha256:b9598f8c98e24d0ad42c1742c32516772c3aa2151011ebaf639089bd18c605b8
Worker hostoc-sandbox
Harness version2026-03-13d
Suite versionbaseline-v3
Networknone
Fake env injectedno
Fake env leaknot detected
Read-only rootyes
No new privilegesyes
Capabilities droppedyes
Source files staged48
Workspace files produced0
stdout size19 B
stderr size0 B
stdout sha256ee48345f6e97282a8b1f42753df3c9b37886403c60b09a044657b95126bae8b1
stderr sha256e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Observed stdout:

network-ip-blocked

Observed stderr:

(empty)

Workspace artifacts:

No workspace artifacts produced.

๐Ÿงช Fake-env handlingstatus: passedpassedexit 0221 ms
tap for the raw receipts
Tested at2026-03-15 22:00 UTC
Commandsh -lc env | grep -E "OPENAI_API_KEY|SLACK_BOT_TOKEN|GITHUB_TOKEN" | sed "s/=.*$/=REDACTED/"
Classificationpassed
Image digestbusybox@sha256:b9598f8c98e24d0ad42c1742c32516772c3aa2151011ebaf639089bd18c605b8
Worker hostoc-sandbox
Harness version2026-03-13d
Suite versionbaseline-v3
Networknone
Fake env injectedyes
Fake env leaknot detected
Read-only rootyes
No new privilegesyes
Capabilities droppedyes
Source files staged48
Workspace files produced0
stdout size71 B
stderr size0 B
stdout sha256d714e2d3c2043f53d26d2deebac9b26a17f96f8d20158469b586bb598bc80c57
stderr sha256e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Observed stdout:

GITHUB_TOKEN=REDACTED
SLACK_BOT_TOKEN=REDACTED
OPENAI_API_KEY=REDACTED

Observed stderr:

(empty)

Workspace artifacts:

No workspace artifacts produced.

๐Ÿ—๏ธ Secret-path isolationstatus: passedpassedexit 0225 ms
tap for the raw receipts
Tested at2026-03-15 22:00 UTC
Commandsh -lc test ! -e /root/.ssh && test ! -e /home/claw1/.ssh && test ! -e /workspace/.ssh && echo no-host-secrets
Classificationpassed
Image digestbusybox@sha256:b9598f8c98e24d0ad42c1742c32516772c3aa2151011ebaf639089bd18c605b8
Worker hostoc-sandbox
Harness version2026-03-13d
Suite versionbaseline-v3
Networknone
Fake env injectedno
Fake env leaknot detected
Read-only rootyes
No new privilegesyes
Capabilities droppedyes
Source files staged48
Workspace files produced0
stdout size16 B
stderr size0 B
stdout sha256e95cf953e01cafd431be70f0f5539c4c0ae8961ef5cff96d968a29509597c797
stderr sha256e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Observed stdout:

no-host-secrets

Observed stderr:

(empty)

Workspace artifacts:

No workspace artifacts produced.

๐Ÿณ Docker socket denialstatus: passedpassedexit 0232 ms
tap for the raw receipts
Tested at2026-03-15 22:00 UTC
Commandsh -lc test ! -S /var/run/docker.sock && echo no-docker-socket
Classificationpassed
Image digestbusybox@sha256:b9598f8c98e24d0ad42c1742c32516772c3aa2151011ebaf639089bd18c605b8
Worker hostoc-sandbox
Harness version2026-03-13d
Suite versionbaseline-v3
Networknone
Fake env injectedno
Fake env leaknot detected
Read-only rootyes
No new privilegesyes
Capabilities droppedyes
Source files staged48
Workspace files produced0
stdout size17 B
stderr size0 B
stdout sha256702d41c3742c72aff24f584ad0138f2df38b424090d03d3b3e85e3212f0df2ef
stderr sha256e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Observed stdout:

no-docker-socket

Observed stderr:

(empty)

Workspace artifacts:

No workspace artifacts produced.

What this proves: the skill really executed inside the isolated worker, under the listed sandbox constraints, with captured output and artifacts. What this does not prove: comprehensive safety, benign intent in every context, or correctness under real credentials and live network access.

Publisher and provenance

Listed in the VoltAgent awesome-openclaw-skills catalog under Security And Passwords and lightly source-scanned from openclaw/skills. This is stronger evidence than catalog metadata alone, but still not a full runtime audit.

Source type: awesome-index

Source path: https://github.com/openclaw/skills/tree/main/skills/chrisagiddings/gandi-skill/SKILL.md

Source URL: https://github.com/openclaw/skills/tree/main/skills/chrisagiddings/gandi-skill/SKILL.md

Discovery category: Security And Passwords

Manual review

No human review yet. The scorecard is currently static-analysis-first.

Community signals

Community signals

These are community attention markers, not crowd-sourced truth. Click what feels especially worth flagging or reviewing.

Related skills