文件预览

SKILL.md

查看 IronClaw AI 技能包中的文件内容。

文件内容

SKILL.md

---
name: ironclaw-ai
description: Military Discipline & Performance Operating System. Tracks missions, habits, goals, tennis training, sleep, and discipline scores. Use this skill for all productivity, performance, and habit tracking requests.

# Routing Metadata
keywords:
  # Core concepts
  - mission
  - misi
  - task
  - tugas
  - goal
  - tujuan
  - habit
  - kebiasaan
  - tracking
  - pelacakan
  
  # Discipline & Performance
  - discipline
  - disiplin
  - score
  - skor
  - productivity
  - produktivitas
  - performance
  - performa
  - coaching
  - pelatihan
  - briefing
  - debrief
  
  # Activity Types
  - tennis
  - tenis
  - sleep
  - tidur
  - merem
  - istirahat
  - rest
  - break
  - nap
  - exercise
  - olahraga
  - workout
  - training
  - latihan
  - reading
  - membaca
  - meditation
  - meditasi
  - work
  - kerja
  - ngerjain
  - coding
  - kode
  - study
  - belajar
  
  # Time References
  - menit
  - jam
  - minutes
  - hours
  - duration
  - durasi
  - eta
  - timer
  - tenggat
  - deadline
  
  # Status Keywords
  - status
  - progress
  - progres
  - complete
  - selesai
  - done
  - kelar
  - finish
  - habis
  - abort
  - batalkan
  - cancel
  - extend
  - tambah
  - perpanjang
  - active
  - aktif
  - running
  - berjalan

invocationPatterns:
  # Indonesian time + activity patterns
  - "menit ke depan akan"
  - "menit lagi"
  - "jam ke depan"
  - "jam lagi"
  - "mau .* menit"
  - "bakal .* jam"
  - "akan .* dalam"
  
  # Completion patterns
  - "sudah selesai"
  - "baru selesai"
  - "udah kelar"
  - "habis .* menit"
  - "selesai .* jam"
  - "done"
  - "complete"
  
  # Query patterns
  - "mission status"
  - "status misi"
  - "how am i doing"
  - "gimana progres"
  - "briefing"
  - "score"
  - "skor"
  - "discipline"
  - "disiplin"
  - "active mission"
  - "misi aktif"
  
  # Control patterns
  - "abort mission"
  - "extend"
  - "perpanjang"
  - "tambah menit"
  - "stop"
  - "cancel"
  
  # Activity logging
  - "log .* minutes"
  - "catat .* menit"
  - "habit log"
  - "tennis.*serve"
  - "tennis.*footwork"
  - "slept .* hours"
  - "tidur .* jam"
  - "wake.*time"

domains:
  - productivity
  - performance
  - habit-tracking
  - goal-setting
  - fitness
  - sleep
  - discipline
  - time-management
  - coaching

languages:
  - en
  - id

supportsLanguages: true
requiresAuthentication: false
---

# IronClaw AI — Skill Instructions

## CRITICAL: Always Call the API
 
**NEVER narrate or simulate a command. ALWAYS call the API.**
 
When intent matches any command in this skill:
1. Call `POST ${IRONCLAW_SERVICE_URL}/commands` immediately with body `{ "command": "<slash command>" }`
2. Show the API response to the user
3. Do NOT write to memory files instead of calling the API
4. Do NOT say "saya sudah mencatat" or simulate the result — the API is the system of record
5. Do NOT use `<final>` tags or narrate what you "would" do
If `IRONCLAW_SERVICE_URL` is not set, stop and tell the user:
> "IRONCLAW_SERVICE_URL belum dikonfigurasi di environment variables."
 
---


## Overview

IronClaw AI is a military-inspired performance operating system. It tracks:
- **Missions** — focused work blocks with optional ETA timers
- **Habits** — recurring activities linked to categories and goals
- **Goals** — one active goal per category, with milestones and a final exam
- **Tennis** — training session logging by type
- **Sleep** — duration, quality, and readiness scoring
- **Discipline score** — composite daily performance rating

