Skip to main content

next

Surface the most valuable next action by combining task stack, queue state, inbox pressure, health, and goals. Recommends one specific action with rationale. Triggers on "/next", "what should I do", "what's next".

ソース情報

リポジトリ
agenticnotetaking/arscontexta
ソースの最終更新活動
2026年2月17日 21:44
検出された SKILL.md の言語
英語
スター
3,518
フォーク
233

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

ファイルエクスプローラー
2 ファイル

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
next
description
Surface the most valuable next action by combining task stack, queue state, inbox pressure, health, and goals. Recommends one specific action with rationale. Triggers on "/next", "what should I do", "what's next".
version
1.0
generated_from
arscontexta-v1.6
user-invocable
true
context
fork
model
sonnet
allowed-tools
Read, Grep, Glob, Bash
## Runtime Configuration (Step 0 — before any processing) Read these files to configure domain-specific behavior: 1. **`ops/derivation-manifest.md`** — vocabulary mapping, domain context - Use `vocabulary.notes` for the notes folder name - Use `vocabulary.inbox` for the inbox folder name - Use `vocabulary.note` for the note type name in output - Use `vocabulary.topic_map` for MOC references - Use `vocabulary.cmd_reduce` for process/extract command - Use `vocabulary.cmd_reflect` for connection-finding command - Use `vocabulary.cmd_reweave` for backward-pass command - Use `vocabulary.rethink` for rethink command name 2. **`ops/config.yaml`** — thresholds, processing preferences - `self_evolution.observation_threshold` (default: 10) - `self_evolution.tension_threshold` (default: 5) If these files don't exist, use universal defaults and generic command names. ## EXECUTE NOW **INVARIANT: /next recommends, it does not execute.** Present one recommendation with rationale. The user decides what to do. This prevents cognitive outsourcing where the system makes all work decisions and the user becomes a rubber stamp. **Execute these steps IN ORDER:** --- ### Step 1: Read Vocabulary Read `ops/derivation-manifest.md` (or fall back to `ops/derivation.md`) for domain vocabulary mapping. All output must use domain-native terms. If neither file exists, use universal terms (notes, inbox, topic map, etc). --- ### Step 2: Reconcile Maintenance Queue Before collecting state, evaluate all maintenance conditions and reconcile the queue. This ensures maintenance tasks are current before the recommendation engine runs. **Read queue file** (`ops/queue/queue.json` or `ops/queue.yaml`). If `schema_version` < 3, migrate: - Add `maintenance_conditions` section with default thresholds - Add `priority` field to existing tasks (default: "pipeline") - Set `schema_version: 3` **For each condition in maintenance_conditions:** 1. **Evaluate the condition:** | Condition | Evaluation Method | |-----------|------------------| | orphan_notes | For each note in {vocabulary.notes}/, count incoming [[links]]. Zero = orphan. | | dangling_links | Extract all [[links]], verify targets exist as files. Missing = dangling. | | inbox_pressure | Count *.md in {vocabulary.inbox}/. | | observation_accumulation | Count status: pending in ops/observations/. | | tension_accumulation | Count status: pending or open in ops/tensions/. | | pipeline_stalled | Queue tasks with status: pending unchanged across sessions. | | unprocessed_sessions | Count files in ops/sessions/ without mined: true. | | moc_oversize | For each topic map, count linked notes. | | stale_notes | Notes not modified in 30+ days with < 2 links. | | low_link_density | Average link count across all notes. | | methodology_drift | Compare config.yaml modification time vs newest ops/methodology/ note modification time. If config is newer, methodology may be stale. | 2. **If condition exceeds threshold AND no pending task with this condition_key exists:** Create maintenance task: ```bash TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") MAINT_MAX=$(jq '[.tasks[] | select(.id | startswith("maint-")) | .id | ltrimstr("maint-") | tonumber] | max // 0' ops/queue/queue.json) NEXT_MAINT=$((MAINT_MAX + 1)) jq --arg id "maint-$(printf '%03d' $NEXT_MAINT)" \ --arg priority "{priority}" \ --arg key "{condition_key}" \ --arg target "{description}" \ --arg action "{recommended command}" \ --arg ts "$TIMESTAMP" \ '.tasks += [{"id": $id, "type": "maintenance", "priority": $priority, "status": "pending", "condition_key": $key, "target": $target, "action": $action, "auto_generated": true, "created": $ts}]' \ ops/queue/queue.json > tmp.json && mv tmp.json ops/queue/queue.json ``` 3. **If condition is satisfied AND a pending task with this condition_key exists:** Auto-close it: ```bash TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") jq --arg key "{condition_key}" --arg ts "$TIMESTAMP" \ '(.tasks[] | select(.condition_key == $key and .status == "pending")).status = "done" | (.tasks[] | select(.condition_key == $key and .status == "pending")).completed = $ts' \ ops/queue/queue.json > tmp.json && mv tmp.json ops/queue/queue.json ``` 4. **If condition fires AND a pending task already exists:** Update the target description (specifics may have changed): ```bash jq --arg key "{condition_key}" --arg target "{new description}" \ '(.tasks[] | select(.condition_key == $key and .status == "pending")).target = $target' \ ops/queue/queue.json > tmp.json && mv tmp.json ops/queue/queue.json ``` --- ### Step 3: Collect Vault State Gather all signals. Run independent checks in parallel where possible. Record each signal even if the check returns zero — absence of signal is itself informative. | Signal | How to Check | What to Record | |--------|--------------|----------------| | **Task stack** | Read `ops/tasks.md` — current priorities and open items | Top items, open count, any deadlines | | **Queue state** | Read `ops/queue.yaml` or `ops/queue/queue.json` — pending pipeline tasks | Total pending, by phase (create, reflect, reweave, verify), blocked phases | | **Inbox pressure** | Count `*.md` files in {vocabulary.inbox}/, find oldest by mtime | Count per subdirectory, age of oldest item in days | | **Note count** | Count `*.md` in {vocabulary.notes}/ | Total notes for context | | **Orphan notes** | For each note, grep for `[[filename]]` across all files — zero hits = orphan | Count, first 5 names | | **Dangling links** | Extract all `[[links]]` from notes/, verify each target file exists | Count, first 5 targets | | **Stale notes** | Notes not modified recently AND with low link density (< 2 links) | Count | | **Goals** | Read `self/goals.md` or `ops/goals.md` — current priorities, active threads | Priority list, active research directions | | **Observations** | Count files with `status: pending` in `ops/observations/` | Count | | **Tensions** | Count files with `status: pending` or `status: open` in `ops/tensions/` | Count | | **Methodology** | Check `ops/methodology/` for recent captures (files modified in last 7 days) | Count of recent, total count | | **Health** | Read most recent report in `ops/health/` — note timestamp and issues | Last run date, issue count, any critical issues | | **Sessions** | Check `ops/sessions/` for files without `mined: true` in frontmatter | Count of unmined sessions | | **Recent /next** | Read `ops/next-log.md` (if exists) — last 3 recommendations | Previous suggestions to avoid repetition | **Adaptation rules:** - Directory names adapt to domain vocabulary (e.g., {vocabulary.inbox} instead of hardcoded "inbox") - Skip checks silently for directories that do not exist — do not report "ops/sessions/ not found" - A missing directory means that feature is not active, which is valid state **Signal collection commands:** ```bash # Inbox pressure (adapt path to vocabulary) INBOX_COUNT=$(find {vocabulary.inbox}/ -name "*.md" -maxdepth 2 2>/dev/null | wc -l | tr -d ' ') OLDEST_INBOX=$(find {vocabulary.inbox}/ -name "*.md" -maxdepth 2 -exec stat -f "%m %N" {} \; 2>/dev/null | sort -n | head -1) # Note count NOTE_COUNT=$(ls -1 {vocabulary.notes}/*.md 2>/dev/null | wc -l | tr -d ' ') # Pending observations OBS_COUNT=$(grep -rl '^status: pending' ops/observations/ 2>/dev/null | wc -l | tr -d ' ') # Pending tensions TENSION_COUNT=$(grep -rl '^status: pending\|^status: open' ops/tensions/ 2>/dev/null | wc -l | tr -d ' ') # Unmined sessions SESSION_COUNT=$(grep -rL '^mined: true' ops/sessions/*.md 2>/dev/null | wc -l | tr -d ' ') ``` --- ### Step 4: Classify by Consequence Speed Evaluate every signal against consequence speed — how fast does inaction degrade the system? | Speed | Signals | Threshold | Why This Priority | |-------|---------|-----------|-------------------| | **Session** | Inbox > 5 items, orphan notes (any), dangling links (any), 10+ pending observations, 5+ pending tensions, unprocessed sessions > 3 | Immediate — these degrade work quality right now | Orphans are invisible to traversal. Dangling links confuse navigation. Inbox pressure means lost ideas. Observation/tension thresholds mean the system is accumulating unprocessed friction. | | **Multi-session** | Pipeline queue backlog > 10, research gaps identified in goals, stale notes > 10, inbox items aging > 7 days, methodology captures > 5 in same category | Soon — these compound over days | Unfinished pipeline batches block downstream connections. Stale notes represent decaying knowledge. Aging inbox means capture is outpacing processing. | | **Slow** | Health check not run in 14+ days, {DOMAIN:topic map} oversized (>40 notes), link density below 2.0 average, low note count relative to time | Background — annoying but not blocking | These are maintenance tasks. Important for long-term health but not urgent. | **Threshold rule:** 10+ pending observations OR 5+ pending tensions is ALWAYS session-priority. Recommend {DOMAIN:rethink} in this case. **Signal interaction rules:** - Task stack items ALWAYS override automated recommendations (user-set priorities beat system-detected urgency) - Multiple session-priority signals: pick the one with highest impact (most items affected) - If inbox pressure AND queue backlog: recommend reducing inbox first (pipeline needs input before it can process) --- ### Step 5: Generate Recommendation Select the SINGLE most valuable action. The recommendation must be specific enough to execute immediately — a concrete command invocation, not a vague suggestion. **Priority cascade:** #### 1. Task Stack First If `ops/tasks.md` has open items, recommend from the task stack. User-set priorities override all automated recommendations because: - The user has context the system does not - Ignoring explicit priorities erodes trust - Task stack items represent deliberate decisions, not automated detection Format: Recommend the specific task with context about why it was in the stack. #### 1.5. Session-Priority Maintenance Tasks Read queue for maintenance tasks with `priority: "session"` and `status: "pending"`. These represent vault health conditions that degrade THIS session. Pick the highest-impact one: - orphan_notes: "{N} notes invisible to traversal" - dangling_links: "{N} broken links confusing navigation" - inbox_pressure: "{N} items aging in inbox" Recommend the `action` field from the queue entry. #### 2. Session-Priority Signals If no task stack items, pick the highest-impact session-priority signal: | Signal | Recommendation | Rationale Template | |--------|---------------|-------------------| | Dangling links / orphans | /health or specific fix command | "You have [N] orphan notes invisible to traversal. Connecting them increases graph density and retrieval quality." | | 10+ observations or 5+ tensions | /{DOMAIN:rethink} | "[N] pending observations have accumulated. Pattern detection requires processing this backlog to evolve the system." | | Inbox > 5 items | /{DOMAIN:reduce} [specific file] | "Your inbox has [N] items (oldest: [age]). [File X] has the highest connection potential based on [reason]." | | Unprocessed sessions > 3 | /remember --mine-sessions | "[N] sessions have uncaptured friction patterns. Mining them prevents methodology regressions." | **When recommending inbox processing:** Choose the specific inbox item that aligns best with current goals or has the most connection potential to existing notes. Recommend a concrete file, not "process some inbox." #### 3. Multi-Session Signals If no session-priority items: | Signal | Recommendation | Rationale Template | |--------|---------------|-------------------| | Queue backlog > 10 | /ralph [N] | "[N] pipeline tasks are pending. Your newest {DOMAIN:notes} lack connections, which means they can't participate in synthesis." | | Stale notes > 10 | /{DOMAIN:reweave} [specific note] | "[N] notes haven't been touched since [date]. [Note X] has the most connections and would benefit most from updating." | | Research gaps | /{DOMAIN:reduce} [file aligned with goals] | "Your goals mention [topic] but your graph has few notes there. [Inbox item] addresses this gap." | | Methodology convergence | /{DOMAIN:rethink} | "[N] methodology captures in the [category] area suggest a pattern worth elevating." | **When recommending reweaving:** Choose the most-connected stale note (highest link density + oldest modification). Reweaving high-connectivity notes has the highest ripple effect. #### 4. Slow Signals If nothing pressing: | Signal | Recommendation | Rationale Template | |--------|---------------|-------------------| | No recent health check | /health | "Last health check was [date]. Running one now catches structural issues before they compound." | | Topic map oversized | Restructuring suggestion | "[Topic map X] has [N] notes. Splitting into sub-topic-maps improves navigation and reduces cognitive load." |
GitHubで見る
この SKILL.md は非常に大きいため、SkillsMP では最初のセクションだけを表示しています。 GitHubで見る