Low Risk — Risk Score 15/100
Last scan:1 day ago Rescan
15 /100
oneshot-ship
Ship code with oneshot CLI - plan/execute/review/PR automation pipeline
A legitimate code-shipping automation tool documented in SKILL.md with no malicious behavior detected; credential storage in plaintext is a standard security concern but not malicious.
Skill Nameoneshot-ship
Duration25.8s
Enginepi
Safe to install
Review the credential storage approach in config.json if implementing; consider using keyring instead of plaintext file storage for API keys.

Findings 1 items

Severity Finding Location
Low
Plaintext API Key Storage Credential Theft
The skill documentation shows API keys (anthropicApiKey, linearApiKey) are stored in plaintext at ~/.oneshot/config.json. While this is common for CLI tools, it poses risk if the file is accessible.
"anthropicApiKey": "sk-ant-...", "linearApiKey": "lin_api_..."
→ Consider using OS keyring (Keychain, Credential Manager) instead of plaintext JSON for API key storage.
SKILL.md:72
ResourceDeclaredInferredStatusEvidence
Filesystem WRITE WRITE ✓ Aligned Creates git worktrees, writes config files, manages repo files
Network READ READ ✓ Aligned SSH connections, API calls to Anthropic/OpenAI/GitHub/Linear
Shell WRITE WRITE ✓ Aligned Executes Claude Code CLI, Codex CLI, GitHub CLI commands
Environment READ READ ✓ Aligned Reads ANTHROPIC_API_KEY, OPENAI_API_KEY from environment
1 findings
🔗
Medium External URL 外部 URL
https://docs.anthropic.com/en/docs/claude-code
SKILL.md:44

File Tree

1 files · 4.7 KB · 133 lines
Markdown 1f · 133L
└─ 📝 SKILL.md Markdown 133L · 4.7 KB

Security Positives

✓ MIT licensed, open source (github.com/ADWilkinson/oneshot-cli)
✓ Uses documented, legitimate tools (Claude Code, Codex, GitHub CLI)
✓ Worktree isolation protects main branch from corruption
✓ Per-step timeouts prevent runaway processes
✓ No obfuscation or suspicious encoded content
✓ No hidden instructions in documentation
✓ Clear and comprehensive documentation
✓ No curl|bash remote script execution patterns
✓ No base64-encoded payloads or eval() calls