Lär dig minimera känslig kontext i Claude Code med praktiska promptmallar, fildelningsarbetsflöden och redigeringssteg som fortfarande ger användbar hjälp med kodning.

"Kontext" är allt du ger en modell att arbeta med: kodsnuttar, stacktraces, konfigfiler, miljövariabler, databassamples, skärmdumpar och till och med tidigare meddelanden i samma chatt. Mer kontext kan snabba upp felsökning, men det ökar också risken att du klistrar in något du inte avsåg att dela.
Överdelning händer ofta under tidspress. En bugg blockerar en release, autentisering går sönder precis före en demo, eller ett instabilt test bara failar i CI. I det ögonblicket är det lätt att klistra in hela filen, sen hela loggen, sen hela konfigurationen "för säkerhets skull." Teamvanor kan driva åt samma håll: i code review och felsökning är full synlighet normalt, även när bara en liten del behövs.
Riskerna är inte hypotetiska. Ett enda inklistrande kan läcka hemligheter, kunddata eller interna systemdetaljer. Vanliga exempel inkluderar:
Målet är inte att vara hemlighetsfull. Det är att dela den minsta skivan som fortfarande reproducerar problemet eller förklarar beslutet, så du får samma kvalitet på hjälp med mindre exponering.
En enkel mental modell: behandla assistenten som en hjälpsam extern kollega som inte behöver ditt hela repo. Börja med en precis fråga ("Varför returnerar den här requesten 401?"). Dela sedan bara det som stödjer den frågan: den felande inputen, förväntat output, faktiskt output och den snäva kodväg som är inblandad.
Om en login-anrop misslyckas behöver du oftast inte hela auth-modulen. Ett sanerat request/response-par, funktionen som bygger headers och relevanta konfignycklar (med värden ersatta) räcker ofta.
När du ber om kodhjälp är "kontext" inte bara källkod. Det är allt som kan hjälpa någon logga in, identifiera en person eller kartlägga dina system. Börja med att veta vad som är toxiskt att klistra in.
Credentials förvandlar en hjälpsam kodsnutt till en incident. Det inkluderar API-nycklar och tokens, privata nycklar, sessionscookies, signerade URL:er, OAuth-klienthemligheter, databaslösenord och "tillfälliga" tokens som skrivs ut i loggar.
En vanlig överraskning är indirekta läckor. Ett felmeddelande kan innehålla fulla request-headers med en Authorization bearer-token, eller en debugdump av miljövariabler.
All data knuten till en person kan vara känslig, även om den ser harmlös ut. Se upp för e-postadresser, namn, telefonnummer, adresser, kund-ID:n, anställnings-ID:n, supportärenden med konversationer och betalningsdetaljer.
Om du behöver data för att reproducera en bug, byt verkliga poster mot realistiska fejkpåverkare. Behåll formen (fält och typer), inte identiteten.
"Tråkiga" interna fakta är värdefulla för angripare och konkurrenter: hostnames, IP:er, repo-namn, ticket-ID:n, leverantörsnamn, kontraktsvillkor och interna service-URL:er.
Även en enda stacktrace kan avslöja mappvägar med användarnamn eller klientnamn, tjänstenamnkonventioner och ledtrådar om molnkonto (bucket-namn, regionssträngar).
Inte all kod är lika känslig. De mest riskfyllda delarna är de som kodar hur din verksamhet fungerar: prissättnings- och rabattregler, bedrägerikontroller, rekommendationslogik, promptmallar för LLM-funktioner och strategiska dokument.
Om du behöver hjälp med en bugg, dela den minsta funktionen som reproducerar den, inte hela modulen.
Känsliga detaljer följer ofta med på ställen du inte märker: kommentarer med namn, commit-meddelanden, TODOs som nämner kunder och stacktraces inklistrade "as is." Konfigfiler är särskilt riskfyllda eftersom de blandar ofarliga inställningar med hemligheter.
En praktisk regel: om texten skulle hjälpa någon förstå ditt system snabbare än ett clean-room-exempel, behandla det som känsligt och redigera eller ersätt det.
Den bästa tiden att minska exponering är innan du öppnar din editor. En 30-sekunders paus för att definiera resultatet minskar ofta vad du delar avsevärt.
Börja med att namnge det resultat du vill ha i en mening. Försöker du hitta orsaken till en bugg, få en säker refaktorplan eller designa tester? Varje mål behöver olika inputs. Buggranskningar behöver oftast en stacktrace och en liten funktion. Refaktorfrågor behöver ofta bara publika gränssnitt och ett kort exempel på hur det används i dag.
Välj sedan ett "minimalt artefakt" som bevisar problemet. Välj det minsta som fortfarande failar: ett singelfailande test, den minsta snutten som triggar felet, ett kort loggutdrag runt felet eller ett förenklat konfigexempel med platshållare.
När du beskriver data, föredra former framför värden. "User-objektet har id (UUID), email (string), role (enum), createdAt (timestamp)" är nästan alltid nog. Om du behöver exempel, använd falska exempel som matchar formatet, inte riktiga poster.
Var strikt med filer. Dela bara modulen du ändrar plus de gränssnitt den rör vid. Om en funktion anropar en annan modul behöver du ofta bara signaturen och en kort beskrivning av vad den returnerar. Om en bugg involverar en request till en annan tjänst behöver du kanske bara requestens form, en lista på headernamn (inte värden) och den förväntade svarformen.
Sätt hårda gränser som aldrig lämnar din maskin: API-nycklar, privata certifikat, access-tokens, kunddata, interna URL:er, fulla repodumpar och råa produktionsloggar. Om du felsöker en 401, dela auth-flödet och felmeddelandet, men ersätt token med TOKEN_REDACTED och e-post med [email protected].
Bra redigering handlar inte bara om att dölja hemligheter. Den behåller problemets struktur så att assistenten fortfarande kan resonera kring det. Ta bort för mycket och du får generisk rådgivning. Ta bort för lite och du riskerar att läcka data.
Välj en plats- eller tokenstil och håll dig till den över kod, konfig och loggar. Konsekvens gör det lättare att följa flödet.
Om samma token förekommer på tre ställen, ersätt den inte tre olika sätt. Använd platshållare som API_KEY_1, TOKEN_1, USER_ID_1, CUSTOMER_ID_1, EMAIL_1 och öka vid behov (TOKEN_2, TOKEN_3).
En kort legend hjälper utan att avslöja verkliga värden:
TOKEN_1: bearer-token som används i Authorization-headernCUSTOMER_ID_1: intern kundidentifierare som används i databasuppslagAPI_KEY_1: nyckel som används för att anropa betalningsleverantörenVissa buggar beror på längd och struktur (parsing, validering, signaturkontroller, regex). I de fallen ersätt unika strängar med dummyvärden som ser likadana ut.
Exempel:
Det låter dig säga "token misslyckas vid validering" utan att exponera den verkliga token.
När du delar JSON, behåll nycklar och ersätt värden. Nycklar visar vad systemet förväntar sig; värden är ofta det känsliga.
Istället för:
{"email":"[email protected]","password":"SuperSecret!","mfa_code":"123456","customer_id":"c8b1..."}
Dela:
{"email":"EMAIL_1","password":"PASSWORD_1","mfa_code":"MFA_CODE_1","customer_id":"CUSTOMER_ID_1"}
Samma idé för SQL: behåll tabellnamn, joins och villkor, men ta bort literaler.
WHERE user_id = USER_ID_1 AND created_at > DATE_1Om en funktion innehåller affärsregler eller proprietär logik, beskriv den. Behåll det som påverkar buggen: inputs, outputs, sidoeffekter och felhantering.
Exempelsammanfattning som fortfarande hjälper:
"signRequest(payload) tar en JSON-payload, lägger till timestamp och nonce, och skapar sedan en HMAC SHA-256-signatur från method + path + body. Den returnerar {headers, body}. Felet uppstår när payload innehåller icke-ASCII-tecken."
Det räcker vanligtvis för att diagnostisera kodnings-, kanoniserings- och signaturmismatch utan att exponera implementationen.
Avsluta din prompt med att ange vad du tog bort och vad du behöll. Det förhindrar fram-och-tillbaka och minskar risken att du blir ombedd att klistra in mer.
Exempel:
"Redigerat: tokens, e-postadresser, kunddata, fulla request-body. Behåll: endpoint-paths, statuskoder, header-namn, stacktrace-ramar och exakt feltext."
Behandla assistenten som en kollega som bara behöver den del du faktiskt jobbar med. Dela gränssnitt och kontrakt istället för hela filer: funktionssignaturer, typer, request/response-former och exakt feltext.
Ett minimalt repro i vanlig text räcker ofta: den input du använde, vad du förväntade dig, vad som hände istället och några miljönoteringar (runtime-version, OS, framework-version). Du behöver inte hela projektets historik.
Mallfraser som ofta fungerar:
Ett sanerat konfigblock är en användbar kompromiss. Det visar vilka reglage som finns utan att exponera hemligheter:
# sanitized
DB_HOST: "\u003cset\u003e"
DB_PORT: "5432"
DB_USER: "\u003cset\u003e"
DB_PASSWORD: "\u003credacted\u003e"
JWT_SECRET: "\u003credacted\u003e"
OAUTH_CLIENT_ID: "\u003cset\u003e"
OAUTH_CLIENT_SECRET: "\u003credacted\u003e"
Exempel på en säker prompt:
"Login misslyckas med 401. Förväntat 200. Faktiskt responsbody: 'invalid token'. Miljö: Node 20, lokal utveckling, tidsynk aktiverad. Requestkontrakt: Authorization: Bearer \u003credacted\u003e. Verifieringssteg: token utfärdas av /auth/login och används på /me. Vilka är topporsakerna (clock skew, audience mismatch, signing secret mismatch), och vilken enstaka kontroll bekräftar var och en?"
En pålitlig vana är att behandla delning som att paketera ett litet repro. Dela nog för att diagnostisera problemet, och inget mer.
Ett praktiskt tillvägagångssätt är en temporär "share folder" som är separat från ditt riktiga repo. Kopiera filer till den manuellt istället för att dela hela projektet. Det tvingar avsiktliga val.
Håll arbetsflödet enkelt:
När du byggt mappen, läs den som en utomstående. Om en fil inte hjälper till att felsöka det specifika problemet hör den inte hemma där.
När du redigerar, undvik att förstöra koden eller loggarna. Ersätt värden med tydliga platshållare som behåller typ och struktur. Till exempel byt:
DATABASE_URL=postgres://user:[email protected]:5432/app
med:
DATABASE_URL=postgres://user:REDACTED@localhost:5432/app
Om buggen beror på ett tredjepartssvar, skriv ner svarformen i din README och inkludera en syntetisk JSON-fil som matchar den. Du kan få meningsfull felsökning utan att dela verklig trafik.
Använd en upprepad loop så att du inte improviserar under press.
Skriv två meningar först.
Samla minsta inputs. Ta bara med det som hjälper reproducera eller resonera om problemet: en liten snutt runt felande rad, exakt feltext, relevanta versioner och 3–5 repro-steg.
Redigera utan att platta till strukturen. Ersätt hemligheter med platshållare och behåll formen intakt. Ta bort identifierare som inte påverkar beteendet (projektnamn, tenant-ID:n, e-post). Behåll platshållare konsekventa.
API_KEY=sk_live_...
becomes
API_KEY=<API_KEY>
customer-1234-prod-db
becomes
<DB_HOST_PROD>
Ställ riktade frågor. Para "Vad är den mest sannolika orsaken?" med "Vad ska jag ändra?" Om du vill ha en patch, be om en ändring begränsad till snutten du gav och kräv att antaganden märks.
Verifiera lokalt, lägg sedan till en ny detalj. Testa förslaget. Om det misslyckas, lägg bara till en ny uppgift (nästa stacktrace-rad, en configflagga, en snävare repro). Klistra inte in hela filer direkt.
Denna inkrementella exponering ger oftast ett verkligt svar samtidigt som hemligheter och orelaterad kod hålls utanför prompten.
En vanlig situation: login fungerar på din laptop och staging, men misslyckas i produktion. Du behöver hjälp snabbt, men du kan inte klistra in riktiga tokens, användare, interna hostnames eller din fulla auth-middleware.
Börja med vad du kan observera: request- och response-form, statuskod och en kort stacktrace. Om det handlar om JWT kan du också dela icke-känsliga headerdetaljer (som förväntad alg) och tidsdetaljer (t.ex. serverns tidsskillnad). Behåll allt annat som platshållare.
Ett säkert paket brukar innehålla:
Ställ sedan en fokuserad fråga. Produktionsspecifika auth-fel orsakas ofta av clock skew, fel issuer/audience, olika signeringsnycklar, missad key rotation eller proxy/header-differenser.
Promptmönster:
I have a production-only login/auth failure. Locally it passes.
Observed behavior:
- Endpoint: POST /api/login
- Production response: 401 with message "invalid token" (generic)
- Staging/local: 200
Sanitized request/response:
- Authorization: Bearer <JWT_REDACTED>
- Expected claims: iss=<ISSUER_PLACEHOLDER>, aud=<AUDIENCE_PLACEHOLDER>
- Token validation library: <LIB_NAME_AND_VERSION>
Sanitized log snippet:
<PASTE 5-10 LINES WITH TOKENS/EMAILS/HOSTS REDACTED>
Question:
Given this, what are the top causes of JWT validation failing only in production, especially clock skew or claim mismatch? What specific checks and log lines should I add to confirm which one it is?
När du fått hypoteser, verifiera säkert med ändringar du kan behålla. Lägg till temporär loggning som bara skriver icke-känsliga fakta (exp, iat, now och felorsakskod). Skriv ett litet test som matar en känd-säker token-fixture (eller en lokalt genererad token) och asser validatorbeteende för kantfall.
En enkel plan:
Det snabbaste sättet att förlora sekretessfördelarna är att dela "en liten sak" som tyst innehåller allt. Att klistra in en full .env eller konfigfil är klassiskt. Även om du tar bort uppenbara hemligheter innehåller de filer ofta interna hostnames, servicenamn, feature-flaggor och miljöledtrådar som kartlägger ditt system.
Fulla stacktraces är ännu en frekvent läcka. De kan innehålla användarnamn, maskinnamn, repo-namn och absoluta sökvägar som /Users/alex/company-payments/.... Ibland innehåller de querystrings, HTTP-headers eller felobjekt med tokens. Om du behöver trace, kopiera bara relevanta ramar och ersätt pathar med konsekventa platshållare.
Riktiga kundpayloads är riskabla även när de är "små." En enda JSON-body kan inkludera e-post, adresser, order-ID:n eller fria textnoteringar. Det säkrare är att generera en falsk payload med samma form och kantfall (saknade fält, långa strängar, ovanliga tecken), utan verkliga värden.
Inkonsistenta platshållare skapar också problem. Om USER_ID betyder "kund-id" på ett ställe och "internt konto-id" på ett annat får du fel diagnos. Välj ett schema och håll dig till det.
Om ditt meddelande skulle hjälpa en främling att logga in, lokalisera dina servrar eller identifiera en kund, behöver det en ny genomgång.
När du försöker vara försiktig är snabbhet din fiende. En kort rutin hjälper dig få användbara svar samtidigt som känslig data hålls utanför prompten.
Gör en pass för hemligheter, sedan en andra pass för identifierare som fortfarande exponerar ditt system:
Efter redigering, behåll formen. Lämna typer, scheman, fältnamn, statuskoder och exempelstruktur intakt, men byt verkliga värden mot platshållare.
För att hålla det konsekvent (särskilt under press), skriv ner ett litet set redigeringsregler och återanvänd dem. För team, gör det till en delad mall med två block: "vad jag delar" (filer, funktioner, endpoints) och "vad jag inte delar" (hemligheter, produktionsdata, interna domäner).
Om du vill ha ett extra säkerhetslager, gör experiment i en isolerad miljö och håll ändringarna reversibla. I Koder.ai (koder.ai) kan planeringsläge hjälpa dig skissera minsta ändring som behövs för att testa en hypotes, och snapshots plus rollback gör det enklare att prova en fix utan att dra med extra känslig kontext i dina prompts.
Börja med den minsta skivan som kan besvara din fråga: den felande inputen, förväntat vs faktiskt output, och den snäva kodväg som är inblandad.
En bra standardmängd är:
Klistra inte in:
.env/konfigfiler eller råa produktionsloggarOm det skulle hjälpa en främling att logga in, identifiera en person eller kartlägga dina system — radera eller summera det istället.
Använd konsekventa platshållare så att flödet förblir läsbart.
Exempelsschema:
TOKEN_1, TOKEN_2API_KEY_1USER_ID_1, Behåll formatet när buggen beror på parsing eller validering.
Vanliga fall:
8-4-4-4-12-mönstretDetta håller beteendet realistiskt utan att exponera det verkliga värdet.
Dela nycklar och struktur, ersätt värden.
För JSON:
För SQL:
Exempel:
Sammanfatta det i termer av inputs, outputs och den specifika regel som påverkar buggen.
En praktisk sammanfattning inkluderar:
Detta ger ofta samma felsökningsvärde utan att avslöja implementationen.
En enkel säker prompt ser ut så här:
Lägg också till en redactionsnotis som:
"Redigerat: tokens, e-postadresser, kunddata, interna hostnames. Behåll: endpoint-paths, statuskoder, header-namn, exakt feltext."
För att de ofta innehåller allt på en gång:
Ett säkrare alternativ är en konfigurationsmall:
Använd inkrementell exponering:
Det håller omfånget litet och minskar risken för oavsiktliga läckor under press.
Ett användbart paket är:
Ställ sedan frågan:
CUSTOMER_ID_1EMAIL_1Lägg till en kort legend vid behov:
TOKEN_1: Authorization bearer token använd på /meCUSTOMER_ID_1: identifierare som används i databasuppslagWHERE user_id = USER_ID_1 AND created_at > DATE_1\u003cset\u003e eller \u003credacted\u003e