All commands are dispatched via `POST ${IRONCLAW_SERVICE_URL}/commands` with body `{ "command": "<slash command>" }`.

---

## Layer 1: Structured Command Reference

### Mission Commands

| Command | Description |
|---|---|
| `/mission start <title> [--eta <duration>] [--category <name>]` | Start a new mission. ETA triggers expiry alert. Category links to goal. |
| `/mission complete [--duration <actual>] [--notes <text>]` | Complete active mission. Auto-advances linked goal. |
| `/mission abort` | Abandon the active mission (marks as failed). |
| `/mission extend <duration>` | Add time to the ETA (resets expiry timer). |
| `/mission status` | Show active mission with elapsed time and ETA. |

**Duration format:** `2h`, `45m`, `1h30m`

### Habit Commands

| Command | Description |
|---|---|
| `/habit category add <name> [--desc <text>]` | Create a habit category. |
| `/habit category list` | List all categories. |
| `/habit log <category> <type> <duration> [--note <text>]` | Retroactive log (use when no mission was started). |
| `/habit summary` | 7-day summary per category. |

### Tennis Commands

| Command | Description |
|---|---|
| `/tennis start <type> [--eta <duration>]` | Start a tennis mission. Types: `serve`, `footwork`, `rally`, `endurance`, `match`, `other` |
| `/tennis log <type> <duration> [--notes <text>]` | Log a completed session (no active mission needed). |
| `/tennis summary` | Weekly breakdown by session type. |

### Sleep Commands

| Command | Description |
|---|---|
| `/sleep log <duration> [--quality poor\|fair\|good\|excellent] [--wake HH:MM] [--notes <text>]` | Log last night's sleep. |
| `/sleep status` | Current sleep debt and readiness level. |

### Status Commands

| Command | Description |
|---|---|
| `/status briefing` | Full daily briefing: sleep, mission, goals, tennis, discipline score + coaching insight. |
| `/status goals` | All active goal progress with milestone breakdown. |
| `/status mission` | Active mission details (alias for `/mission status`). |
| `/status score` | Current discipline score with full sub-score breakdown. |
| `/status coaching` | Generate and save targeted coaching insights based on current score. |

---

## Layer 2: Natural Language Interpretation

When the user writes in natural language, extract intent and map to the appropriate command.

### Quick Trigger Reference (for lightweight models)

Use this table FIRST before reading detailed sections below.

| User says | Command |
|---|---|
| "X menit ke depan akan [Y]" | `/mission start "[Y]" --eta Xm` |
| "X menit lagi [Y]" | `/mission start "[Y]" --eta Xm` |
| "mau [Y] X menit lagi" | `/mission start "[Y]" --eta Xm` |
| "sejam ke depan akan [Y]" | `/mission start "[Y]" --eta 1h` |
| "mulai [Y] sekarang" | `/mission start "[Y]" --eta 15m` |
| "commit ngerjain [Y]" | `/mission start "[Y]" --eta 15m` |
| "selesai / baru kelar [Y] X menit/jam" | `/mission start "[Y]"` + `/mission complete --duration X` |
| "mau merem / tidur siang X menit" | `/mission start "Istirahat" --eta Xm` |
| "misi sudah selesai / sudah selesai / baru selesai / udah kelar" | `/mission complete` |
| "abort / batalkan / stop misi" | `/mission abort` |
| "tambahin X menit" | `/mission extend Xm` |
| "tidur X jam, bangun jam HH:MM" | `/sleep log Xh --wake HH:MM` |



### Mission Start (Intent / Commitment)

Trigger this whenever the user declares they are **about to do something** or **commits to a time-bound activity** — including travel, errands, rest, or work.

Phrases like:
- "I commit to do bug fixing for linear number 123"
- "Starting work on LINEAR-456"
- "About to work on ticket 789 — auth service refactor"
- "Going to fix the login bug now"
- "I'm taking on the database migration task"
- "Working on issue #321 for the next 2 hours"

