6 6
7> Copiez-collez des prompts pour Claude Code, étiquetés par tâche et rôle.7> Copiez-collez des prompts pour Claude Code, étiquetés par tâche et rôle.
8 8
9export const PromptLibrary = ({text = {}, labels = {}, tagLabels = {}, phaseLabels = {}, sourceLabels = {}, catLabels = {}}) => {
10 const RAW = useMemo(() => [{
11 id: 'get-oriented-in-a',
12 sdlc: 'discover',
13 cat: 'Onboard',
14 startN: 1,
15 roles: [],
16 prompt: 'give me an overview of this codebase: architecture, key directories, and how the pieces connect',
17 nextHref: '/en/memory',
18 src: 'workflows'
19 }, {
20 id: 'explain-unfamiliar-code',
21 sdlc: 'discover',
22 cat: 'Understand',
23 roles: [],
24 prompt: 'explain what {path} does and how data flows through it. write it up as {format}',
25 slots: {
26 path: 'src/scheduler/queue.ts',
27 format: 'an HTML page with a diagram, then open it in my browser'
28 },
29 nextHref: '/en/output-styles',
30 src: 'workflows'
31 }, {
32 id: 'find-where-something-happens',
33 sdlc: 'discover',
34 cat: 'Understand',
35 startN: 2,
36 roles: [],
37 prompt: 'where do we {behavior}?',
38 slots: {
39 behavior: 'validate uploaded file types'
40 },
41 src: 'workflows'
42 }, {
43 id: 'see-what-depends-on',
44 sdlc: 'discover',
45 cat: 'Understand',
46 roles: [],
47 prompt: 'what would break if I deleted {target}?',
48 slots: {
49 target: 'the retryWithBackoff helper'
50 },
51 src: 'workflows'
52 }, {
53 id: 'trace-how-code-evolved',
54 sdlc: 'discover',
55 cat: 'Understand',
56 roles: [],
57 prompt: 'look through the commit history of {path} and summarize how it evolved and why',
58 slots: {
59 path: 'internal/auth/session.go'
60 },
61 src: 'best-practices'
62 }, {
63 id: 'scope-a-change-before',
64 sdlc: 'discover',
65 cat: 'Understand',
66 roles: ['pm', 'design'],
67 prompt: 'which files would I need to touch to {change}?',
68 slots: {
69 change: 'add a dark mode toggle to settings'
70 },
71 src: 'teams'
72 }, {
73 id: 'ask-the-codebase-a',
74 sdlc: 'discover',
75 cat: 'Understand',
76 roles: ['pm'],
77 prompt: 'I am a {role}. walk me through what happens when a user {action}, from the UI down to the result',
78 slots: {
79 role: 'PM',
80 action: 'clicks Export to PDF'
81 },
82 nextHref: '/en/output-styles',
83 src: 'teams'
84 }, {
85 id: 'plan-a-multi-file',
86 sdlc: 'design',
87 cat: 'Plan',
88 roles: ['pm', 'design'],
89 prompt: 'plan how to refactor the {target} to {goal}. list the files you would change, but don\'t edit anything yet',
90 slots: {
91 target: 'payment module',
92 goal: 'support multiple currencies'
93 },
94 src: 'workflows'
95 }, {
96 id: 'draft-a-spec-by',
97 sdlc: 'design',
98 cat: 'Plan',
99 roles: ['pm'],
100 prompt: 'I want to build {feature}. interview me about implementation, UX, edge cases, and tradeoffs until we have covered everything, then write the spec to SPEC.md',
101 slots: {
102 feature: 'per-workspace rate limits'
103 },
104 nextHref: '/en/skills',
105 src: 'best-practices'
106 }, {
107 id: 'turn-a-meeting-into',
108 sdlc: 'design',
109 cat: 'Plan',
110 roles: ['pm'],
111 prompt: 'read {input} and write up the action items, then create a {tracker} ticket for each with acceptance criteria',
112 slots: {
113 input: '@meeting-notes.md',
114 tracker: 'Linear'
115 },
116 needs: 'tracker',
117 nextHref: '/en/skills',
118 src: 'teams'
119 }, {
120 id: 'map-edge-cases-before',
121 sdlc: 'design',
122 cat: 'Plan',
123 roles: ['design', 'pm'],
124 prompt: 'list the error states, empty states, and edge cases for {feature} that the design needs to cover',
125 slots: {
126 feature: 'the file upload flow'
127 },
128 src: 'teams'
129 }, {
130 id: 'turn-a-mockup-into',
131 sdlc: 'design',
132 cat: 'Prototype',
133 roles: ['design', 'pm', 'marketing'],
134 paste: 'mockup',
135 prompt: 'here is a mockup. build a working prototype I can click through, matching the layout and states shown',
136 src: 'teams'
137 }, {
138 id: 'implement-from-a-screenshot',
139 sdlc: 'design',
140 cat: 'Prototype',
141 roles: ['design'],
142 paste: 'design',
143 needs: 'browser',
144 prompt: 'implement this design, then take a screenshot of the result, compare it to the original, and fix any differences',
145 nextHref: '/en/goal',
146 src: 'best-practices'
147 }, {
148 id: 'follow-an-existing-pattern',
149 sdlc: 'build',
150 cat: 'Implement',
151 roles: [],
152 prompt: 'look at how {example} is implemented to understand the pattern, then build {new} the same way',
153 slots: {
154 example: 'the GitHub webhook handler',
155 new: 'a Stripe webhook handler'
156 },
157 nextHref: '/en/memory',
158 src: 'best-practices'
159 }, {
160 id: 'generate-docs-for-code',
161 sdlc: 'build',
162 cat: 'Implement',
163 roles: ['docs'],
164 prompt: 'find {scope} without {format} comments and add them, matching the style already used in the file',
165 slots: {
166 scope: 'the public functions in src/auth/',
167 format: 'JSDoc'
168 },
169 src: 'workflows'
170 }, {
171 id: 'add-a-small-well',
172 sdlc: 'build',
173 cat: 'Implement',
174 roles: [],
175 prompt: 'add a {endpoint} endpoint that returns {payload}',
176 slots: {
177 endpoint: '/health',
178 payload: 'the app version and uptime'
179 },
180 src: 'workflows'
181 }, {
182 id: 'build-a-small-internal',
183 sdlc: 'build',
184 cat: 'Implement',
185 roles: ['pm', 'design', 'marketing', 'docs'],
186 prompt: 'create a {tool} using HTML, CSS, and vanilla JavaScript, then open it in my browser',
187 slots: {
188 tool: 'drag-and-drop Kanban board with three columns'
189 },
190 src: 'teams'
191 }, {
192 id: 'work-an-issue-end',
193 sdlc: 'build',
194 cat: 'Implement',
195 roles: [],
196 prompt: 'read issue #{issue}, implement the fix, and run the tests',
197 slots: {
198 issue: '312'
199 },
200 needs: 'gh',
201 src: 'workflows'
202 }, {
203 id: 'find-and-update-copy',
204 sdlc: 'build',
205 cat: 'Implement',
206 roles: ['design', 'docs', 'marketing'],
207 prompt: 'find every place we say "{copy}" or a close variant, show me each one in context, then update them all to "{new}". leave tests and the changelog alone',
208 slots: {
209 copy: 'Sign up free',
210 new: 'Start free trial'
211 },
212 src: 'teams'
213 }, {
214 id: 'draft-from-past-examples',
215 sdlc: 'build',
216 cat: 'Implement',
217 roles: ['docs', 'marketing', 'pm'],
218 prompt: 'read the {examples} in {folder} to learn the structure and voice, then draft a new one for {topic}',
219 slots: {
220 examples: 'privacy impact assessments',
221 folder: 'legal/pia/',
222 topic: 'the new analytics integration'
223 },
224 nextHref: '/en/skills',
225 src: 'legal'
226 }, {
227 id: 'write-tests-run-them',
228 sdlc: 'build',
229 cat: 'Test',
230 startN: 4,
231 roles: [],
232 prompt: 'write tests for {path}, run them, and fix any failures',
233 slots: {
234 path: 'app/parsers/feed.py'
235 },
236 nextHref: '/en/memory',
237 src: 'workflows'
238 }, {
239 id: 'drive-implementation-from-tests',
240 sdlc: 'build',
241 cat: 'Test',
242 roles: [],
243 prompt: 'write tests for {feature} first, then implement it until they pass',
244 slots: {
245 feature: 'the password reset flow'
246 },
247 src: 'ebook'
248 }, {
249 id: 'fill-gaps-from-a',
250 sdlc: 'build',
251 cat: 'Test',
252 roles: [],
253 prompt: 'read {report} and add tests for the lowest-covered files until each is above {target}%',
254 slots: {
255 report: 'coverage/coverage-summary.json',
256 target: '80'
257 },
258 nextHref: '/en/goal',
259 src: 'workflows'
260 }, {
261 id: 'migrate-a-pattern-across',
262 sdlc: 'build',
263 cat: 'Refactor',
264 roles: [],
265 prompt: 'migrate everything from {from} to {to}: identify every place that needs to change, then make the changes',
266 slots: {
267 from: 'the old logging API',
268 to: 'the structured logger'
269 },
270 src: 'workflows'
271 }, {
272 id: 'port-code-between-languages',
273 sdlc: 'build',
274 cat: 'Refactor',
275 roles: [],
276 prompt: 'port {source} to {target}, keeping the same {keep}',
277 slots: {
278 source: 'this Python module',
279 target: 'Rust',
280 keep: 'public API and test behavior'
281 },
282 src: 'teams'
283 }, {
284 id: 'optimize-against-a-measurable',
285 sdlc: 'build',
286 cat: 'Refactor',
287 roles: ['data'],
288 prompt: 'optimize {target} to bring {metric} from {current} down to under {goal}',
289 slots: {
290 target: 'the search query',
291 metric: 'p95 latency',
292 current: '2s',
293 goal: '500ms'
294 },
295 nextHref: '/en/goal',
296 src: 'ebook'
297 }, {
298 id: 'fix-a-precise-visual',
299 sdlc: 'build',
300 cat: 'Refactor',
301 roles: ['design'],
302 prompt: 'the {element} extends {amount} beyond the {container} on {viewport}. fix it.',
303 slots: {
304 element: 'login button',
305 amount: '20px',
306 container: 'card border',
307 viewport: 'mobile'
308 },
309 nextHref: '/en/desktop#preview-your-app',
310 src: 'ebook'
311 }, {
312 id: 'review-your-changes-before',
313 sdlc: 'build',
314 cat: 'Review',
315 startN: 5,
316 roles: [],
317 prompt: 'review my uncommitted changes and flag anything that looks risky before I commit',
318 nextHref: '/en/commands',
319 src: 'workflows'
320 }, {
321 id: 'review-a-pull-request',
322 sdlc: 'build',
323 cat: 'Review',
324 roles: [],
325 prompt: 'review PR #{pr} and summarize what changed, then list any concerns',
326 slots: {
327 pr: '247'
328 },
329 needs: 'gh',
330 nextHref: '/en/code-review',
331 src: 'workflows'
332 }, {
333 id: 'review-infrastructure-changes-before',
334 sdlc: 'build',
335 cat: 'Review',
336 roles: ['security', 'ops'],
337 paste: 'plan',
338 prompt: 'here is my Terraform plan output. what is this going to do, and is anything here going to cause problems?',
339 src: 'teams'
340 }, {
341 id: 'run-a-security-review',
342 sdlc: 'build',
343 cat: 'Review',
344 roles: ['security'],
345 prompt: 'use a subagent to review {path} for security issues and report what it finds',
346 slots: {
347 path: 'src/api/'
348 },
349 nextHref: '/en/sub-agents',
350 src: 'best-practices'
351 }, {
352 id: 'review-content-before-sending',
353 sdlc: 'build',
354 cat: 'Review',
355 roles: ['marketing', 'docs'],
356 prompt: 'review {file} for {concerns} and list anything I should fix before it goes to {reviewer}',
357 slots: {
358 file: 'launch-post.md',
359 concerns: 'unsupported claims, missing attributions, and brand-guideline issues',
360 reviewer: 'legal'
361 },
362 nextHref: '/en/skills',
363 src: 'legal'
364 }, {
365 id: 'course-correct-a-wrong',
366 sdlc: 'build',
367 cat: 'Steer',
368 roles: [],
369 prompt: 'that is not right: {feedback}. try a different approach',
370 slots: {
371 feedback: 'the function signature needs to stay backward-compatible'
372 },
373 nextHref: '/en/checkpointing',
374 src: 'best-practices'
375 }, {
376 id: 'narrow-the-scope-of',
377 sdlc: 'build',
378 cat: 'Steer',
379 roles: [],
380 prompt: 'that is too much. keep only the changes to {scope} and undo your other edits',
381 slots: {
382 scope: 'the validation logic in src/forms/'
383 },
384 src: 'best-practices'
385 }, {
386 id: 'turn-a-correction-into',
387 sdlc: 'build',
388 cat: 'Steer',
389 roles: [],
390 prompt: 'you keep {mistake}. add a rule to CLAUDE.md so this stops happening',
391 slots: {
392 mistake: 'using default exports when this project uses named exports'
393 },
394 nextHref: '/en/memory',
395 src: 'best-practices'
396 }, {
397 id: 'resolve-merge-conflicts',
398 sdlc: 'ship',
399 cat: 'Git',
400 roles: [],
401 prompt: 'resolve the merge conflicts in this branch and explain what you kept from each side',
402 src: 'workflows'
403 }, {
404 id: 'commit-with-a-generated',
405 sdlc: 'ship',
406 cat: 'Git',
407 roles: [],
408 prompt: 'commit these changes with a message that summarizes what I did',
409 src: 'workflows'
410 }, {
411 id: 'open-a-pull-request',
412 sdlc: 'ship',
413 cat: 'Git',
414 roles: [],
415 prompt: 'find the {tracker} ticket about {topic} and open a PR that implements it',
416 slots: {
417 tracker: 'Linear',
418 topic: 'the login timeout'
419 },
420 needs: 'tracker',
421 src: 'workflows'
422 }, {
423 id: 'draft-release-notes-from',
424 sdlc: 'ship',
425 cat: 'Release',
426 roles: ['pm', 'docs', 'marketing'],
427 prompt: 'compare {from} to {to} and draft release notes grouped by feature, fix, and breaking change',
428 slots: {
429 from: 'v2.3.0',
430 to: 'v2.4.0'
431 },
432 nextHref: '/en/skills',
433 src: 'workflows'
434 }, {
435 id: 'write-a-ci-workflow',
436 sdlc: 'ship',
437 cat: 'Release',
438 roles: ['ops'],
439 prompt: 'write a GitHub Actions workflow that {steps} on every push to {branch}',
440 slots: {
441 steps: 'runs the tests and deploys to staging',
442 branch: 'main'
443 },
444 src: 'workflows'
445 }, {
446 id: 'find-and-fix-a',
447 sdlc: 'operate',
448 cat: 'Debug',
449 startN: 3,
450 roles: [],
451 prompt: 'the {test} test is failing, find out why and fix it',
452 slots: {
453 test: 'UserAuth'
454 },
455 src: 'workflows'
456 }, {
457 id: 'investigate-a-reported-error',
458 sdlc: 'operate',
459 cat: 'Debug',
460 roles: ['ops'],
461 prompt: 'users are seeing {symptom} on {where}. investigate and tell me what is going on',
462 slots: {
463 symptom: '500 errors',
464 where: '/api/settings'
465 },
466 nextHref: '/en/web-quickstart#pre-fill-sessions',
467 src: 'workflows'
468 }, {
469 id: 'fix-a-build-error',
470 sdlc: 'operate',
471 cat: 'Debug',
472 roles: ['ops'],
473 paste: 'error',
474 prompt: 'here is a build error. fix the root cause and verify the build succeeds',
475 src: 'best-practices'
476 }, {
477 id: 'investigate-a-production-incident',
478 sdlc: 'operate',
479 cat: 'Incident',
480 roles: ['ops', 'security'],
481 prompt: '{symptom}. check the logs, recent deploys, and config changes, then tell me the most likely cause',
482 slots: {
483 symptom: 'the checkout endpoint started returning 500s an hour ago'
484 },
485 nextHref: '/en/mcp',
486 src: 'workflows'
487 }, {
488 id: 'diagnose-from-a-console',
489 sdlc: 'operate',
490 cat: 'Incident',
491 roles: ['ops', 'data'],
492 paste: 'screenshot',
493 prompt: 'here is a screenshot of {console}. walk me through why {resource} is failing and give me the exact commands to fix it',
494 slots: {
495 console: 'the GCP Kubernetes dashboard',
496 resource: 'this pod'
497 },
498 src: 'teams'
499 }, {
500 id: 'query-logs-in-plain',
501 sdlc: 'operate',
502 cat: 'Incident',
503 roles: ['security', 'ops', 'data'],
504 prompt: 'show me all {events} for {scope} over {timeframe}. write the query, run it, and tell me what stands out',
505 slots: {
506 events: 'failed logins',
507 scope: 'the auth service',
508 timeframe: 'the past 24 hours'
509 },
510 needs: 'db',
511 src: 'cybersecurity'
512 }, {
513 id: 'analyze-a-data-file',
514 sdlc: 'operate',
515 cat: 'Data',
516 roles: ['data', 'pm', 'marketing'],
517 paste: 'csv',
518 prompt: 'read {file}, summarize the key patterns, and write the results to {output}',
519 slots: {
520 file: '@reports/q1-signups.csv',
521 output: 'an HTML page with charts, then open it in my browser'
522 },
523 nextHref: '/en/mcp',
524 src: 'teams'
525 }, {
526 id: 'generate-variations-from-performance',
527 sdlc: 'operate',
528 cat: 'Data',
529 roles: ['marketing', 'data'],
530 paste: 'csv',
531 prompt: 'read {file}, find the underperforming {items}, and generate {n} new variations that stay under {limit} characters',
532 slots: {
533 file: '@ads-performance.csv',
534 items: 'headlines',
535 n: '20',
536 limit: '90'
537 },
538 nextHref: '/en/mcp',
539 src: 'teams'
540 }, {
541 id: 'turn-a-recurring-task',
542 sdlc: 'operate',
543 cat: 'Automate',
544 roles: [],
545 prompt: 'create a /{name} skill for this project that {steps}',
546 slots: {
547 name: 'ship',
548 steps: 'runs the linter and tests, then drafts a commit message'
549 },
550 src: 'workflows'
551 }, {
552 id: 'add-a-hook-for',
553 sdlc: 'operate',
554 cat: 'Automate',
555 roles: [],
556 prompt: 'write a hook that {action} after every {event}',
557 slots: {
558 action: 'runs prettier',
559 event: 'edit to a .ts or .tsx file'
560 },
561 src: 'best-practices'
562 }, {
563 id: 'connect-a-tool-with',
564 sdlc: 'operate',
565 cat: 'Automate',
566 roles: [],
567 prompt: 'set up the {server} MCP server so you can read my {data} directly',
568 slots: {
569 server: 'Sentry',
570 data: 'error reports'
571 },
572 src: 'workflows'
573 }, {
574 id: 'capture-what-to-remember',
575 sdlc: 'operate',
576 cat: 'Automate',
577 roles: ['pm', 'docs'],
578 prompt: 'summarize what we did this session and suggest what to add to CLAUDE.md',
579 src: 'teams'
580 }], []);
581 const PROMPTS = useMemo(() => {
582 if (typeof window !== 'undefined') {
583 const rawIds = new Set(RAW.map(p => p.id));
584 RAW.forEach(p => {
585 if (!text[p.id]) console.warn('[prompt-library] no text[] entry for id:', p.id);
586 });
587 Object.keys(text).forEach(k => {
588 if (!rawIds.has(k)) console.warn('[prompt-library] orphaned text[] key:', k);
589 });
590 }
591 return RAW.map(p => ({
592 ...p,
593 title: p.id,
594 teaches: '',
595 ...text[p.id] || ({})
596 }));
597 }, [RAW, text]);
598 const L = labels;
599 const TL = k => tagLabels[k] || k;
600 const CAT_TAG = useMemo(() => ({
601 Onboard: 'understand',
602 Understand: 'understand',
603 Plan: 'plan',
604 Prototype: 'prototype',
605 Implement: 'build',
606 Test: 'test',
607 Refactor: 'refactor',
608 Review: 'review',
609 Steer: 'steer',
610 Git: 'git',
611 Release: 'release',
612 Debug: 'debug',
613 Incident: 'debug',
614 Data: 'data',
615 Automate: 'automate'
616 }), []);
617 const TAGS = useMemo(() => ['understand', 'plan', 'prototype', 'build', 'test', 'refactor', 'review', 'steer', 'debug', 'git', 'release', 'data', 'automate', 'pm', 'design', 'docs', 'marketing', 'security', 'ops'], []);
618 const tagsOf = p => [CAT_TAG[p.cat], ...p.roles || []];
619 const doc = useMemo(() => {
620 const p = typeof window !== 'undefined' ? window.location.pathname : '';
621 const base = p.startsWith('/docs/') ? '/docs' : '';
622 const m = p.slice(base.length).match(/^\/([a-z]{2}(?:-[A-Z]{2})?)\//);
623 const locale = m ? m[1] : 'en';
624 return href => {
625 if (!href || href[0] !== '/' || href[1] === '/') return href;
626 return base + (href.startsWith('/en/') ? '/' + locale + href.slice(3) : href);
627 };
628 }, []);
629 const linkify = s => {
630 const out = [];
631 let last = 0;
632 const re = /\[([^\]]+)\]\(([^)]+)\)/g;
633 for (let m; m = re.exec(s); ) {
634 if (m.index > last) out.push(s.slice(last, m.index));
635 out.push(<a key={m.index} href={doc(m[2])}>{m[1]}</a>);
636 last = re.lastIndex;
637 }
638 if (last < s.length) out.push(s.slice(last));
639 return out;
640 };
641 const codeify = s => s.split(/(`[^`]+`)/g).map((part, i) => part[0] === '`' ? <code key={i}>{part.slice(1, -1)}</code> : part);
642 const SOURCES = useMemo(() => ({
643 'workflows': '/en/common-workflows',
644 'teams': 'https://claude.com/blog/how-anthropic-teams-use-claude-code',
645 'legal': 'https://claude.com/blog/how-anthropic-uses-claude-legal',
646 'cybersecurity': 'https://claude.com/blog/how-anthropic-uses-claude-cybersecurity',
647 'best-practices': '/en/best-practices',
648 'ebook': 'https://resources.anthropic.com/hubfs/Scaling%20agentic%20coding%20across%20your%20organization.pdf'
649 }), []);
650 const [mounted, setMounted] = useState(false);
651 const [q, setQ] = useState('');
652 const [start, setStart] = useState(true);
653 const [sel, setSel] = useState(null);
654 const [openId, setOpenId] = useState(null);
655 const [copied, setCopied] = useState(null);
656 const [fills, setFills] = useState({});
657 const copyTimer = useRef(null);
658 useEffect(() => {
659 setMounted(true);
660 return () => clearTimeout(copyTimer.current);
661 }, []);
662 const setFill = (id, key, val) => setFills(f => ({
663 ...f,
664 [id + '.' + key]: val
665 }));
666 const fillOf = (p, key) => {
667 const v = fills[p.id + '.' + key];
668 return v !== undefined ? v : p.slots && p.slots[key] !== undefined ? p.slots[key] : '';
669 };
670 const assemble = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => fillOf(p, k) || p.slots && p.slots[k] || k);
671 const preview = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => p.slots && p.slots[k] || k);
672 const bodyText = p => preview(p) + ' ' + p.teaches.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1') + ' ' + (p.next || '');
673 const widthFor = s => (s || '').length + 3 + 'ch';
674 const ql = q.trim().toLowerCase();
675 const toggleTag = k => {
676 setStart(false);
677 setSel(s => !ql && s === k ? null : k);
678 };
679 const clear = () => {
680 setStart(false);
681 setSel(null);
682 setQ('');
683 };
684 const results = useMemo(() => {
685 const list = PROMPTS.filter(p => {
686 if (ql) return p.title.toLowerCase().includes(ql) || bodyText(p).toLowerCase().includes(ql);
687 if (start) return !!p.startN;
688 if (sel) return tagsOf(p).includes(sel);
689 return true;
690 });
691 if (ql) return list;
692 if (start) return list.sort((a, b) => a.startN - b.startN);
693 if (sel) return list.sort((a, b) => (a.roles || []).length - (b.roles || []).length || (b.sdlc === 'operate') - (a.sdlc === 'operate'));
694 return list;
695 }, [PROMPTS, ql, start, sel]);
696 const matchSnippet = p => {
697 if (!ql || p.title.toLowerCase().includes(ql)) return null;
698 const txt = bodyText(p);
699 const at = txt.toLowerCase().indexOf(ql);
700 if (at < 0) return null;
701 const lo = Math.max(0, at - 30), hi = Math.min(txt.length, at + ql.length + 50);
702 return [lo > 0 ? '…' : '', txt.slice(lo, at), <mark key="m">{txt.slice(at, at + ql.length)}</mark>, txt.slice(at + ql.length, hi), hi < txt.length ? '…' : ''];
703 };
704 const grouped = useMemo(() => {
705 if (start && !q.trim()) return [];
706 const g = {};
707 for (const p of results) {
708 const key = p.sdlc + '|' + p.cat;
709 (g[key] = g[key] || ({
710 sdlc: p.sdlc,
711 cat: p.cat,
712 items: []
713 })).items.push(p);
714 }
715 return Object.values(g);
716 }, [results, start, q]);
717 const copy = async (str, id) => {
718 try {
719 await navigator.clipboard.writeText(str);
720 } catch {
721 const ta = document.createElement('textarea');
722 ta.value = str;
723 ta.setAttribute('readonly', '');
724 ta.style.position = 'fixed';
725 ta.style.opacity = '0';
726 document.body.appendChild(ta);
727 ta.select();
728 document.execCommand('copy');
729 document.body.removeChild(ta);
730 }
731 clearTimeout(copyTimer.current);
732 setCopied(id);
733 copyTimer.current = setTimeout(() => setCopied(null), 1600);
734 };
735 const promptBody = p => {
736 if (!p.slots) return <code>{p.prompt}</code>;
737 const parts = p.prompt.split(/(\{\w+\})/g);
738 return <code>
739 {parts.map((part, idx) => {
740 const m = part.match(/^\{(\w+)\}$/);
741 if (!m) return <span key={idx}>{part}</span>;
742 const k = m[1];
743 const val = fillOf(p, k);
744 return <input key={idx} type="text" className="pl-slot" value={val} placeholder={p.slots[k] || k} aria-label={k} style={{
745 width: widthFor(val || p.slots[k])
746 }} onChange={e => setFill(p.id, k, e.target.value)} onFocus={e => e.target.select()} onClick={e => e.stopPropagation()} />;
747 })}
748 </code>;
749 };
750 const card = p => {
751 const open = openId === p.id;
752 const srcHref = SOURCES[p.src];
753 const srcLabel = sourceLabels[p.src];
754 const snip = matchSnippet(p);
755 return <div key={p.id} className={'pl-card' + (open ? ' pl-open' : '')}>
756 <button type="button" className="pl-head" onClick={() => setOpenId(open ? null : p.id)} aria-expanded={open}>
757 <span className="pl-title">{p.title}</span>
758 {!!p.startN && <span className="pl-chip">{L.startHere} · {p.startN}</span>}
759 </button>
760 {snip ? <div className="pl-match">{snip}</div> : <code className="pl-prompt-preview">{preview(p)}</code>}
761 {open && <div className="pl-body">
762 <div className="pl-label">{p.slots ? L.fillAndCopy : L.copyThis}</div>
763 {p.needs && L.needs && L.needs[p.needs] && <div className="pl-hint pl-needs">
764 <span className="pl-needs-label">{L.needsLabel}</span> {linkify(L.needs[p.needs])}
765 </div>}
766 {p.paste && L.paste && L.paste[p.paste] && <div className="pl-hint pl-paste">{L.paste[p.paste]}</div>}
767 {p.slots && <div className="pl-hint">
768 {L.hintBefore} <span className="pl-hint-chip">{L.hintChip}</span> {L.hintAfter}
769 </div>}
770 <div className="pl-prompt-box">
771 <span className="pl-caret">{'❯'}</span>
772 {promptBody(p)}
773 <button type="button" className="pl-copy" onClick={() => copy(assemble(p), p.id)}>
774 {copied === p.id ? L.copied : L.copy}
775 </button>
776 </div>
777 <div className="pl-label">{L.whyWorks}</div>
778 <div className="pl-teaches">{linkify(p.teaches)}</div>
779 {p.nextHref && p.next && <div className="pl-next">
780 <span className="pl-next-label">{L.makeItStick}</span>
781 <a href={doc(p.nextHref)}>{codeify(p.next)} →</a>
782 </div>}
783 {srcLabel && <div className="pl-src">{L.from} {srcHref ? <a href={doc(srcHref)}>{srcLabel}</a> : srcLabel}</div>}
784 </div>}
785 </div>;
786 };
787 const STYLES = useMemo(() => `
788.pl {
789 --pl-accent: #D97757;
790 --pl-accent-bg: rgba(217,119,87,0.07);
791 --pl-bg: #fff;
792 --pl-surface: #FAFAF7;
793 --pl-border: #E8E6DC;
794 --pl-border-subtle: rgba(31,30,29,0.08);
795 --pl-text: #141413;
796 --pl-text-2: #5E5D59;
797 --pl-text-3: #73726C;
798 --pl-text-4: #9C9A92;
799 --pl-mono: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
800 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, sans-serif;
801 font-size: 16px; color: var(--pl-text); margin: 8px 0 32px;
802}
803.dark .pl {
804 --pl-bg: #1f1e1d;
805 --pl-surface: #262624;
806 --pl-border: #3d3d3a;
807 --pl-border-subtle: rgba(240,238,230,0.08);
808 --pl-text: #f0eee6;
809 --pl-text-2: #bfbdb4;
810 --pl-text-3: #91908a;
811 --pl-text-4: #73726c;
812}
813.pl *, .pl *::before, .pl *::after { box-sizing: border-box; }
814.pl button { font-family: inherit; cursor: pointer; }
815.pl a { color: var(--pl-accent); text-decoration: none; }
816.pl a:hover { text-decoration: underline; }
817
818.pl-search {
819 display: flex; align-items: center; gap: 10px;
820 padding: 14px 18px; background: var(--pl-surface);
821 border: 1px solid var(--pl-border); border-radius: 12px;
822 margin-bottom: 14px;
823}
824.pl-search input {
825 flex: 1; border: none; outline: none; background: transparent;
826 font-size: 16px; color: var(--pl-text);
827}
828.pl-search input::placeholder { color: var(--pl-text-4); }
829
830.pl-tags { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-bottom: 18px; }
831.pl-tag {
832 padding: 7px 14px; border: 1px solid var(--pl-border); background: var(--pl-bg);
833 font-size: 14px; color: var(--pl-text-2); border-radius: 999px;
834}
835.pl-tag:hover { background: var(--pl-surface); }
836.pl-tag.pl-on { background: var(--pl-text); border-color: var(--pl-text); color: var(--pl-bg); }
837.pl-tag.pl-start { color: var(--pl-accent); font-weight: 500; }
838.pl-tag.pl-start.pl-on { background: var(--pl-accent); border-color: var(--pl-accent); color: #fff; }
839.pl-tags.pl-dim .pl-tag { opacity: 0.5; }
840.pl-tags.pl-dim .pl-tag:hover { opacity: 1; }
841.pl-sep { width: 1px; height: 22px; background: var(--pl-border); margin: 0 4px; }
842.pl-clear { border: none; background: none; font-size: 13px; color: var(--pl-text-4); padding: 4px 6px; }
843.pl-clear:hover { color: var(--pl-text-2); }
844.pl-count { margin-left: auto; font-size: 14px; color: var(--pl-text-4); }
845
846.pl-group-h {
847 font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase;
848 color: var(--pl-text-4); margin: 24px 0 12px;
849}
850.pl-group-h .pl-phase { color: var(--pl-text-3); }
851.pl-card {
852 border: 1px solid var(--pl-border-subtle); border-radius: 10px;
853 margin-bottom: 12px; background: var(--pl-bg); overflow: hidden;
854 padding: 14px 18px;
855}
856.pl-card.pl-open { border-color: var(--pl-border); background: var(--pl-surface); }
857.pl-head {
858 width: 100%; display: flex; align-items: baseline; gap: 12px;
859 border: none; background: transparent; text-align: left; padding: 0;
860}
861.pl-head:focus-visible { outline: 2px solid var(--pl-accent); outline-offset: 2px; border-radius: 6px; }
862.pl-title {
863 flex: 1; font-size: 17px; font-weight: 500; color: var(--pl-text);
864 white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
865}
866.pl-prompt-preview {
867 display: block; font-family: var(--pl-mono); font-size: 13.5px; color: var(--pl-text-3);
868 margin-top: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
869}
870.pl-chip {
871 font-size: 11px; letter-spacing: 0.05em; text-transform: uppercase;
872 padding: 3px 9px; border-radius: 999px; flex-shrink: 0;
873 background: var(--pl-accent-bg); color: var(--pl-accent);
874}
875
876.pl-body { margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--pl-border-subtle); }
877.pl-label {
878 font-size: 11.5px; letter-spacing: 0.08em; text-transform: uppercase;
879 color: var(--pl-text-4); margin: 12px 0 8px;
880}
881.pl-prompt-box {
882 display: flex; align-items: center; gap: 10px;
883 padding: 14px 16px; background: #141413; color: #f0eee6;
884 border-radius: 8px; font-family: var(--pl-mono); font-size: 15px;
885}
886.pl-caret { color: var(--pl-accent); flex-shrink: 0; }
887.pl-prompt-box code { flex: 1; background: none; padding: 0; color: inherit; white-space: pre-wrap; line-height: 1.9; }
888.pl-slot {
889 font-family: var(--pl-mono); font-size: inherit;
890 background: rgba(217,119,87,0.15); color: #f0eee6;
891 border: none; border-bottom: 1.5px dashed var(--pl-accent);
892 border-radius: 4px 4px 0 0; padding: 2px 6px; margin: 0 1px;
893 outline: none; min-width: 6ch; max-width: 100%;
894 box-sizing: content-box; cursor: text;
895}
896.pl-slot:hover { background: rgba(217,119,87,0.22); }
897.pl-slot:focus { background: rgba(217,119,87,0.28); border-bottom-style: solid; }
898.pl-slot::placeholder { color: rgba(240,238,230,0.4); font-style: italic; }
899.pl-hint { font-size: 14px; color: var(--pl-text-3); margin: 0 0 10px; }
900.pl-paste { color: var(--pl-text-2); }
901.pl-needs { color: var(--pl-text-2); }
902.pl-needs-label {
903 display: inline-block; font-size: 10.5px; letter-spacing: 0.06em;
904 text-transform: uppercase; padding: 2px 7px; margin-right: 6px;
905 border-radius: 4px; background: var(--pl-accent-bg); color: var(--pl-accent);
906}
907.pl-hint-chip {
908 font-family: var(--pl-mono); font-size: 0.92em;
909 background: var(--pl-accent-bg); color: var(--pl-accent);
910 border-bottom: 1.5px dashed var(--pl-accent);
911 border-radius: 3px 3px 0 0; padding: 1px 5px;
912}
913.pl-copy {
914 font-size: 12.5px; padding: 6px 12px; border-radius: 6px;
915 background: var(--pl-accent); color: #fff; border: none; flex-shrink: 0;
916}
917.pl-teaches { display: block; font-size: 15.5px; color: var(--pl-text-2); margin: 4px 0 0; line-height: 1.6; }
918.pl-match {
919 display: block; font-size: 13.5px; color: var(--pl-text-3);
920 margin-top: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
921}
922.pl-match mark { background: var(--pl-accent-bg); color: var(--pl-text); padding: 1px 2px; border-radius: 3px; }
923.pl-next {
924 display: flex; align-items: baseline; gap: 10px;
925 margin: 14px 0 0; padding: 10px 12px;
926 background: var(--pl-accent-bg); border-radius: 8px; font-size: 14.5px;
927}
928.pl-next-label {
929 font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase;
930 color: var(--pl-accent); font-weight: 600; flex-shrink: 0;
931}
932.pl-src { display: block; font-size: 14px; color: var(--pl-text-4); margin: 14px 0 0; }
933
934.pl-show-all {
935 display: block; width: 100%; padding: 14px; margin-top: 4px;
936 border: 1px dashed var(--pl-border); border-radius: 10px;
937 background: transparent; font-size: 15px; color: var(--pl-accent);
938 text-align: center;
939}
940.pl-show-all:hover { background: var(--pl-accent-bg); border-style: solid; }
941
942.pl-empty {
943 padding: 32px; text-align: center; color: var(--pl-text-4);
944 border: 1px dashed var(--pl-border); border-radius: 10px;
945}
946`, []);
947 if (!mounted) return <div className="pl" style={{
948 minHeight: 480
949 }} />;
950 return <div className="pl">
951 <style>{STYLES}</style>
952
953 <div className="pl-search">
954 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" style={{
955 color: 'var(--pl-text-4)'
956 }}>
957 <circle cx="11" cy="11" r="7" /><line x1="21" y1="21" x2="16.65" y2="16.65" />
958 </svg>
959 <input type="text" placeholder={L.search} value={q} onChange={e => {
960 setQ(e.target.value);
961 if (e.target.value) setStart(false);
962 }} aria-label={L.search} />
963 </div>
964
965 <div className={'pl-tags' + (ql ? ' pl-dim' : '')}>
966 <button type="button" className={'pl-tag pl-start' + (!ql && start ? ' pl-on' : '')} onClick={() => {
967 setQ('');
968 setStart(!start);
969 if (!start) setSel(null);
970 }}>
971 ★ {L.startHere}
972 </button>
973 <span className="pl-sep" />
974 {TAGS.map(k => <button key={k} type="button" aria-pressed={!ql && sel === k} className={'pl-tag' + (!ql && sel === k ? ' pl-on' : '')} onClick={() => {
975 setQ('');
976 toggleTag(k);
977 }}>
978 {TL(k)}
979 </button>)}
980 {(start || sel || q) && <button type="button" className="pl-clear" onClick={clear}>{L.clear}</button>}
981 <span className="pl-count">{results.length} {results.length === 1 ? L.prompt : L.prompts}</span>
982 </div>
983
984 {results.length === 0 ? <div className="pl-empty">
985 {L.noMatch} {ql ? <code>{q}</code> : null} <button type="button" className="pl-clear" onClick={clear}>{L.clear}</button>
986 </div> : !ql && start ? <div>
987 <div className="pl-group-h">{L.startHereHeader}</div>
988 {results.map(card)}
989 <button type="button" className="pl-show-all" onClick={clear}>
990 {L.showAll && L.showAll.replace('{n}', PROMPTS.length)} →
991 </button>
992 </div> : grouped.map(g => <div key={g.sdlc + '|' + g.cat}>
993 <div className="pl-group-h"><span className="pl-phase">{phaseLabels[g.sdlc] || g.sdlc}</span> · {catLabels[g.cat] || g.cat}</div>
994 {g.items.map(card)}
995 </div>)}
996 </div>;
997};
998
9Ceci est une bibliothèque de prompts à copier dans Claude Code. Utilisez-la pour explorer des façons de travailler que vous n'avez pas essayées, ou quand vous ne savez pas par où commencer.999Ceci est une bibliothèque de prompts à copier dans Claude Code. Utilisez-la pour explorer des façons de travailler que vous n'avez pas essayées, ou quand vous ne savez pas par où commencer.
10 1000
11Les prompts sont collectés à partir de divers guides Anthropic, notamment [Flux de travail courants](/fr/common-workflows), [Bonnes pratiques](/fr/best-practices), et [Comment les équipes Anthropic utilisent Claude Code](https://claude.com/blog/how-anthropic-teams-use-claude-code). Ce sont des points de départ plutôt que des scripts. Ouvrez **Pourquoi cela fonctionne** sous n'importe quel prompt pour voir le modèle derrière celui-ci afin que vous puissiez écrire le vôtre.1001Les prompts sont collectés à partir de divers guides Anthropic, notamment [Flux de travail courants](/fr/common-workflows), [Bonnes pratiques](/fr/best-practices), et [Comment les équipes Anthropic utilisent Claude Code](https://claude.com/blog/how-anthropic-teams-use-claude-code). Ce sont des points de départ plutôt que des scripts. Ouvrez **Pourquoi cela fonctionne** sous n'importe quel prompt pour voir le modèle derrière celui-ci afin que vous puissiez écrire le vôtre.
12 1002
1003export const labels = {
1004 startHere: "Commencez ici",
1005 startHereHeader: "Cinq prompts à essayer en premier",
1006 showAll: "Afficher tous les {n} prompts",
1007 search: "Rechercher des prompts…",
1008 clear: "Effacer",
1009 prompt: "prompt",
1010 prompts: "prompts",
1011 noMatch: "Aucun prompt ne correspond",
1012 fillAndCopy: "Remplir et copier",
1013 copyThis: "Copier ce prompt",
1014 hintBefore: "Tapez dans le",
1015 hintChip: "champs en surbrillance",
1016 hintAfter: "pour personnaliser, puis copiez.",
1017 copy: "Copier",
1018 copied: "Copié",
1019 whyWorks: "Pourquoi cela fonctionne",
1020 makeItStick: "Rendez-le mémorable",
1021 from: "De",
1022 paste: {
1023 mockup: "Collez, glissez ou @-mentionnez votre image de maquette, puis envoyez ceci :",
1024 design: "Collez, glissez ou @-mentionnez votre image de conception, puis envoyez ceci :",
1025 screenshot: "Collez, glissez ou @-mentionnez votre capture d'écran, puis envoyez ceci :",
1026 plan: "Collez votre sortie de plan dans le prompt d'abord, puis envoyez ceci :",
1027 error: "Collez la sortie d'erreur dans le prompt d'abord, puis envoyez ceci :",
1028 csv: "Glissez votre fichier dans le prompt, ou remplacez le chemin ci-dessous par une @-mention de votre propre fichier :"
1029 },
1030 needsLabel: "Nécessite",
1031 needs: {
1032 tracker: "votre suivi de problèmes ajouté en tant que [connecteur claude.ai](/fr/mcp#use-mcp-servers-from-claude-ai) ou [serveur MCP](/fr/mcp).",
1033 gh: "la [CLI gh](https://cli.github.com) authentifiée, ou GitHub ajouté en tant que [connecteur claude.ai](/fr/mcp#use-mcp-servers-from-claude-ai).",
1034 browser: "un moyen pour Claude de rendre et de capturer une capture d'écran du résultat. L'[application de bureau](/fr/desktop#preview-your-app) a cela intégré. Dans le terminal, installez l'[extension Chrome](/fr/chrome) ou un serveur [MCP](/fr/mcp) Playwright.",
1035 db: "votre entrepôt de données ou magasin de journaux ajouté en tant que [connecteur claude.ai](/fr/mcp#use-mcp-servers-from-claude-ai) ou [serveur MCP](/fr/mcp)."
1036 }
1037};
1038
1039export const tagLabels = {
1040 understand: "Comprendre",
1041 plan: "Planifier",
1042 prototype: "Prototype",
1043 build: "Construire",
1044 test: "Tester",
1045 refactor: "Refactoriser",
1046 review: "Examiner",
1047 steer: "Diriger",
1048 debug: "Déboguer",
1049 git: "Git",
1050 release: "Sortie",
1051 data: "Données",
1052 automate: "Automatiser",
1053 pm: "Produit",
1054 design: "Conception",
1055 docs: "Docs",
1056 marketing: "Marketing",
1057 security: "Sécurité",
1058 ops: "Astreinte"
1059};
1060
1061export const phaseLabels = {
1062 discover: "Découvrir",
1063 design: "Concevoir",
1064 build: "Construire",
1065 ship: "Livrer",
1066 operate: "Exploiter"
1067};
1068
1069export const sourceLabels = {
1070 workflows: "Flux de travail courants",
1071 teams: "Comment les équipes Anthropic utilisent Claude Code",
1072 legal: "Comment Anthropic utilise Claude en Juridique",
1073 cybersecurity: "Comment Anthropic utilise Claude en Cybersécurité",
1074 "best-practices": "Bonnes pratiques",
1075 ebook: "Guide de codage agentique à l'échelle"
1076};
1077
1078export const catLabels = {
1079 Onboard: "Intégration",
1080 Understand: "Comprendre",
1081 Plan: "Planifier",
1082 Prototype: "Prototype",
1083 Implement: "Implémenter",
1084 Test: "Tester",
1085 Refactor: "Refactoriser",
1086 Review: "Examiner",
1087 Steer: "Diriger",
1088 Git: "Git",
1089 Release: "Sortie",
1090 Debug: "Déboguer",
1091 Incident: "Incident",
1092 Data: "Données",
1093 Automate: "Automatiser"
1094};
1095
1096export const text = {
1097 "get-oriented-in-a": {
1098 title: "S'orienter dans un nouveau référentiel",
1099 teaches: "Décrivez ce que vous voulez savoir, pas quels fichiers lire. Claude explore le projet par lui-même et retourne un résumé de la façon dont il s'articule.",
1100 next: "Exécutez `/init` pour configurer `CLAUDE.md` afin que Claude se souvienne de ceci à chaque session"
1101 },
1102 "explain-unfamiliar-code": {
1103 title: "Expliquer du code non familier",
1104 teaches: "Nommez le fichier et dites dans quel format vous voulez la réponse. Échangez la page HTML contre un diagramme, des points à puces, ou tout ce qui correspond à votre façon d'apprendre.",
1105 next: "Définissez un style de sortie afin que Claude explique toujours dans votre format préféré"
1106 },
1107 "find-where-something-happens": {
1108 title: "Trouver où quelque chose se produit",
1109 teaches: "Recherchez par comportement plutôt que par nom de fichier. La recherche fonctionne même quand vous ne savez pas comment le fichier s'appelle ou dans quel répertoire il se trouve."
1110 },
1111 "see-what-depends-on": {
1112 title: "Vérifier ce qui se casse avant de supprimer",
1113 teaches: "Demandez avant de supprimer quoi que ce soit. La liste des appelants et des effets en aval vous indique si vous regardez un nettoyage d'une ligne ou une modification que vous devez coordonner."
1114 },
1115 "trace-how-code-evolved": {
1116 title: "Tracer l'évolution du code",
1117 teaches: "Pointez l'historique des commits quand la question est pourquoi, pas quoi. Claude lit le journal et le blame pour quelle que soit la version control que vous utilisez et explique les décisions derrière l'implémentation actuelle."
1118 },
1119 "scope-a-change-before": {
1120 title: "Délimiter une modification avant de commencer",
1121 teaches: "Dimensionnez le travail avant de vous y engager sur une feuille de route. La liste des fichiers vous indique si vous regardez un composant ou une modification transversale."
1122 },
1123 "ask-the-codebase-a": {
1124 title: "Poser une question produit à la base de code",
1125 teaches: "Énoncez votre rôle afin que la réponse soit au bon niveau. Claude explique ce que le produit fait réellement à partir du code source, sans que vous ayez besoin de le lire.",
1126 next: "Définissez un style de sortie afin que Claude présente toujours les réponses à ce niveau"
1127 },
1128 "plan-a-multi-file": {
1129 title: "Planifier une modification multi-fichiers avant de toucher au code",
1130 teaches: "Ajouter « ne pas modifier encore » sépare l'exploration des modifications, afin que vous voyiez l'approche avant que le code ne bouge. Pour faire du plan-first le défaut sur chaque prompt, appuyez sur Maj+Tab pour [mode plan](/fr/permission-modes#analyze-before-you-edit-with-plan-mode)."
1131 },
1132 "draft-a-spec-by": {
1133 title: "Rédiger une spécification par entrevue",
1134 teaches: "Demandez à être interviewé au lieu d'écrire la spécification vous-même. Claude vous pose des questions structurées jusqu'à ce que les exigences soient complètes, puis écrit le résultat dans un fichier.",
1135 next: "Enregistrez vos questions d'entrevue en tant que compétence `/spec` afin que chaque spécification commence de la même façon"
1136 },
1137 "turn-a-meeting-into": {
1138 title: "Transformer une réunion en tickets",
1139 teaches: "Ignorez l'étape de transcription. Claude extrait les éléments d'action de l'entrée non structurée et les écrit directement dans votre suivi via [MCP](/fr/mcp), afin que vous examiniez les tickets, pas la transcription.",
1140 next: "Enregistrez ceci en tant que compétence `/tickets`"
1141 },
1142 "map-edge-cases-before": {
1143 title: "Cartographier les cas limites avant de construire",
1144 teaches: "Demandez ce qui manque, pas ce qui est là. Claude énumère les états d'erreur, les états vides et les cas limites qu'une conception de chemin heureux tend à ignorer."
1145 },
1146 "turn-a-mockup-into": {
1147 title: "Transformer une maquette en prototype fonctionnel",
1148 teaches: "Un prototype cliquable répond à des questions qu'une maquette statique ne peut pas. Remettez le code fonctionnel à l'ingénierie au lieu d'expliquer les interactions dans un document."
1149 },
1150 "implement-from-a-screenshot": {
1151 title: "Implémenter à partir d'une capture d'écran et auto-vérifier",
1152 teaches: "Cela donne à Claude une boucle de vérification : il rend, compare par rapport à l'image source, et itère sans que vous pointiez chaque écart.",
1153 next: "Utilisez `/goal` pour garder Claude itérant jusqu'à ce que les captures d'écran correspondent"
1154 },
1155 "follow-an-existing-pattern": {
1156 title: "Suivre un modèle existant",
1157 teaches: "Pointez du code que vous aimez déjà. Sans référence, Claude utilise par défaut les meilleures pratiques générales. Avec une, il correspond aux conventions que votre base de code utilise réellement.",
1158 next: "Demandez à Claude d'écrire le modèle qu'il a suivi dans `CLAUDE.md` afin que les sessions futures le correspondent sans la référence"
1159 },
1160 "add-a-small-well": {
1161 title: "Ajouter une petite fonctionnalité bien définie",
1162 teaches: "Énoncez les entrées et les sorties, pas comment la construire. Claude trouve où le code similaire vit et ajoute le vôtre à côté."
1163 },
1164 "build-a-small-internal": {
1165 title: "Construire un petit outil interne à partir de zéro",
1166 teaches: "Vous n'avez pas besoin d'un projet, d'un framework ou d'une étape de construction. Décrivez l'outil et demandez à Claude de l'ouvrir afin que vous le voyiez fonctionner immédiatement."
1167 },
1168 "work-an-issue-end": {
1169 title: "Traiter un problème de bout en bout",
1170 teaches: "Donnez le numéro du problème, pas un résumé. Claude lit le ticket complet lui-même, afin que les exigences que vous oublieriez de mentionner passent, et il valide la modification avant de signaler."
1171 },
1172 "find-and-update-copy": {
1173 title: "Trouver et mettre à jour le texte dans la base de code",
1174 teaches: "Demandez des variantes et dites ce qu'il faut ignorer. Claude trouve des formulations qu'une recherche littérale manquerait et laisse les fixtures de test et l'historique intacts, afin que vous examiniez uniquement le texte que les utilisateurs voient réellement."
1175 },
1176 "draft-from-past-examples": {
1177 title: "Rédiger un document à partir d'exemples passés",
1178 teaches: "Pointez un dossier de travail terminé au lieu de décrire votre style. Claude apprend la structure et la voix de ce que vous avez déjà livré, afin que le premier brouillon se lise comme l'un des vôtres.",
1179 next: "Enregistrez la voix en tant que compétence afin que chaque brouillon commence là"
1180 },
1181 "write-tests-run-them": {
1182 title: "Écrire des tests, les exécuter, corriger les défaillances",
1183 teaches: "Demandez d'écrire, d'exécuter et de corriger ensemble afin que Claude itère sans s'arrêter pour les instructions.",
1184 next: "Exécutez `/init` afin que Claude apprenne automatiquement votre commande de test"
1185 },
1186 "drive-implementation-from-tests": {
1187 title: "Piloter l'implémentation à partir des tests",
1188 teaches: "Développement piloté par les tests : les tests définissent quand le travail est terminé, et Claude itère sur l'implémentation jusqu'à ce qu'ils passent."
1189 },
1190 "fill-gaps-from-a": {
1191 title: "Combler les lacunes à partir d'un rapport de couverture",
1192 teaches: "Pointez le rapport de couverture au lieu de deviner ce qui n'est pas testé. Claude lit les chiffres réels et écrit des tests pour les fichiers qui en ont le plus besoin.",
1193 next: "Définissez ceci en tant que `/goal` afin que Claude continue à écrire des tests jusqu'à ce que la couverture atteigne la cible"
1194 },
1195 "port-code-between-languages": {
1196 title: "Porter le code vers un autre langage",
1197 teaches: "Dites ce qu'il faut préserver, pas seulement le langage cible. Nommer l'API ou le comportement qui doit rester le même donne à Claude un contrat pour vérifier le port."
1198 },
1199 "generate-docs-for-code": {
1200 title: "Générer de la documentation pour du code non documenté",
1201 teaches: "Nommez la portée et le format. Claude trouve ce qui manque et correspond au style de commentaire déjà dans le fichier, afin que la nouvelle documentation se lise comme le reste."
1202 },
1203 "migrate-a-pattern-across": {
1204 title: "Migrer un modèle dans la base de code",
1205 teaches: "Décrivez l'ancien modèle et le nouveau. Demander à Claude d'identifier d'abord chaque endroit signifie que les sites d'appel sont énumérés dans la réponse, afin que vous puissiez vérifier qu'aucun n'a été manqué."
1206 },
1207 "optimize-against-a-measurable": {
1208 title: "Optimiser par rapport à une cible mesurable",
1209 teaches: "Énoncer la métrique et la cible donne à Claude une définition claire de la fin.",
1210 next: "Définissez ceci en tant que `/goal` afin que Claude continue à mesurer et itérer jusqu'à ce qu'il atteigne le nombre"
1211 },
1212 "fix-a-precise-visual": {
1213 title: "Corriger un bug visuel précis",
1214 teaches: "Un retour visuel précis obtient une correction précise. Énoncez l'élément exact, la mesure et la fenêtre d'affichage.",
1215 next: "Ajoutez un outil d'aperçu afin que Claude capture une capture d'écran et vérifie la correction lui-même"
1216 },
1217 "review-your-changes-before": {
1218 title: "Examiner vos modifications avant de valider",
1219 teaches: "Attrapez les problèmes tant qu'ils sont encore bon marché à corriger. Claude lit les fichiers modifiés en entier, pas seulement les lignes de diff, afin qu'il repère les problèmes qu'un auto-examen rapide manquerait.",
1220 next: "Exécutez `/code-review` pour la même vérification en une commande"
1221 },
1222 "review-a-pull-request": {
1223 title: "Examiner une demande de tirage",
1224 teaches: "Claude examine avec la base de code entière en contexte, pas seulement le diff. Il lit le code modifié et ce qu'il appelle, afin qu'il repère les problèmes qu'un examen diff-only manquerait.",
1225 next: "Activez ceci pour chaque PR avec Code Review"
1226 },
1227 "review-infrastructure-changes-before": {
1228 title: "Examiner les modifications d'infrastructure avant d'appliquer",
1229 teaches: "La sortie du plan est dense et difficile à analyser. La coller vous donne un résumé en langage clair de ce qui va réellement changer avant que vous l'appliquiez."
1230 },
1231 "run-a-security-review": {
1232 title: "Exécuter un examen de sécurité avec un sous-agent",
1233 teaches: "Un [sous-agent](/fr/sub-agents) exécute l'audit dans sa propre fenêtre de contexte et signale un résumé, afin qu'un long examen de sécurité ne remplisse pas votre session principale. Le sous-agent polyvalent intégré gère ceci sans configuration supplémentaire.",
1234 next: "Configurez un sous-agent security-review dédié que toute votre équipe peut utiliser"
1235 },
1236 "review-content-before-sending": {
1237 title: "Attraper les problèmes avant l'examen formel",
1238 teaches: "Obtenez une première passe avant qu'un humain ne passe du temps dessus. Nommez les préoccupations que vous voulez vérifier afin que l'examen soit ciblé, puis corrigez ce qu'il trouve et envoyez un brouillon plus propre.",
1239 next: "Capturez votre liste de contrôle d'examen en tant que compétence que toute votre équipe peut exécuter"
1240 },
1241 "course-correct-a-wrong": {
1242 title: "Corriger une mauvaise approche",
1243 teaches: "Nommez la contrainte que Claude a manquée, pas seulement que c'est mal. Une raison spécifique donne à Claude une contrainte concrète à satisfaire à la nouvelle tentative, au lieu de deviner à nouveau.",
1244 next: "Appuyez sur `Esc` deux fois pour ouvrir le menu de rembobinage et restaurer le code et la conversation afin que la nouvelle tentative commence propre"
1245 },
1246 "narrow-the-scope-of": {
1247 title: "Réduire la portée d'une modification",
1248 teaches: "Quand la direction est bonne mais la modification est devenue trop large, demandez à Claude de garder une partie plutôt que de rembobiner tout. Une limite énoncée empêche une petite correction de devenir une refactorisation."
1249 },
1250 "turn-a-correction-into": {
1251 title: "Transformer une correction en règle",
1252 teaches: "Une correction en chat n'est pas partagée avec votre équipe. Une règle dans le [CLAUDE.md](/fr/memory) du projet est partagée une fois que vous la validez, et Claude la lit au début de chaque session.",
1253 next: "Ouvrez `/memory` pour examiner ce que Claude a écrit"
1254 },
1255 "resolve-merge-conflicts": {
1256 title: "Résoudre les conflits de fusion",
1257 teaches: "Dites quel état vous voulez, pas quels marqueurs garder. Demander le raisonnement rend la fusion examinable au lieu d'une boîte noire."
1258 },
1259 "commit-with-a-generated": {
1260 title: "Valider avec un message généré",
1261 teaches: "Laissez Claude dériver le message du diff. Il correspond au style de commit existant de votre référentiel."
1262 },
1263 "open-a-pull-request": {
1264 title: "Ouvrir une demande de tirage à partir d'un ticket",
1265 teaches: "Ignorez le changement de contexte entre le suivi, l'éditeur et GitHub. Un prompt lit la spécification, effectue la modification et ouvre la PR."
1266 },
1267 "draft-release-notes-from": {
1268 title: "Rédiger les notes de sortie à partir de l'historique git",
1269 teaches: "Donnez deux points de référence et la structure que vous voulez. Claude lit le journal des commits entre eux et rédige un changelog que vous pouvez modifier.",
1270 next: "Enregistrez ceci en tant que compétence `/changelog`"
1271 },
1272 "write-a-ci-workflow": {
1273 title: "Écrire un flux de travail CI",
1274 teaches: "Décrivez quand il doit s'exécuter et ce qu'il doit faire ; le YAML est généré pour vous, adapté aux commandes de construction et de test de votre projet."
1275 },
1276 "find-and-fix-a": {
1277 title: "Trouver et corriger un test défaillant",
1278 teaches: "Décrivez le symptôme ; vous n'avez pas besoin de savoir quel fichier est cassé. Claude exécute le test pour voir l'échec, le trace dans la source et le corrige."
1279 },
1280 "investigate-a-reported-error": {
1281 title: "Enquêter sur une erreur signalée",
1282 teaches: "Décrivez le symptôme et l'emplacement ; Claude lit le chemin de code pertinent et trace les causes probables. Collez les traces de pile ou les journaux si vous les avez.",
1283 next: "Mettez un lien profond dans votre runbook qui ouvre Claude avec ce prompt pré-rempli"
1284 },
1285 "fix-a-build-error": {
1286 title: "Corriger une erreur de construction à la racine",
1287 teaches: "Demander la cause racine et la vérification empêche les correctifs de surface qui suppriment l'erreur sans la corriger."
1288 },
1289 "investigate-a-production-incident": {
1290 title: "Enquêter sur un incident de production",
1291 teaches: "Énumérez les sources de preuves à corréler, pas les étapes à suivre. Claude lit les journaux, l'historique git et la configuration ensemble pour réduire la cause.",
1292 next: "Connectez Sentry ou votre magasin de journaux via MCP"
1293 },
1294 "query-logs-in-plain": {
1295 title: "Interroger les journaux en anglais simple",
1296 teaches: "Posez la question au lieu d'écrire le SQL. Claude construit la requête, l'exécute contre vos journaux connectés et affiche à la fois la requête et le résultat afin que vous puissiez vérifier ce qui a été exécuté."
1297 },
1298 "diagnose-from-a-console": {
1299 title: "Diagnostiquer à partir d'une capture d'écran de console",
1300 teaches: "Les consoles cloud vous montrent le problème mais pas les commandes pour le corriger. Claude lit la capture d'écran et traduit le tableau de bord en commandes kubectl, gcloud ou aws à exécuter."
1301 },
1302 "analyze-a-data-file": {
1303 title: "Analyser un fichier de données",
1304 teaches: "Une question ponctuelle n'a pas besoin d'un script ponctuel. Pointez un fichier dans votre dossier de projet et Claude le lit directement, trouve les modèles et écrit la sortie où vous le demandez.",
1305 next: "Connectez la source de données via MCP au lieu d'exporter des fichiers"
1306 },
1307 "generate-variations-from-performance": {
1308 title: "Générer des variations à partir de données de performance",
1309 teaches: "Énoncez la contrainte au début afin que la génération reste dans la limite. Claude lit les métriques, choisit ce qu'il faut remplacer et produit des alternatives qui correspondent.",
1310 next: "Connectez la plateforme publicitaire via MCP au lieu d'exporter un fichier"
1311 },
1312 "turn-a-recurring-task": {
1313 title: "Transformer une tâche récurrente en compétence",
1314 teaches: "Nommez les étapes une fois ; réutilisez-les en tant que commande. Claude écrit une [compétence](/fr/skills) que n'importe qui dans votre équipe peut exécuter."
1315 },
1316 "add-a-hook-for": {
1317 title: "Ajouter un hook pour un comportement répété",
1318 teaches: "Les hooks rendent un comportement automatique au lieu de quelque chose que vous devez vous souvenir de demander. Décrivez le déclencheur et l'action et Claude écrit la configuration du [hook](/fr/hooks)."
1319 },
1320 "connect-a-tool-with": {
1321 title: "Connecter un outil avec MCP",
1322 teaches: "Connectez la source une fois au lieu de coller les données à chaque session. Après la configuration [MCP](/fr/mcp), Claude lit directement à partir de l'outil quand vous lui en parlez."
1323 },
1324 "capture-what-to-remember": {
1325 title: "Capturer ce qu'il faut retenir pour la prochaine fois",
1326 teaches: "Demandez avant d'oublier. Claude sait ce qu'il a dû comprendre cette session et propose des entrées [CLAUDE.md](/fr/memory) afin que la session suivante commence avec ce contexte."
1327 }
1328};
1329
1330<PromptLibrary text={text} labels={labels} tagLabels={tagLabels} phaseLabels={phaseLabels} sourceLabels={sourceLabels} catLabels={catLabels} />
1331
13<h2 id="what-makes-these-prompts-work">1332<h2 id="what-makes-these-prompts-work">
14 Ce qui rend ces prompts efficaces1333 Ce qui rend ces prompts efficaces
15</h2>1334</h2>