文件内容
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*