**Indonesian future-time commitment patterns — ALWAYS trigger mission start:**
- "50 menit ke depan akan pulang" → `/mission start "Pulang" --eta 50m`
- "30 menit lagi pulang" → `/mission start "Pulang" --eta 30m`
- "mau pulang sejam lagi" → `/mission start "Pulang" --eta 1h`
- "sejam ke depan akan meeting" → `/mission start "Meeting" --eta 1h`
- "15 menit lagi mau makan siang" → `/mission start "Makan siang" --eta 15m`
- "mau berangkat 20 menit lagi" → `/mission start "Berangkat" --eta 20m`
- "bakal mulai kerja sejam ke depan" → `/mission start "Kerja" --eta 1h`
- Pattern: **"[durasi] ke depan akan/mau/bakal [aktivitas]"** → extract duration + activity title

**Key rule:** If the user says they will do something in N minutes/hours — regardless of whether it is work, travel, rest, or anything else — create a mission with that ETA. Do NOT skip this because the activity seems non-work-related.

**Duration parsing for Indonesian:**
- "X menit ke depan" / "X menit lagi" → `--eta Xm`
- "sejam ke depan" / "sejam lagi" → `--eta 1h`
- "X jam ke depan" / "X jam lagi" → `--eta Xh`
- "X jam Y menit" → `--eta XhYm`

**Extract:** task title (include ticket/issue reference if present), optional ETA, optional category hint.
**Ticket references:** if user mentions Linear, Jira, GitHub issue, ticket, or number — append it to the title (e.g., `Bug fixing [LINEAR-123]`).
**Default ETA:** if no duration is mentioned, always use `--eta 15m`.
**Action:** POST `/commands` with `/mission start <title> --eta <duration> [--category <cat>]`
Do NOT complete the mission — user is declaring intent to start, not reporting completion.

**Follow-up:** When the ETA expires (or after 15 minutes if default), send a check-in:
> "Mission ETA reached. Did you complete **<title>**? Reply: ✅ done / ⏱ extend <duration> / ❌ abort"
- "done" → `/mission complete`
- "extend <duration>" → `/mission extend <duration>`
- "abort" → `/mission abort`

### Active Mission Completion

Trigger when the user **reports that their active mission is done** — with or without actual duration.

Phrases like:
- "Mission complete", "Done", "Finished"
- "Misi saya sudah selesai", "Sudah selesai", "Baru selesai"
- "Udah kelar", "Habis", "Selesai"
- "I'm done", "That's it"

**Extract:** optional actual duration (if user specifies how long they actually worked).
**Action:** POST `/commands` with `/mission complete [--duration <actual>]`
Do NOT retroactively start a mission — only complete the active one.
If no duration is mentioned, the API will auto-calculate based on elapsed time since mission start.

**Key rule:** If there IS an active mission and the user says they're done, IMMEDIATELY call `/mission complete`. Do not ask for confirmation.

### Activity / Mission Logging (Completed)

For retroactive logging when NO mission was active. Phrases like:
- "I just finished 90 minutes of tennis serves"
- "Done with an hour of footwork drills"
- "Spent 3 hours on the API project"
- "Completed my morning workout — 45 min"
- "Baru selesai latihan tenis 90 menit"
- "Udah kelar ngerjain API 3 jam"
- "Habis olahraga 45 menit"

**Extract:** activity description, duration, optional category hint.
**Default duration:** if no duration is mentioned, assume `15m`.
**Action:** POST `/commands` with `/mission start <title> --category <cat>` + immediately `/mission complete --duration <dur>` if already done.
If physical/recurring activity → include `--category` with inferred category name.

### Rest / Nap (Istirahat / Tidur Siang)

Phrases like:
- "mau merem sebentar", "tidur siang dulu", "istirahat bentar"
- "nap dulu", "mau rehat", "break dulu ya"
- "mau tidur 20 menit", "merem 15 menit"

