Back to skill

Security audit

Nimble Web Search

Security checks for vulnerabilities and agentic risk

Overview

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.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (29)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 634)May include surrounding context.

md
- `api-reference.md` - Full API documentation

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

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.

Content

Scanner excerpt · examples/competitive-analysis.md (reported line 10)May include surrounding context.

md
**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"`

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

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.

Content

Scanner excerpt · SKILL.md (reported line 28)May include surrounding context.

md
**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"`

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

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.

Content

Scanner excerpt · SKILL.md (reported line 60)May include surrounding context.

md
**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"`

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

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.

Content

Scanner excerpt · examples/basic-search.md (reported line 10)May include surrounding context.

md
**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"`

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

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.

Content

Scanner excerpt · examples/deep-research.md (reported line 10)May include surrounding context.

md
**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"`

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

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.

Content

Scanner excerpt · references/api-reference.md (reported line 11)May include surrounding context.

md
**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"`

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
90% confidence
Finding

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.

Content

Scanner excerpt · scripts/search.sh (reported line 44)May include surrounding context.

sh
**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"`

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

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.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

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.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

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.

Content

Scanner excerpt · examples/basic-search.md (reported line 21)May include surrounding context.

Scenario: Need to find code examples for a programming concept

bash
curl -X POST https://nimble-retriever.webit.live/search \
  -H "Authorization: Bearer $NIMBLE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

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.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

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.

Content

Scanner excerpt · examples/basic-search.md (reported line 175)May include surrounding context.

md
**kwargs
        }

        response = requests.post(self.base_url, json=data, headers=headers)
        response.raise_for_status()
        return response.json()

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

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.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/api-reference.md (reported line 72)May include surrounding context.

Request Example

bash
curl -X POST https://nimble-retriever.webit.live/search \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

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.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/api-reference.md (reported line 320)May include surrounding context.

md
"include_answer": True
    }

    response = requests.post(url, json=data, headers=headers)
    response.raise_for_status()
    return response.json()

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/api-reference.md (reported line 361)May include surrounding context.

});

text

### cURL

```bash
#!/bin/bash

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

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.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

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.

Content

Scanner excerpt · scripts/search.sh (reported line 90)May include surrounding context.

sh
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" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/validate-query.sh (reported line 53)May include surrounding context.

sh
# 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" \

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

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.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.