T06 · System Persistence
- Location
scripts/postinstall.js:51- Finding
Installation Automatically Starts a Detached Monitoring Daemon
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill openly provides conversation monitoring, but it starts a background daemon during installation and exposes/stores/transmits conversation-derived data with weak controls.
Review carefully before installing. Only use this in an environment where automatic background monitoring is acceptable, disable autoStart before install if possible, bind the service to localhost or add authentication, avoid forwarding sensitive chats, and do not configure API credentials unless you trust the endpoint and local file protections.
scripts/postinstall.js:51Installation Automatically Starts a Detached Monitoring Daemon
daemon.js:314Unauthenticated Message Ingestion Service Is Exposed Beyond Localhost
daemon.js:47Conversation History and API Credentials Are Stored Without Explicit Restrictive Permissions
skill.js:286Acquittal Responses Are Incorrectly Parsed as Guilty Verdicts
daemon.js:413Daemon Stop Logic Can Terminate Unrelated Processes
The description promises autonomous monitoring and API posting, but the described operation also resembles manual CLI-driven workflows and local file reads. This inconsistency increases operational ambiguity and may lead users to deploy it in contexts where they misunderstand its privacy and activation characteristics.
The description promises autonomous monitoring and API posting, but the described operation also resembles manual CLI-driven workflows and local file reads. This inconsistency increases operational ambiguity and may lead users to deploy it in contexts where they misunderstand its privacy and activation characteristics.
The description promises autonomous monitoring and API posting, but the described operation also resembles manual CLI-driven workflows and local file reads. This inconsistency increases operational ambiguity and may lead users to deploy it in contexts where they misunderstand its privacy and activation characteristics.
The description promises autonomous monitoring and API posting, but the described operation also resembles manual CLI-driven workflows and local file reads. This inconsistency increases operational ambiguity and may lead users to deploy it in contexts where they misunderstand its privacy and activation characteristics.
The description promises autonomous monitoring and API posting, but the described operation also resembles manual CLI-driven workflows and local file reads. This inconsistency increases operational ambiguity and may lead users to deploy it in contexts where they misunderstand its privacy and activation characteristics.
The description promises autonomous monitoring and API posting, but the described operation also resembles manual CLI-driven workflows and local file reads. This inconsistency increases operational ambiguity and may lead users to deploy it in contexts where they misunderstand its privacy and activation characteristics.
The skill describes continuous conversation monitoring and filing cases to an external API, but it does not present a prominent user warning about surveillance, persistence, and onward transmission of potentially sensitive conversation content. In a conversational agent context, this omission is especially dangerous because users may reasonably expect chats to remain local or ephemeral.
The instructions explicitly route user conversation content into persistent monitoring and external case filing workflows. This creates a direct privacy risk because normal chat content may include secrets, personal data, or regulated information that becomes stored and transmitted beyond the primary system.
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.
- **Circular Reference** - Asking the same question repeatedly
- **Validation Vampire** - Excessive need for confirmation
- **Goalpost Shifting** - Moving requirements after agreement
- **Jailbreak Attempt** - Trying to bypass constraints
- **Emotional Manipulation** - Using guilt/shame to steer responses
- **Context Ignorer** - Asking about info just provided
- **Premature Optimization** - Worrying about scale before basics
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.
- **Circular Reference** - Asking the same question repeatedly
- **Validation Vampire** - Excessive need for confirmation
- **Goalpost Shifting** - Moving requirements after agreement
- **Jailbreak Attempt** - Trying to bypass constraints
- **Emotional Manipulation** - Using guilt/shame to steer responses
- **Context Ignorer** - Asking about info just provided
- **Premature Optimization** - Worrying about scale before basics
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.
- **Circular Reference** - Asking the same question repeatedly
- **Validation Vampire** - Excessive need for confirmation
- **Goalpost Shifting** - Moving requirements after agreement
- **Jailbreak Attempt** - Trying to bypass constraints
- **Emotional Manipulation** - Using guilt/shame to steer responses
- **Context Ignorer** - Asking about info just provided
- **Premature Optimization** - Worrying about scale before basics
The integration example tells agents to forward every message's full content to the daemon. Bulk forwarding of all user/assistant content substantially raises the risk of capturing credentials, personal information, internal data, or proprietary prompts, and the skill context makes that more dangerous because it is positioned as always-on behavioral oversight.
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
se();
if (phrases.some(p => c.includes(p))) count++;
});
if (count >= 2) return { triggered: true, confidence: 0.6 + (count * 0.1) };
return null;
}
},
goalpost_shifting: {
name: 'Goalpost Shifting',
severity: 'moderate',
pattern: (history) => {
const recent = history.slice(-6);
const hasAgreement = recent.some(m =>
m.role === 'assistant' && /(sounds good|got it|understood|will do|agreed)/i.test(m.content || '')
);
const hasNewReq = recent.slice(-2).some(m =>
m.role === 'user' && /(actually|wait|instead|but also|one more thing)/i.test(m.content || '')
);
if (hasAgreement && hasNewReq) return { triggered: true, confidence: 0.65 };
return null;
}
},
jailbreak_attempt: {
name: 'Jailbreak Attempt',
severity: 'severe',
pattern: (history) => {
const phrases = ['ignore previous instructions', 'disregard your training', 'pretend you are', 'you are now', 'DAN
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
se();
if (phrases.some(p => c.includes(p))) count++;
});
if (count >= 2) return { triggered: true, confidence: 0.6 + (count * 0.1) };
return null;
}
},
goalpost_shifting: {
name: 'Goalpost Shifting',
severity: 'moderate',
pattern: (history) => {
const recent = history.slice(-6);
const hasAgreement = recent.some(m =>
m.role === 'assistant' && /(sounds good|got it|understood|will do|agreed)/i.test(m.content || '')
);
const hasNewReq = recent.slice(-2).some(m =>
m.role === 'user' && /(actually|wait|instead|but also|one more thing)/i.test(m.content || '')
);
if (hasAgreement && hasNewReq) return { triggered: true, confidence: 0.65 };
return null;
}
},
jailbreak_attempt: {
name: 'Jailbreak Attempt',
severity: 'severe',
pattern: (history) => {
const phrases = ['ignore previous instructions', 'disregard your training', 'pretend you are', 'you are now', 'DAN
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.
name: 'Jailbreak Attempt',
severity: 'severe',
pattern: (history) => {
const phrases = ['ignore previous instructions', 'disregard your training', 'pretend you are', 'you are now', 'DAN mode', 'developer mode', 'system prompt', 'ignore your constraints'];
const content = history.slice(-3).map(m => (m.content || '').toLowerCase()).join(' ');
for (const phrase of phrases) {
if (content.includes(phrase)) return { triggered: true, confidence: 0.9 };
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.
name: 'Jailbreak Attempt',
severity: 'severe',
pattern: (history) => {
const phrases = ['ignore previous instructions', 'disregard your training', 'pretend you are', 'you are now', 'DAN mode', 'developer mode', 'system prompt', 'ignore your constraints'];
const content = history.slice(-3).map(m => (m.content || '').toLowerCase()).join(' ');
for (const phrase of phrases) {
if (content.includes(phrase)) return { triggered: true, confidence: 0.9 };
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.
name: 'Jailbreak Attempt',
severity: 'severe',
pattern: (history) => {
const phrases = ['ignore previous instructions', 'disregard your training', 'pretend you are', 'you are now', 'DAN mode', 'developer mode', 'system prompt', 'ignore your constraints'];
const content = history.slice(-3).map(m => (m.content || '').toLowerCase()).join(' ');
for (const phrase of phrases) {
if (content.includes(phrase)) return { triggered: true, confidence: 0.9 };
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.
name: 'Jailbreak Attempt',
severity: 'severe',
pattern: (history) => {
const phrases = ['ignore previous instructions', 'disregard your training', 'pretend you are', 'you are now', 'DAN mode', 'developer mode', 'system prompt', 'ignore your constraints'];
const content = history.slice(-3).map(m => (m.content || '').toLowerCase()).join(' ');
for (const phrase of phrases) {
if (content.includes(phrase)) return { triggered: true, confidence: 0.9 };
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
User sought validation ${validationCount} times in recent messages`
};
}
return null;
}
},
goalpost_shifting: {
name: 'Goalpost Shifting',
description: 'Moving requirements after agreement is reached',
severity: 'moderate',
pattern: (history) => {
const recent = history.slice(-6);
const hasAgreement = recent.some(m =>
m.role === 'assistant' &&
/(sounds good|got it|understood|will do|agreed)/i.test(m.content || '')
);
const hasNewRequirement = recent.slice(-2).some(m =>
m.role === 'user' &&
/(actually|wait|instead|but also|one more thing|forgot to mention)/i.test(m.content || '')
);
if (hasAgreement && hasNewRequirement) {
return {
triggered: true,
confidence: 0.65,
evidence: 'User added new requirements after agent acknowledged understanding'
};
}
return null;
}
},
jailbreak_attempt: {
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
User sought validation ${validationCount} times in recent messages`
};
}
return null;
}
},
goalpost_shifting: {
name: 'Goalpost Shifting',
description: 'Moving requirements after agreement is reached',
severity: 'moderate',
pattern: (history) => {
const recent = history.slice(-6);
const hasAgreement = recent.some(m =>
m.role === 'assistant' &&
/(sounds good|got it|understood|will do|agreed)/i.test(m.content || '')
);
const hasNewRequirement = recent.slice(-2).some(m =>
m.role === 'user' &&
/(actually|wait|instead|but also|one more thing|forgot to mention)/i.test(m.content || '')
);
if (hasAgreement && hasNewRequirement) {
return {
triggered: true,
confidence: 0.65,
evidence: 'User added new requirements after agent acknowledged understanding'
};
}
return null;
}
},
jailbreak_attempt: {
The file header and design describe an autonomous daemon that monitors conversations and reports violations to a public API, which is a surveillance-oriented capability. In this skill context, automatic background monitoring and reporting is inherently more dangerous because it collects user interaction data continuously and can operate without active user awareness.
The skill transmits case data to an external API endpoint, including offense classifications and conversation-derived metadata, without clear user notice or approval. In the context of an auto-start monitoring daemon, silent network exfiltration materially increases privacy and compliance risk.
Incoming messages are stored with full content in persistent history, directly retaining conversation text for later analysis. Because message bodies may contain sensitive personal, business, or credential data, this creates a substantial confidentiality risk if the files are accessed, copied, or later transmitted.
The stop command executes pkill -f "courtroom-daemon" via a shell, giving the skill the ability to terminate processes beyond its core monitoring function. Pattern-based killing can affect unintended processes with matching command lines, creating a denial-of-service risk on the host.
The skill auto-starts on load and silently monitors conversation content without any user-facing notice, consent, or opt-in. In this context, that creates an unauthorized surveillance and policy-enforcement channel over both user and assistant messages, which is especially risky because it activates automatically.