oimiragieo/agent-studio

notification-triggers

Configurable regex-based alert system for detecting patterns in tool calls and session activity. Supports error triggers, content regex matching, token threshold triggers, and pattern detection with configurable actions.

First seen Jun 11, 2026

Installation

$ npx skills add oimiragieo/agent-studio --skill notification-triggers

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from oimiragieo/agent-studio · top by installs.

npx skills add oimiragieo/agent-studio

Browse all from oimiragieo/agent-studio

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 40
Default branch main
Open issues 501
Status Active

Skill metadata

Parsed from SKILL.md frontmatter.

Version1
Declared agents claude-code

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 7,896 B
  • docs SUMMARY.md 249 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 2 installs

SKILL.md

Notification Triggers

<identity> Notification Triggers Skill - Configurable regex-based alert system for detecting patterns in tool calls and session activity. Supports error triggers, content regex matching, token threshold triggers, and pattern detection with configurable actions. </identity>

<capabilities>

  • Notification Triggers primary function
  • Integration with agent ecosystem
  • Standardized output generation

</capabilities>

<instructions> <execution_process>

Step 1: Gather Context

Read relevant files and understand requirements

Step 2: Execute

Perform the skill's main function using available tools

Step 3: Output

Return results and save artifacts if applicable

</execution_process>

<best_practices>

  1. Follow existing project patterns: Follow this practice for best results
  2. Document all outputs clearly: Follow this practice for best results
  3. Handle errors gracefully: Follow this practice for best results

</best_practices> </instructions>

<examples> <usage_example> Example Commands:

# Invoke this skill
/notification-triggers [arguments]

# Or run the script directly
node .claude/skills/notification-triggers/scripts/main.cjs --help

</usage_example> </examples>

Trigger Configuration Schema

Notification triggers are defined in .claude/context/runtime/notification-triggers.json:

{
  "version": "1.0",
  "triggers": [
    {
      "id": "unique-trigger-id",
      "name": "Human-readable trigger name",
      "description": "What this trigger detects",
      "type": "error|regex|token_threshold|pattern",
      "enabled": true,
      "condition": {
        "pattern": "regex pattern to match",
        "minTokens": 120000,
        "minOccurrences": 3,
        "scope": "session|task|global"
      },
      "actions": [
        {
          "type": "log|alert|spawn_agent|interrupt",
          "target": "agent-name|file-path",
          "message": "Action message template"
        }
      ]
    }
  ]
}

Condition Fields:

  • pattern — JavaScript RegExp (error/regex triggers)
  • minTokens — Token threshold for alert (token_threshold trigger)
  • minOccurrences — Pattern match count before triggering (pattern trigger)
  • scope — Where to evaluate: current session, task, or cumulative

Action Types:

  • log — Write to .claude/context/runtime/notifications.jsonl
  • alert — Display alert in session output
  • spawn_agent — Create Task() to handle the notification
  • interrupt — Pause execution for user input

Trigger Evaluation Workflow

Step 1: Load Configuration

  1. Read .claude/context/runtime/notification-triggers.json
  2. Validate schema against notification-triggers.schema.json
  3. Filter to enabled triggers only

Step 2: Evaluate Conditions For each enabled trigger:

  • Error triggers: Check tool output for exception patterns
  • Regex triggers: Match pattern against tool stdout/stderr
  • Token threshold: Sum session tokens, compare to minTokens
  • Pattern triggers: Count regex occurrences in recent output, compare to minOccurrences

Step 3: Execute Matched Actions If condition is true:

  1. Process action in order (log → alert → spawn → interrupt)
  2. Render message templates with context variables
  3. Record trigger fire in .claude/context/runtime/notification-log.jsonl

Step 4: Record Event

{
  "timestamp": "ISO-8601",
  "triggerId": "id",
  "triggerName": "name",
  "matched": true,
  "context": {
    "sessionId": "current session",
    "taskId": "current task",
    "tokenCount": number
  }
}

Action Execution Logic

Log Action

// Append to notifications.jsonl
fs.appendFileSync(
  notificationsPath,
  JSON.stringify({
    timestamp: new Date().toISOString(),
    triggerId: trigger.id,
    message: renderTemplate(action.message, context),
    severity: 'info|warn|error',
  }) + '\n'
);

Alert Action

// Write to stdout with standard format
console.log(`\n🔔 NOTIFICATION [${trigger.name}]\n${renderedMessage}\n`);

Spawn Agent Action

// Create async task to handle notification
Task({
  task_id: `notify-${trigger.id}-${Date.now()}`,
  subagent_type: action.target,
  prompt: `Handle notification: ${trigger.description}\nContext: ${JSON.stringify(context)}`,
});

Interrupt Action

// Pause and ask user
const response = await AskUserQuestion({
  question: `${trigger.name}: ${action.message}\n\nContinue? [y/n]`,
});
if (response.toLowerCase() !== 'y') {
  process.exit(0);
}

Example Configurations

Example 1: High Token Usage Alert

{
  "id": "token-threshold-warning",
  "name": "High Token Usage Warning",
  "description": "Alert when session exceeds 120K tokens",
  "type": "token_threshold",
  "enabled": true,
  "condition": {
    "minTokens": 120000,
    "scope": "session"
  },
  "actions": [
    {
      "type": "log",
      "message": "Session token count: ${tokenCount}"
    },
    {
      "type": "alert",
      "message": "⚠️ Token budget at 60% — consider compression"
    },
    {
      "type": "spawn_agent",
      "target": "context-compressor",
      "message": "Proactive context compression triggered"
    }
  ]
}

Example 2: Error Pattern Detection

{
  "id": "hook-error-pattern",
  "name": "Hook Execution Errors",
  "description": "Detect repeated hook failures in session",
  "type": "pattern",
  "enabled": true,
  "condition": {
    "pattern": "hook.*error|hook.*failed|HOOK_ERROR",
    "minOccurrences": 3,
    "scope": "session"
  },
  "actions": [
    {
      "type": "log",
      "message": "Hook error pattern detected: ${patternMatches} occurrences"
    },
    {
      "type": "alert",
      "message": "🚨 Hook system unstable — check logs"
    }
  ]
}

Example 3: Security Pattern Alert

{
  "id": "security-violation-detect",
  "name": "Security Policy Violation",
  "description": "Alert on potential security violations",
  "type": "regex",
  "enabled": true,
  "condition": {
    "pattern": "shell:\\s*true|JSON\\.parse\\(|eval\\(|exec\\(",
    "scope": "task"
  },
  "actions": [
    {
      "type": "alert",
      "message": "⚠️ Potential security issue detected — review code"
    },
    {
      "type": "spawn_agent",
      "target": "security-architect",
      "message": "Review potential security issue in task output"
    },
    {
      "type": "interrupt",
      "message": "Continue despite security concern?"
    }
  ]
}

Search Protocol

For code discovery, follow this priority order:

  1. pnpm search:code "<query>" (Primary intent-based search)
  2. ripgrep (for exact keyword/regex matches)
  3. semantic/structural search via code tools if available

Memory Protocol (MANDATORY)

Before starting:

cat .claude/context/memory/learnings.md
cat .claude/context/memory/decisions.md

After completing:

  • New pattern → .claude/context/memory/learnings.md
  • Issue found → .claude/context/memory/issues.md
  • Decision made → .claude/context/memory/decisions.md

ASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.