{
  "id": "wakatime",
  "name": "WakaTime",
  "homepage": "https://wakatime.com",
  "description": "Command line interface used by all WakaTime text editor plugins.",
  "icon": "SimpleIcons:wakatime",
  "executables": [
    "wakatime-cli",
    "wakatime"
  ],
  "dotfiles": {
    "paths": [
      "~/.wakatime.cfg"
    ],
    "exclude": [
      "~/.wakatime/",
      "~/.wakatime.bdb",
      "~/.wakatime.db",
      "~/.wakatime.log"
    ],
    "secret": [],
    "side_effect": false,
    "secret_paths": [
      {
        "file": "~/.wakatime.cfg",
        "match": {
          "prefix": [
            "api_key"
          ]
        }
      }
    ],
    "machine_lines": [
      {
        "file": "~/.wakatime.cfg",
        "match": {
          "prefix": [
            "hostname"
          ]
        },
        "scope": "backup"
      }
    ]
  },
  "commands": {
    "format": 1,
    "label": "Send a heartbeat",
    "description": "Log one heartbeat for a file, domain, URL or app, or print today's total. Config-file editing, extra-heartbeats on stdin and the deprecated flag spellings are left out.",
    "quality": "ai-draft",
    "parser": {
      "end_of_options": "--",
      "interleave": "permute",
      "long_equals": true,
      "short_attached": false,
      "short_bundles": false
    },
    "source": [
      {
        "id": "source",
        "kind": "help",
        "url": "https://raw.githubusercontent.com/wakatime/wakatime-cli/HEAD/cmd/root.go",
        "revision": "HEAD 2026-10-27",
        "evidence": "Flags (cobra names, used as --entity --entity-type --project --language --category --write --plugin --config --disable-offline --verbose --today):\nflags.String(\"alternate-project\", \"\", \"Optional alternate project name. Auto-detected project takes priority.\")\n\"category\",\n\"Category of this heartbeat activity. Can be \\\"coding\\\", \\\"ai coding\\\",\"+\n\"entity\",\n\"Absolute path to file for the heartbeat. Can also be a url, domain or app when --entity-type is not file.\",\n\"entity-type\",\n\"Entity type for this heartbeat. Can be \\\"file\\\", \\\"domain\\\", \\\"url\\\", or \\\"app\\\". Defaults to \\\"file\\\".\",\nflags.String(\"language\", \"\", \"Optional language name. If valid, takes priority over auto-detected language.\")\nflags.String(\"plugin\", \"\", \"Optional text editor plugin name and version for User-Agent header.\")\nflags.String(\"project\", \"\", \"Override auto-detected project.\"+\nflags.Float64(\"time\", 0, \"Optional floating-point unix epoch timestamp. Uses current time by default.\")\nflags.Bool(\"today\", false, \"Prints dashboard time for today, then exits.\")\nflags.Bool(\"verbose\", false, \"Turns on debug messages in log file, and sends diagnostics if a crash occurs.\")\nflags.Bool(\"version\", false, \"Prints the wakatime-cli version number, then exits.\")\nflags.Bool(\"write\", false, \"When set, tells api this heartbeat was triggered from writing to a file.\")\nflags.String(\"key\", \"\", \"Your wakatime api key; uses api_key from the config file by default.\")\nflags.String(\"config\", \"\", \"Optional config file.\nflags.Bool(\"disable-offline\", false, \"Disables offline time logging instead of queuing logged time.\")\n"
      }
    ],
    "field": [
      {
        "id": "entity",
        "label": "Entity",
        "description": "Absolute path to a file, or a URL, domain or app when the type is not file.",
        "type": "string",
        "option": [
          "--entity"
        ],
        "sources": [
          "source"
        ]
      },
      {
        "id": "entity_type",
        "label": "Entity type",
        "type": "enum",
        "choices": [
          {
            "value": "file",
            "label": "File"
          },
          {
            "value": "domain",
            "label": "Domain"
          },
          {
            "value": "url",
            "label": "URL"
          },
          {
            "value": "app",
            "label": "App"
          }
        ],
        "option": [
          "--entity-type"
        ],
        "sources": [
          "source"
        ]
      },
      {
        "id": "project",
        "label": "Project",
        "description": "Override the auto-detected project.",
        "type": "string",
        "option": [
          "--project"
        ],
        "sources": [
          "source"
        ]
      },
      {
        "id": "language",
        "label": "Language",
        "type": "string",
        "option": [
          "--language"
        ],
        "sources": [
          "source"
        ]
      },
      {
        "id": "category",
        "label": "Category",
        "type": "string",
        "option": [
          "--category"
        ],
        "suggestions": [
          {
            "value": "coding",
            "label": "Coding"
          },
          {
            "value": "debugging",
            "label": "Debugging"
          },
          {
            "value": "building",
            "label": "Building"
          },
          {
            "value": "code reviewing",
            "label": "Code reviewing"
          },
          {
            "value": "writing docs",
            "label": "Writing docs"
          }
        ],
        "sources": [
          "source"
        ]
      },
      {
        "id": "write",
        "label": "Triggered by a write",
        "type": "boolean",
        "option": [
          "--write"
        ],
        "sources": [
          "source"
        ]
      },
      {
        "id": "plugin",
        "label": "Plugin name and version",
        "type": "string",
        "option": [
          "--plugin"
        ],
        "sources": [
          "source"
        ]
      },
      {
        "id": "config",
        "label": "Config file",
        "type": "path",
        "path": {
          "kind": "file",
          "role": "input"
        },
        "option": [
          "--config"
        ],
        "sources": [
          "source"
        ]
      },
      {
        "id": "disable_offline",
        "label": "Disable offline queue",
        "type": "boolean",
        "option": [
          "--disable-offline"
        ],
        "sources": [
          "source"
        ]
      },
      {
        "id": "verbose",
        "label": "Verbose logging",
        "type": "boolean",
        "option": [
          "--verbose"
        ],
        "sources": [
          "source"
        ]
      },
      {
        "id": "today",
        "label": "Print today's time",
        "type": "boolean",
        "option": [
          "--today"
        ],
        "sources": [
          "source"
        ]
      }
    ],
    "task": [
      {
        "id": "heartbeat",
        "label": "Send a file heartbeat",
        "fields": [
          "entity",
          "project",
          "language",
          "write",
          "plugin"
        ],
        "required": [
          "entity"
        ]
      },
      {
        "id": "today",
        "label": "Show today's time",
        "fields": [
          "today"
        ],
        "required": [
          "today"
        ],
        "set": {
          "today": [
            true
          ]
        }
      }
    ],
    "group": [
      {
        "id": "basic",
        "label": "Basic",
        "fields": [
          "entity",
          "entity_type",
          "project",
          "language",
          "category",
          "write",
          "today"
        ]
      },
      {
        "id": "advanced",
        "label": "Advanced",
        "fields": [
          "plugin",
          "config",
          "disable_offline",
          "verbose"
        ]
      }
    ]
  }
}
