{"node":{"id":"8c85109d-51c6-43bc-9ab4-98a5f4b02d00","handle":"8c85","type":"note","authorName":"Vincent Yeung","intent":"recipe","title":"How to set up Jev","aiSummary":"Get a TypeSafe key and keep it out of your shell history, install the typesafe-sdk package and TypeSafe's Claude Code skill, learn the call shape from the installed package's own help rather than from any page, the four things to find there before your first call, and the smallest call that proves you are set up.","content":"**Check first.** If `pip show typesafe-sdk` finds the package and you already hold a key, skip to step 4.\n\n**1. Get a key** at [typesafe.ai](https://typesafe.ai).\n\n**2. Keep the key out of your shell history.** Paste it into a file only you can read, or into a tool that prompts for the value. Hand it to a process through the environment, never as an argument:\n\n```bash\nchmod 600 <key-file>\nTYPESAFE_API_KEY=\"$(cat <key-file>)\" python3 your_script.py\n```\n\n**3. Install the package and the skill.**\n\n```bash\npython3 -m venv .jev-venv && .jev-venv/bin/pip install typesafe-sdk\n```\n\nIn Claude Code, add TypeSafe's skill. It is a guide to writing good Jev calls, not something your code runs.\n\n```bash\nclaude plugin marketplace add typesafe-ai/skills\nclaude plugin install typesafe@typesafe-ai\n```\n\n**4. Learn the call shape from the package.** The interface can change in any release, so read it from what you installed. `pip show -f typesafe-sdk` lists the module to import. Then run `help()` on that module and on its client class, or ask your AI to read both for you.\n\nBefore your first call, find these four in the help. A wrong guess at any of them fails the call.\n\n- how a question names its type\n- where a choice question's options go\n- where a yes/no question's statement goes\n- how a score question's scale is ordered\n\n**5. Make the smallest call.** Build the client with no arguments, so it reads the key from the environment. Ask one yes/no question about a short piece of text, and print the whole answer. If it answers your question, you are set up.","capturedAt":"2026-09-19T05:12:10.862Z","createdAt":"2026-09-19T05:12:10.864Z","updatedAt":"2026-10-02T06:15:57.265Z","spanId":null,"contributor":null,"audiences":[{"kind":"public","createdAt":"2026-09-19T05:12:30.102Z"}],"fingerprint":"e58b9f9428d50daee5533ce4832baa9f33342660ff5ac6a6b147558f412407be","revisionNo":"7","structureHash":"e598ec0fb6d1a55e11dfa63658c14c60f18b0a630b0a9797f1944afed800abc2","page":"https://lattris.com/by/b/memories/8c85109d-51c6-43bc-9ab4-98a5f4b02d00"},"links":[{"direction":"in","verb":"references","reason":"only if you send the questions that need context to Jev and have not set it up yet","hash":"ab0cfca92d1adaa511f8d5e3a65d528d477c90cbb19cb85fdb6fd7935a51cc93","node":{"id":"23ed6294-2f43-4e48-aa8c-feb963ce217b","handle":"23ed","type":"note","title":"Laya, a free decision model on your own machine: where it matches Jev and where it does not","aiSummary":"Laya, from Convai Innovations, is a free decision model that runs on your own machine and does the job Jev does in the cloud: you give it a question and the answers, and it returns a probability for each, with no charge per question and no text leaving your machine. It matches Jev on questions one message can answer, like whether a message holds a link or which kind it is, and gets wrong the questions that need context, like which thread a short reply belongs to. How to install it, how to split the work between Laya and Jev, and how to train it for the questions it misses.","erased":false,"href":"https://lattris.com/api/lattris/by/b/memories/23ed6294-2f43-4e48-aa8c-feb963ce217b?links=1","fingerprint":"f65c8d300ae4aff3968c5c5815ea288bacf15d08bde597b9df3c36dc4f7f0fb6","revisionNo":"4","structureHash":"5d72c65a4ec88a36e8340ee7f6e10d5c0339dc1b0cbc0d2b5765a12bd2490f3b","intent":"truth","authorName":"Vincent Yeung","page":"https://lattris.com/by/b/memories/23ed6294-2f43-4e48-aa8c-feb963ce217b"}},{"direction":"in","verb":"references","reason":"only if you are about to write the step-3 Jev call and need the current call shape","hash":"35f4f11d64ce4484cbffe65657b28dde5c19ee462b9d2f7e4018d0243c9b14ac","node":{"id":"3756718a-ef21-427f-ad5f-b4f9bfebc398","handle":"3756","type":"note","title":"How to capture what a person actually said: the three-context pattern with a decision model","aiSummary":"How to get a record of what someone actually said in a conversation you took part in, without your own reading of it creeping in. Five steps across three separate AI sessions: extract the raw transcript cut into threads, pull out the person's own words tagged by who said them, score each claim against a one-sentence purpose with a decision model, write only from the scored claims, then check the output against a list. With an example label set and when not to use it.","erased":false,"href":"https://lattris.com/api/lattris/by/b/memories/3756718a-ef21-427f-ad5f-b4f9bfebc398?links=1","fingerprint":"2d6e054196c780c871563c31bb2cac81e9e2ed5e0565702ff6f66249f7f67ec3","revisionNo":"14","structureHash":"71b94e3a22bfa7bc73869e28c33091763f03247728940c06dcbf479f6d75fe01","intent":"recipe","authorName":"Vincent Yeung","page":"https://lattris.com/by/b/memories/3756718a-ef21-427f-ad5f-b4f9bfebc398"}},{"direction":"in","verb":"references","reason":"only if you need to set Jev up, or to read the SDK's current question and answer types from the installed code","hash":"97755371b8127f67bad178128681390ad4e3f040efb3ade10d5bc1586a14b14f","node":{"id":"f0f5decc-32a9-49de-ad3d-0ea1871263fc","handle":"f0f5","type":"note","title":"Jev picks from answers you write: when to use it and how to word the questions","aiSummary":"Jev, TypeSafe's decision model, picks from answers you write and gives each one a probability. Use it when the same judgment is needed many times and you can write every answer down first. Read the spread of probabilities to find the unsure answers. Word each answer tightly, and ask first whether the question applies, because Jev picks a wrong answer when the right one is missing. A person still decides what matters, because some picks are wrong and Jev does not learn from its mistakes.","erased":false,"href":"https://lattris.com/api/lattris/by/b/memories/f0f5decc-32a9-49de-ad3d-0ea1871263fc?links=1","fingerprint":"43a30188c8bed6cb34e1c429c68b09aff611314c63650658756f1563927cdb67","revisionNo":"13","structureHash":"0df22d1c0fbb9aa7e1ba50bd4a7eab4f3b9a833a10eec51ab1aea1289522cef3","intent":"truth","authorName":"Vincent Yeung","page":"https://lattris.com/by/b/memories/f0f5decc-32a9-49de-ad3d-0ea1871263fc"}}],"dictionary":{"lattris":"A personal knowledge base — how a person captures what they know as linked blocks they own and control. To understand how this knowledge base works: https://lattris.com/by/4/memories/lattris-a-memory-store-for-your-life-43ff","intents":"Every block can carry an intent — a label for how far you have taken the idea. The scale runs from noticing something to acting on it: noticed (something caught your attention), learning (you are working it out), truth (you are saying this is how things are), decision (you chose a course), action (you did it). Recipe sits outside that scale — it is not a stronger claim, it is a different kind of thing: a procedure, a how-to, a set of steps that ties other knowledge together. Intent is optional — leaving it blank just means you have not labelled it yet."},"instructions_to_ai":"This is a recipe from a personal knowledge base. Read it and apply it to what the person you're talking to is working on. Follow the linked blocks to explore further related topics if it might be useful to the user; open each at its page address. Start by letting the user know what the recipe is about and how it may benefit them."}