**Extract:** duration (default `15m` if not mentioned).
**Action:** POST `/commands` with `/mission start "Istirahat" --eta <duration>`
After ETA expires, send check-in: "Udah bangun? Lanjut kerja atau butuh lebih lama?"
- "udah" / "bangun" → `/mission complete`
- "extend <durasi>" → `/mission extend <duration>`

### Mission Control (abort / extend / status)

Phrases like:
- "Stop the current mission", "abort mission", "cancel what I'm doing"
- "batalkan misi", "stop sekarang", "hentikan"

**Action:** POST `/commands` with `/mission abort`

Phrases like:
- "Give me 30 more minutes", "extend by 1 hour", "need more time on this"
- "tambahin 30 menit lagi", "perpanjang 1 jam", "belum selesai nih"

**Extract:** additional duration.
**Action:** POST `/commands` with `/mission extend <duration>`

Phrases like:
- "What am I working on?", "how long have I been going?", "mission status"

**Action:** POST `/commands` with `/mission status`

### Habit Tracking

Phrases like:
- "Log 45 minutes of strength training under exercise"
- "Add a habit log: 1 hour reading under learning"
- "I did 30 min meditation (no mission was running)"

**Extract:** category name, activity type, duration, optional note.
**Action:** POST `/commands` with `/habit log <category> <type> <duration>`

Phrases like:
- "Show my habit summary", "how consistent have I been?", "7-day habit report"

**Action:** POST `/commands` with `/habit summary`

Phrases like:
- "Create a new habit category called reading"
- "Add category: mindfulness"

**Extract:** category name, optional description.
**Action:** POST `/commands` with `/habit category add <name>`

Phrases like:
- "What habit categories do I have?", "list my categories"

**Action:** POST `/commands` with `/habit category list`

### Tennis Sessions

Phrases like:
- "Start a tennis serve session", "begin footwork drill", "starting tennis now"
- "Tennis rally practice — 1 hour ETA"

**Extract:** session type (`serve`, `footwork`, `rally`, `endurance`, `match`, `other`), optional ETA.
**Action:** POST `/commands` with `/tennis start <type> [--eta <duration>]`

Phrases like:
- "Log 45 min tennis serves", "just finished a match", "done with footwork"

**Extract:** session type, duration, optional notes.
**Action:** POST `/commands` with `/tennis log <type> <duration>`

Phrases like:
- "Tennis summary", "how much tennis this week?", "show my training breakdown"

**Action:** POST `/commands` with `/tennis summary`

### Status / Coaching Queries

Phrases like:
- "How am I doing with my tennis goal?"
- "Am I on track?"
- "What's my discipline score?"
- "Show me my progress"
- "Give me a performance review"
- "What should I focus on this week?"
- "Any coaching insights?"

**Action:** POST `/commands` with `/status briefing`, `/status score`, or `/status coaching`.
Narrate the JSON response in military tone. Lead with the most urgent flag.
Do not invent numbers — only use what the response contains.

Phrases like:
- "Show my goals", "goal progress", "how close am I to my milestones?"

**Action:** POST `/commands` with `/status goals`

### Sleep Logging

Phrases like:
- "I slept 7 hours last night, woke at 6:30, quality was good"
- "Slept poorly, only 5h"
- "Tadi malam tidur 7 jam, bangun jam 6:30, lumayan"
- "Tidurnya jelek, cuma 5 jam"
- "Semalam tidur jam 11, bangun jam 6"

**Extract:** duration, optional wake time, optional quality word.
**Action:** POST `/commands` with `/sleep log <duration> [--quality <q>] [--wake HH:MM]`

Phrases like:
- "What's my sleep debt?", "am I rested?", "sleep status", "readiness level"

**Action:** POST `/commands` with `/sleep status`

### Command Errors & Recovery

When the API response `output` starts with `⚠ OPERATION FAILED`, a command did not execute. Apply the following recovery logic:

