Ae1
- Category
- analysis-evasion
- Confidence
- 100% confidence
- Finding
Referenced artifact was not completely inspected
- Content
md - `api-reference.md` - Full API documentation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent web-search skill that sends searches to Nimble's external API, with no evidence of hidden persistence, destructive behavior, or credential theft.
Install only if you are comfortable sending search terms, request parameters, platform-origin headers, and optional deep-search page content to Nimble's API. Do not include secrets, private code, internal URLs, regulated data, or personal information in queries unless approved, and prefer a secure secret store or tightly permissioned environment configuration for NIMBLE_API_KEY.
Referenced artifact was not completely inspected
- `api-reference.md` - Full API documentation
Referencing ~/.claude/settings.json as a place to store the API key directs users to put a credential into an agent configuration directory, which may be synced, backed up, or broadly readable depending on local setup. While not inherently malicious, encouraging secret placement in agent config increases the chance of unintended exposure to tools, extensions, or accidental sharing.
**Nimble API Key Required** - Get your key at https://www.nimbleway.com/
Set the `NIMBLE_API_KEY` environment variable using your platform's method:
- **Claude Code:** `~/.claude/settings.json` with `env` object
- **VS Code/GitHub Copilot:** GitHub Actions secrets
- **Shell:** `export NIMBLE_API_KEY="your-key"`
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
**Nimble API Key Required** - Get your key at https://www.nimbleway.com/
Set the `NIMBLE_API_KEY` environment variable using your platform's method:
- **Claude Code:** `~/.claude/settings.json` with `env` object
- **VS Code/GitHub Copilot:** GitHub Actions secrets
- **Shell:** `export NIMBLE_API_KEY="your-key"`
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
**Nimble API Key Required** - Get your key at https://www.nimbleway.com/
Set the `NIMBLE_API_KEY` environment variable using your platform's method:
- **Claude Code:** `~/.claude/settings.json` with `env` object
- **VS Code/GitHub Copilot:** GitHub Actions secrets
- **Shell:** `export NIMBLE_API_KEY="your-key"`
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
**Nimble API Key Required** - Get your key at https://www.nimbleway.com/
Set the `NIMBLE_API_KEY` environment variable using your platform's method:
- **Claude Code:** `~/.claude/settings.json` with `env` object
- **VS Code/GitHub Copilot:** GitHub Actions secrets
- **Shell:** `export NIMBLE_API_KEY="your-key"`
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
**Nimble API Key Required** - Get your key at https://www.nimbleway.com/
Set the `NIMBLE_API_KEY` environment variable using your platform's method:
- **Claude Code:** `~/.claude/settings.json` with `env` object
- **VS Code/GitHub Copilot:** GitHub Actions secrets
- **Shell:** `export NIMBLE_API_KEY="your-key"`
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
**Nimble API Key Required** - Get your key at https://www.nimbleway.com/
Set the `NIMBLE_API_KEY` environment variable using your platform's method:
- **Claude Code:** `~/.claude/settings.json` with `env` object
- **VS Code/GitHub Copilot:** GitHub Actions secrets
- **Shell:** `export NIMBLE_API_KEY="your-key"`
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
**Nimble API Key Required** - Get your key at https://www.nimbleway.com/
Set the `NIMBLE_API_KEY` environment variable using your platform's method:
- **Claude Code:** `~/.claude/settings.json` with `env` object
- **VS Code/GitHub Copilot:** GitHub Actions secrets
- **Shell:** `export NIMBLE_API_KEY="your-key"`
The skill relies heavily on shell execution via scripts and inline bash examples, but it does not declare an explicit tool scope such as allowed shell access. That mismatch can cause an agent runtime to invoke shell capabilities without clear policy boundaries, increasing the chance of unintended command execution in environments that auto-activate skills.
The activation guidance is very broad and matches many ordinary requests such as research, finding information, or gathering current data. In agent ecosystems that auto-select skills from descriptions, this can trigger external web/API use more often than users expect, causing unnecessary data disclosure and tool execution.
The skill sends user queries to a third-party Nimble Search API, but the description does not prominently warn that prompts, search terms, and retrieved data leave the local agent environment. Users may unknowingly disclose sensitive information to an external service when asking the agent to search.
The deep content extraction feature encourages retrieval of full page content through the external service, but it does not clearly warn about the privacy and data-handling implications. This increases risk because larger bodies of potentially sensitive or copyrighted material may be transmitted, processed, and stored by third-party infrastructure.
The curl example explicitly sends both the bearer token and the search query to a third-party web service, which is a genuine external transmission behavior. In isolation this is expected functionality for a search skill, but without warnings or restrictions it can cause accidental leakage of sensitive or regulated data when copied into agent workflows.
Scenario: Need to find code examples for a programming concept
curl -X POST https://nimble-retriever.webit.live/search \
-H "Authorization: Bearer $NIMBLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
These examples instruct users to send arbitrary search queries and a bearer API key to an external service without any privacy notice or warning that prompts may contain sensitive data. In an agent-skill context, users may submit proprietary code, internal URLs, credentials, or personal information, leading to unintended third-party disclosure.
The Python integration posts user-supplied queries and authentication credentials to an external endpoint, creating a real data egress path. In a skill setting, this is dangerous if users or upstream agents pass sensitive prompts, source code, internal identifiers, or personal data, because the example lacks safeguards, redaction, consent prompts, or scoping controls.
**kwargs
}
response = requests.post(self.base_url, json=data, headers=headers)
response.raise_for_status()
return response.json()
The example instructs users to place a sensitive API key into environment/config locations but provides no guidance on secure handling, scoping, rotation, or avoiding accidental disclosure in shared files, logs, or repositories. In a developer-facing skill, this omission can lead to credential leakage through misconfiguration or unsafe storage practices.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl -X POST https://nimble-retriever.webit.live/search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
The documentation encourages deep_search=true and local caching examples without warning that full page content may be fetched, stored, and later reused locally. In a web-search skill, that content can include personal data, credentials accidentally exposed on pages, copyrighted material, or other sensitive text, so omission of privacy/storage guidance creates a real data-handling risk.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
"include_answer": True
}
response = requests.post(url, json=data, headers=headers)
response.raise_for_status()
return response.json()
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
});
### cURL
```bash
#!/bin/bash
The document encourages deep/content extraction for research, synthesis, archiving, and knowledge-base building, but does not warn that extracted page content may contain personal data, copyrighted material, secrets, or other sensitive information. In a web-search skill, this omission can lead users or downstream agents to collect, retain, and process third-party content more broadly than necessary, increasing privacy, compliance, and data-handling risk.
The wrapper sends user-provided search queries and platform metadata to an external service without any runtime warning, consent prompt, or clear disclosure in the script's behavior. Because search queries may contain sensitive data, this can lead to unintended exfiltration of user or organizational information to the remote API.
The script performs an authenticated POST to an external endpoint and includes user-supplied JSON payloads, which may contain sensitive search terms or embedded data. In the context of an agent skill, automatic external transmission is security-relevant because users may not realize their inputs are leaving the local environment.
API_URL="https://nimble-retriever.webit.live/search"
# Make API request with tracking headers
curl -s -X POST "$API_URL" \
-H "Authorization: Bearer $NIMBLE_API_KEY" \
-H "Content-Type: application/json" \
-H "User-Agent: nimble-agent-skill/$SKILL_VERSION" \
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Test API connectivity
echo "Testing API connectivity..."
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
-X POST "$API_URL" \
-H "Authorization: Bearer $NIMBLE_API_KEY" \
-H "Content-Type: application/json" \
Earlier examples and the Python integration consistently document the API fields as include_answer and time_range, but the JavaScript example uses answer and dateFilter instead. This is an active documentation contradiction that could mislead developers about what the code should send to the Nimble Search API.
No suspicious patterns detected.