{
 "kind": "app",
 "id": "app:thth",
 "url": "https://headlesson.com/apps/thth",
 "name": "THTH",
 "one_liner": "CLI to research, post, schedule and review your own social accounts.",
 "description": "THTH provides command line operations for Threads, Bluesky, Mastodon and X. Its bundled MCP server calls the same CLI. Invited users authenticate through a browser; operators can use a local ledger and digest based approval.",
 "made_by_headlesson_operator": true,
 "interfaces": [
  {
   "kind": "cli",
   "name": "thth",
   "install": "pip install thth",
   "verify": "thth --help",
   "auth": "thth login opens a browser; the account owner supplies authorization.",
   "docs": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md"
  },
  {
   "kind": "mcp-stdio",
   "name": "THTH bundled MCP (thth-mcp)",
   "install": "pip install thth",
   "verify": "unknown",
   "auth": "A person completes thth login; MCP tools call the same thth CLI and use its locally stored key without giving it to the assistant.",
   "docs": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md"
  }
 ],
 "tests": [
  {
   "record_id": "test:tchhuqa",
   "url": "https://headlesson.com/tests/tchhuqa",
   "date": "2026-10-11",
   "version": "3.15.0",
   "status": "partial"
  }
 ],
 "latest_test_conclusion": "On 2026-10-11, the headlesson operator ran this lesson with THTH 3.15.0 (macOS 26.5.2 (25F84) arm64; Python 3.12.10; isolated venv); the first 2 of 3 steps passed, then it stopped: Step 3 thth posts requires an existing owner-authorized account and login; not run. The final Next step is advice and was not run. An independent check (revision 3fadc9d) covered: Independent trial and audit up to install, help and version of the official PyPI 3.15.0 release. Its limits: Bounded to the stopping point. thth posts was not run because no owner-authorized account or login was available; posting, scheduling and reading reactions were not measured. This is the operator's own run, not a vendor claim.",
 "independent_check": {
  "state": "recorded",
  "revision": "3fadc9d6215b5a823c490dfc86f16d93dac683b2",
  "scope": "Independent trial and audit up to install, help and version of the official PyPI 3.15.0 release.",
  "limits": "Bounded to the stopping point. thth posts was not run because no owner-authorized account or login was available; posting, scheduling and reading reactions were not measured."
 },
 "lesson": {
  "goal": "Inspect posts in an existing owner-authorized account without publishing.",
  "steps": [
   "pip install thth",
   "thth --help",
   "thth posts <ACCOUNT>"
  ],
  "next_advice": "Next: After approval of the account, text, destination and future time, use thth schedule <confirmed-account> --text \"<text>\" --at <future-ISO-time-with-offset>. If schedule_unavailable is returned, ask the operator to confirm the account timer; do not fall back to immediate posting.",
  "cautions": {
   "note": "These notes come from the lesson. Some describe failures seen in tests; others are general cautions. Each one is not a separately tested result.",
   "items": [
    "The account owner must first complete the invitation and browser-based thth login. Replace <ACCOUNT> with that existing account name.",
    "Invited-user login requires browser authorization by the account owner.",
    "Posting and scheduling affect external social accounts and require separate user authorization.",
    "Confirm: Check the invited account, permissions, timer, target and future time, then inspect the scheduling result. The like/repost README inconsistency does not settle scheduling availability."
   ]
  },
  "note": "This is the current lesson. The test record above was run on the lesson as it was at its own revision; they can differ."
 },
 "mcp_get": "headlesson_get id=\"app:thth\" sections [\"lesson\",\"gotchas\"]",
 "axes": {
  "license": {
   "value": "MIT",
   "checked": "2026-10-09",
   "certainty": "primary",
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/LICENSE",
   "by": "official"
  },
  "open_source": {
   "value": true,
   "checked": "2026-10-09",
   "certainty": "inferred",
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "by": "editorial"
  },
  "pricing": {
   "value": "unknown",
   "checked": null,
   "certainty": null,
   "source": null,
   "by": null
  },
  "has_human_gui": {
   "value": "optional",
   "checked": "2026-10-09",
   "certainty": "inferred",
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "by": "editorial"
  },
  "non_interactive": {
   "value": false,
   "checked": "2026-10-09",
   "certainty": "inferred",
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "by": "editorial"
  },
  "machine_output": {
   "value": true,
   "checked": "2026-10-09",
   "certainty": "primary",
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/docs/usage.en.md",
   "by": "official"
  },
  "local_mcp": {
   "value": true,
   "checked": "2026-10-09",
   "certainty": "primary",
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "by": "official"
  },
  "remote_mcp": {
   "value": "unknown",
   "checked": null,
   "certainty": null,
   "source": null,
   "by": null
  },
  "cli": {
   "value": true,
   "checked": "2026-10-09",
   "certainty": "primary",
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "by": "official"
  },
  "rest_api": {
   "value": "unknown",
   "checked": null,
   "certainty": null,
   "source": null,
   "by": null
  },
  "auth": {
   "value": "local-login",
   "checked": "2026-10-09",
   "certainty": "primary",
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "by": "official"
  },
  "self_hostable": {
   "value": true,
   "checked": "2026-10-09",
   "certainty": "primary",
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "by": "official"
  },
  "embeds_llm": {
   "value": "unknown",
   "checked": null,
   "certainty": null,
   "source": null,
   "by": null
  },
  "refusal_contract": {
   "value": true,
   "checked": "2026-10-09",
   "certainty": "primary",
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "by": "official"
  },
  "audit_log": {
   "value": true,
   "checked": "2026-10-09",
   "certainty": "primary",
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "by": "official"
  },
  "last_release": {
   "value": "2026-10-09",
   "checked": "2026-10-09",
   "certainty": "primary",
   "source": "https://pypi.org/pypi/thth/json",
   "by": "official"
  },
  "ja_support": {
   "value": true,
   "checked": "2026-10-09",
   "certainty": "primary",
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "by": "official"
  }
 },
 "sources": [
  {
   "fields": [
    "/name",
    "/one_liner",
    "/lesson/cautions/items/0",
    "/lesson/cautions/items/1",
    "/interfaces/0/kind",
    "/interfaces/0/name",
    "/interfaces/0/install",
    "/interfaces/0/verify",
    "/interfaces/0/auth",
    "/interfaces/0/docs",
    "/axes/local_mcp",
    "/axes/cli",
    "/axes/auth",
    "/axes/self_hostable",
    "/axes/refusal_contract",
    "/axes/audit_log",
    "/axes/ja_support"
   ],
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "checked": "2026-10-09",
   "certainty": "primary",
   "by": "official"
  },
  {
   "fields": [
    "/description",
    "/lesson/steps/0",
    "/lesson/steps/1",
    "/lesson/steps/2",
    "/interfaces/1/name",
    "/interfaces/1/install",
    "/interfaces/1/auth",
    "/interfaces/1/docs"
   ],
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "checked": "2026-10-09",
   "certainty": "primary",
   "by": "editorial"
  },
  {
   "fields": [
    "/lesson/goal",
    "/lesson/cautions/items/2"
   ],
   "source": "headlesson editorial judgement",
   "checked": "2026-10-09",
   "certainty": "inferred",
   "by": "editorial"
  },
  {
   "fields": [
    "/lesson/next_advice",
    "/lesson/cautions/items/3"
   ],
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/docs/導入_招待されたら.md",
   "checked": "2026-10-10",
   "certainty": "inferred",
   "by": "editorial"
  },
  {
   "fields": [
    "/interfaces/1/kind"
   ],
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/server.json",
   "checked": "2026-10-09",
   "certainty": "primary",
   "by": "official"
  },
  {
   "fields": [
    "/axes/license"
   ],
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/LICENSE",
   "checked": "2026-10-09",
   "certainty": "primary",
   "by": "official"
  },
  {
   "fields": [
    "/axes/open_source",
    "/axes/has_human_gui",
    "/axes/non_interactive"
   ],
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/README.md",
   "checked": "2026-10-09",
   "certainty": "inferred",
   "by": "editorial"
  },
  {
   "fields": [
    "/axes/machine_output"
   ],
   "source": "https://github.com/aokings/thth/blob/ecfba37678d5244c8f423e9a9924aef118b0258b/docs/usage.en.md",
   "checked": "2026-10-09",
   "certainty": "primary",
   "by": "official"
  },
  {
   "fields": [
    "/axes/last_release"
   ],
   "source": "https://pypi.org/pypi/thth/json",
   "checked": "2026-10-09",
   "certainty": "primary",
   "by": "official"
  }
 ],
 "primary_record": "Test results here are the operator's own past lesson trials (legacy). They are not claimed to meet level L1 of run-task-contract/0.1.0.",
 "relations": [],
 "relations_not_published": 8,
 "cite": "headlesson app:thth: see test record test:tchhuqa (https://headlesson.com/tests/tchhuqa).",
 "page_updated": "2026-10-13"
}