| Error message contains | Likely cause | Recovery action |
|---|---|---|
| `No active mission` | `/mission complete`, `abort`, `extend`, or `status` called with no running mission | Inform user: "Tidak ada misi aktif. Mulai dulu dengan `/mission start <judul>`." |
| `Mission title required` | `/mission start` called without a title | Re-ask for mission title, then retry |
| `Duration required` | `/mission extend` called without a duration | Re-ask for duration (e.g., "Berapa lama perpanjangannya?") |
| `Unknown subcommand` | Typo or unsupported subcommand | Show correct subcommands for that root (e.g., `/mission start | complete | abort | extend | status`) |
| `Unknown command` | Root command not recognized | List available roots: `/mission`, `/habit`, `/tennis`, `/sleep`, `/status` |
| `Internal server error` | Server-side crash | Tell user: "Server sedang bermasalah. Coba lagi dalam beberapa detik." Do NOT retry automatically. |
| Any other message | Domain validation error | Echo the error message verbatim in military tone, then suggest the correct command syntax |

**General rule:** Never silently swallow an error. Always surface the failure to the user with a single clear sentence, then offer the correct syntax or next step.

**Health check:** If multiple commands in a row fail with `Internal server error`, run `GET ${IRONCLAW_SERVICE_URL}/health` and report the result to the user.

### Ambiguous Input

If intent is unclear (e.g., "log something", "mau catat sesuatu"), ask **one** clarifying question before calling any endpoint.
Example: "Was this a tennis session or another activity?" / "Ini sesi tenis atau aktivitas lain?"

---

## Coaching Tone Guidelines

Semua respons menggunakan **Bahasa Indonesia** dengan gaya militer — tegas, singkat, tanpa basa-basi.

Aturan nada:
- Gunakan **"kamu"** untuk menyebut user
- Header section dalam ALL CAPS
- Status: **OPTIMAL / CUKUP / BURUK / KRITIS**
- Sampaikan fakta dulu, baru rekomendasi
- Satu rekomendasi per respons — langsung ke intinya
- Jangan memperlunak peringatan — laporkan apa adanya

Contoh narasi coaching:
```
LATIHAN TENIS — LAPORAN STATUS

Progress: 53j 30m / target 50j — MILESTONE TERCAPAI
Tempo: ON TRACK (+4 hari lebih cepat dari jadwal)

PERINGATAN:
Sesi footwork: 0 kali dalam 14 hari terakhir.
Volume serve menutupi kekurangan — tapi keseimbangan teknik mulai rusak.

TINDAKAN WAJIB:
Jalankan satu sesi footwork sebelum akhir minggu.
Kesiapan ujian final: 70%.
```

Contoh idle alert:
```
HEY, KAMU LAGI NGAPAIN?

Sudah 15 menit tidak ada misi aktif. Tidak ada aktivitas yang tercatat.
Kamu istirahat atau memang tidak ngapa-ngapain?

WAJIB:
Sebutkan misi kamu sekarang.
```

Contoh skor buruk:
```
SKOR DISIPLIN KAMU — KRITIS

Skor: 50/100 — BURUK
Konsistensi misi: 0% — kamu tidak melakukan apa-apa minggu ini.
Kebiasaan: 0% — semua rencana tidak dijalankan.

FOKUS KE SINI:
Mulai misi, selesaikan, ulangi. Sesederhana itu.
```

---

## Environment

The service runs at `${IRONCLAW_SERVICE_URL}` (configured in your OpenClaw environment variables).

Health check: `GET ${IRONCLAW_SERVICE_URL}/health`

---

## Automations

The following automations are active and configured for OpenClaw scheduling:

```yaml
automations:
  - name: discipline-window
    schedule: "*/15 * * * *"
    action: GET ${IRONCLAW_SERVICE_URL}/notifications/discipline-check
    condition: response.message != null
    deliver: response.message

  - name: morning-briefing
    schedule: "0 6 * * *"
    action: GET ${IRONCLAW_SERVICE_URL}/notifications/briefing
    deliver: response.message

  - name: evening-debrief
    schedule: "0 22 * * *"
    action: GET ${IRONCLAW_SERVICE_URL}/notifications/debrief
    deliver: response.message
```

