{
  "name": "Both Hands",
  "description": "Both Hands is a build studio that helps companies bring AI into hybrid teams, so the technology and the people who do the work move as one. This file indexes the whole site: the studio's products and three free tools, an AI readiness check for an organisation, a check on a person's own AI journey, and a prompt that teaches the person's AI who they are. Each tool has a plain-text file written for an AI agent to run with the person.",
  "site": "https://both-hands.com",
  "urlsAreRelativeTo": "the origin this file was fetched from; site is the live address",
  "updated": "2026-10-26",
  "language": "en",
  "languages": [
    "en",
    "fr"
  ],
  "indexes": {
    "llms": "/llms.txt",
    "agent": "/agent.json"
  },
  "privacy": "/privacy",
  "products": [
    {
      "name": "Lantern",
      "url": "https://lantern.both-hands.com",
      "summary": "A curated library of skills, tools and better ways of working, read straight by your AI agent. Human-vetted, MCP-native, free tier."
    },
    {
      "name": "CortexMind",
      "url": "https://cortexmind.net",
      "summary": "Persistent, local-first memory your AI agents can actually find: episodic recall, re-ranked semantic search, MCP-native, entirely self-hosted."
    },
    {
      "name": "Wspr",
      "url": "https://getwspr.com",
      "summary": "On-device speech transcription for macOS, Windows and Linux. No cloud, no accounts, no tracking."
    }
  ],
  "submit": null,
  "submitNote": "There is no submission API for agents. A person who wants to reach Both Hands uses the contact form at the end of a result, which sends their note and result once they tick the consent box, or writes to info@both-hands.com. Agents never use the form.",
  "rules": [
    "Read the tool's .md file first. For the two checks it holds the questions, the rules of the interview and how to score. For the prompt it is the interview itself: follow it with your human.",
    "Interview the person one question at a time. Teach in plain words and never quiz. Ask only what the person alone knows.",
    "Change nothing in the person's setup without their yes.",
    "There is no submission API for agents. Never fill in or press the page's contact form, and never give the person's email to anyone: writing to us is the person's choice.",
    "A prefill link (page#fill=...) opens a check with answers chosen. The part after # never reaches a server. Give it only to the person: it holds their answers."
  ],
  "tools": [
    {
      "id": "journey",
      "title": "Where are you on your AI journey?",
      "audience": "Anyone who uses an AI, whatever the tool.",
      "approxMinutes": 5,
      "free": true,
      "account": false,
      "summary": "Fourteen questions. A level from 1 to 5 (capped by what your answers deny) and your next three moves.",
      "html": "/assessment/journey",
      "markdown": "/assessment/journey.md",
      "kind": "interview",
      "interview": {
        "questions": 14,
        "scoredOutOf": 28,
        "levels": [
          {
            "level": 5,
            "name": "Agentic",
            "from": 24,
            "to": 28
          },
          {
            "level": 4,
            "name": "Configured",
            "from": 18,
            "to": 23
          },
          {
            "level": 3,
            "name": "Agent owner",
            "from": 12,
            "to": 17
          },
          {
            "level": 2,
            "name": "Chat user",
            "from": 6,
            "to": 11
          },
          {
            "level": 1,
            "name": "Curious",
            "from": 0,
            "to": 5
          }
        ]
      },
      "prefill": {
        "param": "fill",
        "form": "/assessment/journey#fill=PAYLOAD",
        "payload": [
          "base64url of the JSON object, encoded as UTF-8 bytes",
          "the JSON object itself, percent-encoded (spaces as %20, never +)"
        ],
        "presentLink": "Put the link on its own line or in a code block with nothing after it; trailing punctuation is the usual cause of a failed link.",
        "maxEncodedChars": 16000,
        "opensAt": "the questions with those answers chosen, and the result when all fourteen are answered",
        "sentToServer": false,
        "recordedOnOpen": false,
        "note": "The part after # never reaches a server. Unknown fields are ignored, wrong types and disallowed values are dropped and shown to the person, text is cut to its limit and shown as plain text. Give the link only to the person: it holds their answers.",
        "schema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "required": [
            "v"
          ],
          "additionalProperties": true,
          "properties": {
            "v": {
              "const": 1
            },
            "answers": {
              "type": "object",
              "description": "Keyed by question number \"1\" to \"14\". Each value is a, b or c (a scores 2, b 1, c 0). Partial is fine.",
              "propertyNames": {
                "pattern": "^([1-9]|1[0-4])$"
              },
              "additionalProperties": {
                "type": "string",
                "enum": [
                  "a",
                  "b",
                  "c",
                  "A",
                  "B",
                  "C"
                ]
              }
            }
          }
        },
        "example": {
          "json": {
            "v": 1,
            "answers": {
              "1": "a",
              "2": "b",
              "3": "c",
              "4": "a",
              "5": "b",
              "6": "c",
              "7": "a",
              "8": "b",
              "9": "c",
              "10": "a",
              "11": "b",
              "12": "c",
              "13": "a",
              "14": "b"
            }
          },
          "link": "https://both-hands.com/assessment/journey#fill=eyJ2IjoxLCJhbnN3ZXJzIjp7IjEiOiJhIiwiMiI6ImIiLCIzIjoiYyIsIjQiOiJhIiwiNSI6ImIiLCI2IjoiYyIsIjciOiJhIiwiOCI6ImIiLCI5IjoiYyIsIjEwIjoiYSIsIjExIjoiYiIsIjEyIjoiYyIsIjEzIjoiYSIsIjE0IjoiYiJ9fQ"
        }
      }
    },
    {
      "id": "organisation",
      "title": "Is your organisation ready for AI?",
      "audience": "Nonprofit and small-team leaders.",
      "approxMinutes": 5,
      "free": true,
      "account": false,
      "summary": "Fourteen questions plus a one-file test. A score out of 28, the two areas to fix first and a plain next step.",
      "html": "/assessment/organisation",
      "markdown": "/assessment/organisation.md",
      "kind": "interview",
      "interview": {
        "questions": 14,
        "plusUnscoredQuestions": 1,
        "scoredOutOf": 28,
        "tiers": [
          {
            "name": "Foundations in place",
            "from": 21,
            "to": 28
          },
          {
            "name": "Some foundations",
            "from": 12,
            "to": 20
          },
          {
            "name": "Foundations first",
            "from": 0,
            "to": 11
          }
        ]
      },
      "prefill": {
        "param": "fill",
        "form": "/assessment/organisation#fill=PAYLOAD",
        "payload": [
          "base64url of the JSON object, encoded as UTF-8 bytes",
          "the JSON object itself, percent-encoded (spaces as %20, never +)"
        ],
        "presentLink": "Put the link on its own line or in a code block with nothing after it; trailing punctuation is the usual cause of a failed link.",
        "maxEncodedChars": 16000,
        "opensAt": "the questions with those answers chosen, and the result when all fourteen are answered",
        "sentToServer": false,
        "recordedOnOpen": false,
        "note": "The part after # never reaches a server. Unknown fields are ignored, wrong types and disallowed values are dropped and shown to the person, text is cut to its limit and shown as plain text. Give the link only to the person: it holds their answers.",
        "schema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "required": [
            "v"
          ],
          "additionalProperties": true,
          "properties": {
            "v": {
              "const": 1
            },
            "answers": {
              "type": "object",
              "description": "Keyed by question number \"1\" to \"14\". Each value is a, b or c (a scores 2, b 1, c 0). Partial is fine.",
              "propertyNames": {
                "pattern": "^([1-9]|1[0-4])$"
              },
              "additionalProperties": {
                "type": "string",
                "enum": [
                  "a",
                  "b",
                  "c",
                  "A",
                  "B",
                  "C"
                ]
              }
            },
            "onefile": {
              "type": "string",
              "enum": [
                "name-it",
                "redacted",
                "not-yet"
              ],
              "description": "The last question, not scored. Ask the person; do not guess."
            }
          }
        },
        "example": {
          "json": {
            "v": 1,
            "answers": {
              "1": "a",
              "2": "b",
              "3": "c",
              "4": "a",
              "5": "b",
              "6": "c",
              "7": "a",
              "8": "b",
              "9": "c",
              "10": "a",
              "11": "b",
              "12": "c",
              "13": "a",
              "14": "b"
            },
            "onefile": "name-it"
          },
          "link": "https://both-hands.com/assessment/organisation#fill=eyJ2IjoxLCJhbnN3ZXJzIjp7IjEiOiJhIiwiMiI6ImIiLCIzIjoiYyIsIjQiOiJhIiwiNSI6ImIiLCI2IjoiYyIsIjciOiJhIiwiOCI6ImIiLCI5IjoiYyIsIjEwIjoiYSIsIjExIjoiYiIsIjEyIjoiYyIsIjEzIjoiYSIsIjE0IjoiYiJ9LCJvbmVmaWxlIjoibmFtZS1pdCJ9"
        }
      }
    },
    {
      "id": "ai",
      "title": "Teach your AI who you are and how you work",
      "audience": "Anyone who uses an AI: chat app, always-on agent or coding app.",
      "approxMinutes": 10,
      "free": true,
      "account": false,
      "summary": "One prompt for the AI you already use. It interviews the person one question at a time, writes short standing instructions in their own words, and saves them or shows where they go.",
      "html": "/assessment/ai",
      "markdown": "/assessment/ai.md",
      "kind": "prompt",
      "howToUse": "The markdown file is the prompt itself, written for an AI to follow. When your human wants you to know them better, read it and follow it with them. It ends with standing instructions your human approves before anything is saved."
    }
  ],
  "related": [
    {
      "name": "Lantern",
      "url": "https://lantern.both-hands.com",
      "note": "A curated library of how-tos (sparks) that AI agents read through MCP. Free to join; some sparks need Pro."
    },
    {
      "name": "CortexMind",
      "url": "https://cortexmind.net",
      "note": "A memory app that several AI apps can share."
    },
    {
      "name": "Both Hands",
      "url": "https://both-hands.com"
    }
  ]
}
