feat(skill): v2.6 - agent-native invocation and --agent report mode

Removes disable-model-invocation restriction so the skill can be called
by other agents via the Skill tool. Adds --agent flag for non-interactive
report output (skips intro, AskUserQuestion, wait pause, and invitation).
Fixes false security doc claiming autonomous invocation was blocked.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Matt Van Horn
2026-03-02 23:07:47 -08:00
parent 27b4865d60
commit 1ed990a081
2 changed files with 185 additions and 3 deletions
+31 -3
View File
@@ -1,12 +1,11 @@
--- ---
name: last30days name: last30days
version: "2.5" version: "2.6"
description: "Research a topic from the last 30 days. Also triggered by 'last30'. Sources: Reddit, X, YouTube, Hacker News, Polymarket, web. Become an expert and write copy-paste-ready prompts." description: "Research a topic from the last 30 days. Also triggered by 'last30'. Sources: Reddit, X, YouTube, Hacker News, Polymarket, web. Become an expert and write copy-paste-ready prompts."
argument-hint: 'last30 AI video tools, last30 best project management tools' argument-hint: 'last30 AI video tools, last30 best project management tools'
allowed-tools: Bash, Read, Write, AskUserQuestion, WebSearch allowed-tools: Bash, Read, Write, AskUserQuestion, WebSearch
homepage: https://github.com/mvanhorn/last30days-skill homepage: https://github.com/mvanhorn/last30days-skill
user-invocable: true user-invocable: true
disable-model-invocation: true
metadata: metadata:
clawdbot: clawdbot:
emoji: "📰" emoji: "📰"
@@ -112,6 +111,35 @@ Store: `RESOLVED_HANDLE = {handle or empty}`
--- ---
## Agent Mode (--agent flag)
If `--agent` appears in ARGUMENTS (e.g., `/last30days plaud granola --agent`):
1. **Skip** the intro display block ("I'll research X across Reddit...")
2. **Skip** any `AskUserQuestion` calls - use `TARGET_TOOL = "unknown"` if not specified
3. **Run** the research script and WebSearch exactly as normal
4. **Skip** the "WAIT FOR USER RESPONSE" pause
5. **Skip** the follow-up invitation ("I'm now an expert on X...")
6. **Output** the complete research report and stop - do not wait for further input
Agent mode report format:
```
## Research Report: {TOPIC}
Generated: {date} | Sources: Reddit, X, YouTube, HN, Polymarket, Web
### Key Findings
[3-5 bullet points, highest-signal insights with citations]
### What I learned
{The full "What I learned" synthesis from normal output}
### Stats
{The standard stats block}
```
---
## Research Execution ## Research Execution
**Step 1: Run the research script (FOREGROUND — do NOT background this)** **Step 1: Run the research script (FOREGROUND — do NOT background this)**
@@ -556,7 +584,7 @@ Want another prompt? Just tell me what you're creating next.
- Does not log, cache, or write API keys to output files - Does not log, cache, or write API keys to output files
- Does not send data to any endpoint not listed above - Does not send data to any endpoint not listed above
- Hacker News and Polymarket sources are always available (no API key, no binary dependency) - Hacker News and Polymarket sources are always available (no API key, no binary dependency)
- Cannot be invoked autonomously by the agent (`disable-model-invocation: true`) - Can be invoked autonomously by agents via the Skill tool (runs inline, not forked); pass `--agent` for non-interactive report output
**Bundled scripts:** `scripts/last30days.py` (main research engine), `scripts/lib/` (search, enrichment, rendering modules), `scripts/lib/vendor/bird-search/` (vendored X search client, MIT licensed) **Bundled scripts:** `scripts/last30days.py` (main research engine), `scripts/lib/` (search, enrichment, rendering modules), `scripts/lib/vendor/bird-search/` (vendored X search client, MIT licensed)
@@ -0,0 +1,154 @@
---
title: "feat: last30days v2.6 - agent-native invocation"
type: feat
status: completed
date: 2026-03-02
---
# feat: last30days v2.6 - Agent-Native Invocation
## Overview
v2.5 shipped as a human-only interactive skill. Agents calling it today would hang forever at
"WAIT FOR USER RESPONSE" and never receive research output. v2.6 makes the skill fully
invocable by other agents - delivering a complete research report instead of an interactive
conversation.
The `disable-model-invocation: true` flag was removed in a hotfix today (2026-03-02). v2.6
formalizes that fix, addresses the deeper interactive-flow problem, and updates all
documentation to match reality.
## Problem Statement
### 1. The flag was removed but the behavior is still broken
Removing `disable-model-invocation: true` lets agents call the skill. But the skill still:
- Calls `AskUserQuestion` mid-flow (blocks, waits for a human to click something)
- Ends with "WAIT FOR USER RESPONSE" (the calling agent gets nothing)
- Assumes a human is reading progress text in real-time
When an agent calls `/last30days plaud granola`, it needs a **completed research report
returned to it**, not a half-executed interactive session.
### 2. The Security section has a false statement
Line 558 of SKILL.md still reads:
```
- Cannot be invoked autonomously by the agent (`disable-model-invocation: true`)
```
This is now wrong. It actively misleads users and agents reading the skill docs.
### 3. No documented path for agent callers
Users who want to call `last30days` from another skill (e.g., "research this topic and then
build a plan") have no guidance on how to do it or what format to expect back.
## Proposed Solution
### Agent Mode: `--agent` flag
Add an `--agent` execution mode that skips all interactive elements and returns a structured
research report. Calling agents pass the flag explicitly:
```
/last30days plaud granola --agent
```
### Agent Mode Behavior
In agent mode, the skill:
1. **Skips** the intro display block ("I'll research X across Reddit...")
2. **Skips** `AskUserQuestion` for target tool clarification
3. **Skips** the "WAIT FOR USER RESPONSE" pause
4. **Skips** the follow-up invitation ("I'm now an expert on X...")
5. **Outputs** a complete, structured report with all findings, then terminates cleanly
The report format for agent mode:
```
## Research Report: {TOPIC}
Generated: {date} | Sources: Reddit, X, YouTube, HN, Polymarket, Web
### Key Findings
[3-5 bullet points, highest-signal insights with citations]
### {Source} Results
[Compact per-source sections with top items]
### Stats
{The existing stats block}
```
### Security Section Rewrite
Remove the false statement. Replace with:
```
- Can be invoked autonomously by agents via the Skill tool (inline mode, not forked)
- Pass `--agent` flag for non-interactive report output
```
### Version Bump
`version: "2.5"``version: "2.6"` in SKILL.md frontmatter.
## Technical Considerations
### Implementation: SKILL.md instructions only
Add a section to SKILL.md that reads:
```
## Agent Mode (--agent flag)
If --agent is in ARGUMENTS: skip intro display, skip AskUserQuestion, skip invitation,
skip WAIT block. Output the full research report and stop.
```
No Python script changes needed. The script already outputs everything via `--emit=compact` -
the LLM just skips the interactive wrapper. If LLM instruction-following proves unreliable in
testing, a v2.6.1 patch adds `--agent` natively to `last30days.py` (Python flag approach).
## Acceptance Criteria
- [x] `disable-model-invocation: true` is gone from SKILL.md (done in hotfix - verify)
- [x] Security section no longer claims the skill cannot be invoked autonomously
- [x] SKILL.md documents the `--agent` flag and its behavior
- [x] In `--agent` mode: no AskUserQuestion calls, no WAIT block, full report output
- [x] Version is `2.6` in frontmatter
- [x] Synced to all 4 destinations via `sync.sh`
- [ ] Manual test: `Skill { skill: "last30days", args: "plaud granola --agent" }` returns
a complete research report without hanging
## Implementation Steps
1. **Verify hotfix** - confirm `disable-model-invocation` is gone in private source
2. **Edit SKILL.md** - update Security section, add Agent Mode section, bump version
3. **Run sync.sh** - deploy to `~/.claude`, `~/.agents`, `~/.codex`
4. **Test** - invoke via Skill tool and verify report returns cleanly
All changes are in `SKILL.md` only. No Python changes needed for v2.6.
## Dependencies & Risks
**No script changes** - this is a pure SKILL.md update. Low risk.
**LLM instruction-following** - agent mode relies on the LLM reading and following the
`--agent` section. If testing shows it's unreliable, escalate to Option B (Python flag)
as a v2.6.1 patch.
**Skill list refresh** - after sync, Claude Code needs to restart or reload skills to see
the updated frontmatter. Users on older Claude Code versions may still see the old flag.
## Distribution Note
For users who installed from the public repo, they need to pull the update. The sync script
handles local installations. For `last30daysCROSS` variant, the same changes apply.
## Sources & References
- [fix-skill-execution-fork-mode-plan.md](./2026-02-06-fix-skill-execution-fork-mode-plan.md) - original fork-mode diagnosis
- SKILL.md line 558: false security claim to remove
- Hotfix applied 2026-03-02: removed `disable-model-invocation: true`