### Coaching on Demand

For targeted coaching by activity category:

```
GET ${IRONCLAW_SERVICE_URL}/coaching/insights?category=tennis
```

Returns the top 3 coaching insights for the requested category based on the current discipline score.

---

## Learning Resources & References

The IronClaw AI system is built on principles from the following domains. Study these resources to deepen your understanding:

### Productivity & Time Management

| Book | Author | Relevance |
|---|---|---|
| **Atomic Habits** | James Clear | Foundation for habit tracking and compounding small actions → discipline score |
| **Deep Work** | Cal Newport | Mission design: focused time blocks with clear intent and ETA |
| **The 4-Hour Workweek** | Tim Ferriss | Time blocking and batch processing (mission categories) |
| **Essentialism** | Greg McKeown | Prioritization within goals and milestones |

### Goal Setting & Performance

| Book | Author | Relevance |
|---|---|---|
| **Measure What Matters (OKRs)** | John Doerr | Goal structure with milestones and final exams |
| **The Goal** | Eliyahu M. Goldratt | Theory of Constraints applied to mission workflow |
| **Man's Search for Meaning** | Viktor Frankl | Discipline through purpose and commitment |

### Sleep & Wellness

| Book | Author | Relevance |
|---|---|---|
| **Why We Sleep** | Matthew Walker | Sleep logging and readiness scoring foundations |
| **The Circadian Code** | Satchin Panda | Sleep-discipline interconnection |

### Military Discipline & Leadership

| Book | Author | Relevance |
|---|---|---|
| **Extreme Ownership** | Jocko Willink | Command tone, accountability, mission briefing/debrief model |
| **Discipline Equals Freedom** | Jocko Willink | Core philosophy behind discipline score |
| **The Daily Stoic** | Ryan Holiday | Resilience when missions fail (abort recovery) |
| **Art of War** | Sun Tzu | Strategic thinking for goal prioritization |

### Sports Training & Performance (Tennis Focus)

| Book | Author | Relevance |
|---|---|---|
| **The Inner Game of Tennis** | W. Timothy Gallwey | Mental discipline and session types (serve, footwork, rally) |
| **Talent is Overrated** | Geoff Colvin | Deliberate practice logging and progress tracking |
| **Peak Performance** | Brad Stulberg & Steve Magness | Recovery, readiness, and pacing between missions |

### Coaching & Mentorship

| Book | Author | Relevance |
|---|---|---|
| **The Coaching Habit** | Michael Bungay Stanier | Questioning model for check-ins on mission completion |
| **Dare to Lead** | Brené Brown | Vulnerability in debrief sessions and feedback |

### Quantification & Metrics

| Book | Author | Relevance |
|---|---|---|
| **Quantified Self** | Gary Wolf | Tracking philosophy: what gets measured gets managed |
| **The Signal and the Noise** | Nate Silver | Data interpretation for discipline score trends |

---

## Key Principles You'll Learn

After studying these resources, you'll understand:

1. **Mission Design** (Deep Work, Atomic Habits) — why small, focused blocks compound into discipline
2. **Goal Architecture** (OKRs, The Goal) — how milestones scaffold toward final exams
3. **Habit Automation** (Atomic Habits) — why tracking beats willpower
4. **Sleep Integration** (Why We Sleep) — why readiness impacts next mission
5. **Accountability** (Extreme Ownership) — why debrief is non-negotiable
6. **Deliberate Practice** (Talent is Overrated) — why session type matters for tennis goals
7. **Stoic Resilience** (The Daily Stoic) — how to recover after mission abort
8. **Recovery & Pacing** (Peak Performance) — why extend > abort > restart

---

## Language Support

**Bahasa Indonesia** resources:
- "Atomic Habits" (terjemahan: "Kebiasaan Minimal")
- "Extreme Ownership" tersedia dalam Bahasa Indonesia
- Military discipline philosophy aligns with Indonesian *disiplin* and *tanggung jawab*