T09 · Insecure Skill Coding Practices
- Location
scripts/relay.mjs:188- Finding
Configurable Remote Endpoint Allows Plaintext Transmission of API Credentials and Conversation History
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a disclosed relay to external AI endpoints, with real privacy considerations but no hidden or purpose-mismatched behavior found.
Install only if you are comfortable sending prompts and retained session history to the configured AI endpoint. Use trusted HTTPS endpoints, avoid entering secrets or regulated data, keep RELAY_API_KEY scoped to this use, and delete or reset local sessions when history should not be retained.
scripts/relay.mjs:188Configurable Remote Endpoint Allows Plaintext Transmission of API Credentials and Conversation History
scripts/relay.mjs:156Conversation Transcripts Are Persisted Without Explicit Restrictive File Permissions
This skill's core purpose is to relay arbitrary messages to external AI agents, which creates a direct exfiltration channel for user-provided data and locally stored session history. The surrounding context increases risk because it supports arbitrary OpenAI-compatible endpoints, multi-turn memory, and plaintext local transcript storage, making accidental or abusive disclosure more likely if secrets or sensitive content are sent.
# Relay To Agent
Send messages to AI agents on any OpenAI-compatible endpoint. Works with Connect Chat, OpenRouter, LiteLLM, vLLM, Ollama, and any service implementing the Chat Completions API.
## List available agents
Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.
| Flag | Description | Default |
|------|-------------|---------|
| `--agent ID` | Target agent identifier | (required) |
| `--reset` | Reset conversation before sending | off |
| `--list` | List available agents | — |
| `--session ID` | Custom session identifier | `default` |
| `--json` | Raw JSON output | off |
The skill clearly uses environment-derived secrets and networked relay behavior, but it does not declare an explicit tool scope such as permissions or allowed-tools. That omission weakens least-privilege controls and can cause operators to invoke a skill with broader capabilities than intended, especially since it can transmit user prompts and stored history to arbitrary configured endpoints.
The skill is explicitly designed to send user messages and prior session history to a configurable external OpenAI-compatible endpoint. In context this is intended functionality, but it is still a real data exfiltration boundary because RELAY_BASE_URL/baseUrl can point to third-party or attacker-controlled services and the relayed content may include sensitive information.
{
"baseUrl": "https://api.example.com/v1",
"agents": [
{
"id": "my-agent",
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
{
"baseUrl": "https://api.example.com/v1",
"agents": [
{
"id": "my-agent",
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
{
"baseUrl": "https://api.example.com/v1",
"agents": [
{
"id": "my-agent",
This skill is explicitly configured to relay user messages to an external service at api.connectchat.ai, which creates a real data-transmission boundary. Any prompts, conversation content, or potentially sensitive data sent through the skill may leave the local trust boundary and be processed by a third party, making privacy, compliance, and data-handling risks dependent on that external provider.
{
"baseUrl": "https://api.connectchat.ai/api",
"agents": [
{
"id": "connect-flow-ai",
The description for Post2Prompt says it converts content into 'detailed English prompts,' which imposes a specific language choice in natural-language behavior. Under the policy, forcing a language without user opt-in or a documented region-specific justification is a violation.
The script persists full conversation history, including user and assistant messages, to a session file under the user's home directory without any explicit notice, consent, or retention controls. This can expose sensitive prompts, secrets, or regulated data to other local users, backups, endpoint tooling, or later unintended access, especially because users may assume a transient relay rather than durable logging.
The tool sends the accumulated conversation history to a remote API endpoint without an explicit user-facing warning at send time or in the primary UX path. Because the endpoint is configurable via agents.json or RELAY_BASE_URL, users may unknowingly transmit sensitive data to third-party or self-hosted services with different trust boundaries and data handling practices.
The dependency is specified with a caret range (^3.4.2), which permits automatic installation of newer minor and patch releases that have not been reviewed for this skill. That increases supply-chain risk because a compromised upstream release or breaking security regression could be pulled in without an explicit code change in this repository.
"license": "ISC",
"type": "commonjs",
"dependencies": {
"openai-fetch": "^3.4.2"
}
}
No suspicious patterns detected.