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 ticket in {tracker} for each one, with acceptance criteria',
112 slots: {
113 input: '@meeting-notes.md',
114 tracker: 'our issue tracker'
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 existing webhook handler',
155 new: 'a payments 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 ticket about {topic} in {tracker} and open a PR that implements it',
416 slots: {
417 tracker: 'our issue tracker',
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: 'our 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: 'connect {server} via MCP so you can read its {data} directly',
568 slots: {
569 server: 'our error tracker',
570 data: 'stack traces'
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) return undefined;
626 if (href[0] === '#' || href.startsWith('https://')) return href;
627 if (!(/^\/[A-Za-z0-9]/).test(href)) return undefined;
628 return base + (href.startsWith('/en/') ? '/' + locale + href.slice(3) : href);
629 };
630 }, []);
631 const SAFE_HREF = /^(\/(?![\/\\\s])|#|https?:\/\/)/;
632 const linkify = s => {
633 const out = [];
634 let last = 0;
635 const re = /\[([^\]]+)\]\(([^)]+)\)/g;
636 for (let m; m = re.exec(s); ) {
637 if (m.index > last) out.push(s.slice(last, m.index));
638 out.push(SAFE_HREF.test(m[2]) ? <a key={m.index} href={doc(m[2])}>{m[1]}</a> : m[1]);
639 last = re.lastIndex;
640 }
641 if (last < s.length) out.push(s.slice(last));
642 return out;
643 };
644 const codeify = s => s.split(/(`[^`]+`)/g).map((part, i) => part[0] === '`' ? <code key={i}>{part.slice(1, -1)}</code> : part);
645 const SOURCES = useMemo(() => ({
646 'workflows': '/en/common-workflows',
647 'teams': 'https://claude.com/blog/how-anthropic-teams-use-claude-code',
648 'legal': 'https://claude.com/blog/how-anthropic-uses-claude-legal',
649 'cybersecurity': 'https://claude.com/blog/how-anthropic-uses-claude-cybersecurity',
650 'best-practices': '/en/best-practices',
651 'ebook': 'https://resources.anthropic.com/hubfs/Scaling%20agentic%20coding%20across%20your%20organization.pdf'
652 }), []);
653 const [mounted, setMounted] = useState(false);
654 const [q, setQ] = useState('');
655 const [start, setStart] = useState(true);
656 const [sel, setSel] = useState(null);
657 const [openId, setOpenId] = useState(null);
658 const [copied, setCopied] = useState(null);
659 const [fills, setFills] = useState({});
660 const copyTimer = useRef(null);
661 useEffect(() => {
662 setMounted(true);
663 return () => clearTimeout(copyTimer.current);
664 }, []);
665 const setFill = (id, key, val) => setFills(f => ({
666 ...f,
667 [id + '.' + key]: val
668 }));
669 const fillOf = (p, key) => {
670 const v = fills[p.id + '.' + key];
671 return v !== undefined ? v : p.slots && p.slots[key] !== undefined ? p.slots[key] : '';
672 };
673 const assemble = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => fillOf(p, k) || p.slots && p.slots[k] || k);
674 const preview = p => p.prompt.replace(/\{(\w+)\}/g, (_, k) => p.slots && p.slots[k] || k);
675 const bodyText = p => preview(p) + ' ' + p.teaches.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1') + ' ' + (p.next || '');
676 const WIDE_RE = /[\u1100-\u115F\u2E80-\uA4CF\uAC00-\uD7A3\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFF60\uFFE0-\uFFE6]/g;
677 const widthFor = s => {
678 const t = typeof s === 'string' ? s : '';
679 return t.length + (t.match(WIDE_RE) || []).length + 3 + 'ch';
680 };
681 const ql = q.trim().toLowerCase();
682 const toggleTag = k => {
683 setStart(false);
684 setSel(s => !ql && s === k ? null : k);
685 };
686 const clear = () => {
687 setStart(false);
688 setSel(null);
689 setQ('');
690 };
691 const results = useMemo(() => {
692 const list = PROMPTS.filter(p => {
693 if (ql) return p.title.toLowerCase().includes(ql) || bodyText(p).toLowerCase().includes(ql);
694 if (start) return !!p.startN;
695 if (sel) return tagsOf(p).includes(sel);
696 return true;
697 });
698 if (ql) return list;
699 if (start) return list.sort((a, b) => a.startN - b.startN);
700 if (sel) return list.sort((a, b) => (a.roles || []).length - (b.roles || []).length || (b.sdlc === 'operate') - (a.sdlc === 'operate'));
701 return list;
702 }, [PROMPTS, ql, start, sel]);
703 const matchSnippet = p => {
704 if (!ql || p.title.toLowerCase().includes(ql)) return null;
705 const txt = bodyText(p);
706 const at = txt.toLowerCase().indexOf(ql);
707 if (at < 0) return null;
708 const lo = Math.max(0, at - 30), hi = Math.min(txt.length, at + ql.length + 50);
709 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 ? '…' : ''];
710 };
711 const grouped = useMemo(() => {
712 if (start && !q.trim()) return [];
713 const g = {};
714 for (const p of results) {
715 const key = p.sdlc + '|' + p.cat;
716 (g[key] = g[key] || ({
717 sdlc: p.sdlc,
718 cat: p.cat,
719 items: []
720 })).items.push(p);
721 }
722 return Object.values(g);
723 }, [results, start, q]);
724 const copy = async (str, id) => {
725 try {
726 await navigator.clipboard.writeText(str);
727 } catch {
728 const ta = document.createElement('textarea');
729 ta.value = str;
730 ta.setAttribute('readonly', '');
731 ta.style.position = 'fixed';
732 ta.style.opacity = '0';
733 document.body.appendChild(ta);
734 ta.select();
735 document.execCommand('copy');
736 document.body.removeChild(ta);
737 }
738 clearTimeout(copyTimer.current);
739 setCopied(id);
740 copyTimer.current = setTimeout(() => setCopied(null), 1600);
741 };
742 const promptBody = p => {
743 if (!p.slots) return <code>{p.prompt}</code>;
744 const parts = p.prompt.split(/(\{\w+\})/g);
745 return <code>
746 {parts.map((part, idx) => {
747 const m = part.match(/^\{(\w+)\}$/);
748 if (!m) return <span key={idx}>{part}</span>;
749 const k = m[1];
750 const val = fillOf(p, k);
751 return <input key={idx} type="text" className="pl-slot" value={val} placeholder={p.slots[k] || k} aria-label={k} style={{
752 width: widthFor(val || p.slots[k])
753 }} onChange={e => setFill(p.id, k, e.target.value)} onFocus={e => e.target.select()} onClick={e => e.stopPropagation()} />;
754 })}
755 </code>;
756 };
757 const card = p => {
758 const open = openId === p.id;
759 const srcHref = SOURCES[p.src];
760 const srcLabel = sourceLabels[p.src];
761 const snip = matchSnippet(p);
762 return <div key={p.id} className={'pl-card' + (open ? ' pl-open' : '')}>
763 <button type="button" className="pl-head" onClick={() => setOpenId(open ? null : p.id)} aria-expanded={open}>
764 <span className="pl-title">{p.title}</span>
765 {!!p.startN && <span className="pl-chip">{L.startHere} · {p.startN}</span>}
766 </button>
767 {snip ? <div className="pl-match">{snip}</div> : <code className="pl-prompt-preview">{preview(p)}</code>}
768 {open && <div className="pl-body">
769 <div className="pl-label">{p.slots ? L.fillAndCopy : L.copyThis}</div>
770 {p.needs && L.needs && L.needs[p.needs] && <div className="pl-hint pl-needs">
771 <span className="pl-needs-label">{L.needsLabel}</span> {linkify(L.needs[p.needs])}
772 </div>}
773 {p.paste && L.paste && L.paste[p.paste] && <div className="pl-hint pl-paste">{L.paste[p.paste]}</div>}
774 {p.slots && <div className="pl-hint">
775 {L.hintBefore} <span className="pl-hint-chip">{L.hintChip}</span> {L.hintAfter}
776 </div>}
777 <div className="pl-prompt-box">
778 <span className="pl-caret">{'❯'}</span>
779 {promptBody(p)}
780 <button type="button" className="pl-copy" onClick={() => copy(assemble(p), p.id)}>
781 {copied === p.id ? L.copied : L.copy}
782 </button>
783 </div>
784 <div className="pl-label">{L.whyWorks}</div>
785 <div className="pl-teaches">{linkify(p.teaches)}</div>
786 {p.nextHref && p.next && SAFE_HREF.test(p.nextHref) && <div className="pl-next">
787 <span className="pl-next-label">{L.makeItStick}</span>
788 <a href={doc(p.nextHref)}>{codeify(p.next)} →</a>
789 </div>}
790 {srcLabel && <div className="pl-src">{L.from} {srcHref ? <a href={doc(srcHref)}>{srcLabel}</a> : srcLabel}</div>}
791 </div>}
792 </div>;
793 };
794 const STYLES = useMemo(() => `
795.pl {
796 --pl-accent: #D97757;
797 --pl-accent-bg: rgba(217,119,87,0.07);
798 --pl-bg: #fff;
799 --pl-surface: #FAFAF7;
800 --pl-border: #E8E6DC;
801 --pl-border-subtle: rgba(31,30,29,0.08);
802 --pl-text: #141413;
803 --pl-text-2: #5E5D59;
804 --pl-text-3: #73726C;
805 --pl-text-4: #9C9A92;
806 --pl-mono: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
807 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, sans-serif;
808 font-size: 16px; color: var(--pl-text); margin: 8px 0 32px;
809}
810.dark .pl {
811 --pl-bg: #1f1e1d;
812 --pl-surface: #262624;
813 --pl-border: #3d3d3a;
814 --pl-border-subtle: rgba(240,238,230,0.08);
815 --pl-text: #f0eee6;
816 --pl-text-2: #bfbdb4;
817 --pl-text-3: #91908a;
818 --pl-text-4: #73726c;
819}
820.pl *, .pl *::before, .pl *::after { box-sizing: border-box; }
821.pl button { font-family: inherit; cursor: pointer; }
822.pl a { color: var(--pl-accent); text-decoration: none; }
823.pl a:hover { text-decoration: underline; }
824
825.pl-search {
826 display: flex; align-items: center; gap: 10px;
827 padding: 14px 18px; background: var(--pl-surface);
828 border: 1px solid var(--pl-border); border-radius: 12px;
829 margin-bottom: 14px;
830}
831.pl-search input {
832 flex: 1; border: none; outline: none; background: transparent;
833 font-size: 16px; color: var(--pl-text);
834}
835.pl-search input::placeholder { color: var(--pl-text-4); }
836
837.pl-tags { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-bottom: 18px; }
838.pl-tag {
839 padding: 7px 14px; border: 1px solid var(--pl-border); background: var(--pl-bg);
840 font-size: 14px; color: var(--pl-text-2); border-radius: 999px;
841}
842.pl-tag:hover { background: var(--pl-surface); }
843.pl-tag.pl-on { background: var(--pl-text); border-color: var(--pl-text); color: var(--pl-bg); }
844.pl-tag.pl-start { color: var(--pl-accent); font-weight: 500; }
845.pl-tag.pl-start.pl-on { background: var(--pl-accent); border-color: var(--pl-accent); color: #fff; }
846.pl-tags.pl-dim .pl-tag { opacity: 0.5; }
847.pl-tags.pl-dim .pl-tag:hover { opacity: 1; }
848.pl-sep { width: 1px; height: 22px; background: var(--pl-border); margin: 0 4px; }
849.pl-clear { border: none; background: none; font-size: 13px; color: var(--pl-text-4); padding: 4px 6px; }
850.pl-clear:hover { color: var(--pl-text-2); }
851.pl-count { margin-left: auto; font-size: 14px; color: var(--pl-text-4); }
852
853.pl-group-h {
854 font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase;
855 color: var(--pl-text-4); margin: 24px 0 12px;
856}
857.pl-group-h .pl-phase { color: var(--pl-text-3); }
858.pl-card {
859 border: 1px solid var(--pl-border-subtle); border-radius: 10px;
860 margin-bottom: 12px; background: var(--pl-bg); overflow: hidden;
861 padding: 14px 18px;
862}
863.pl-card.pl-open { border-color: var(--pl-border); background: var(--pl-surface); }
864.pl-head {
865 width: 100%; display: flex; align-items: baseline; gap: 12px;
866 border: none; background: transparent; text-align: left; padding: 0;
867}
868.pl-head:focus-visible { outline: 2px solid var(--pl-accent); outline-offset: 2px; border-radius: 6px; }
869.pl-title {
870 flex: 1; font-size: 17px; font-weight: 500; color: var(--pl-text);
871 white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
872}
873.pl-prompt-preview {
874 display: block; font-family: var(--pl-mono); font-size: 13.5px; color: var(--pl-text-3);
875 margin-top: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
876}
877.pl-chip {
878 font-size: 11px; letter-spacing: 0.05em; text-transform: uppercase;
879 padding: 3px 9px; border-radius: 999px; flex-shrink: 0;
880 background: var(--pl-accent-bg); color: var(--pl-accent);
881}
882
883.pl-body { margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--pl-border-subtle); }
884.pl-label {
885 font-size: 11.5px; letter-spacing: 0.08em; text-transform: uppercase;
886 color: var(--pl-text-4); margin: 12px 0 8px;
887}
888.pl-prompt-box {
889 display: flex; align-items: center; gap: 10px;
890 padding: 14px 16px; background: #141413; color: #f0eee6;
891 border-radius: 8px; font-family: var(--pl-mono); font-size: 15px;
892}
893.pl-caret { color: var(--pl-accent); flex-shrink: 0; }
894.pl-prompt-box code { flex: 1; background: none; padding: 0; color: inherit; white-space: pre-wrap; line-height: 1.9; }
895.pl-slot {
896 font-family: var(--pl-mono); font-size: inherit;
897 background: rgba(217,119,87,0.15); color: #f0eee6;
898 border: none; border-bottom: 1.5px dashed var(--pl-accent);
899 border-radius: 4px 4px 0 0; padding: 2px 6px; margin: 0 1px;
900 outline: none; min-width: 6ch; max-width: 100%;
901 box-sizing: content-box; cursor: text;
902}
903.pl-slot:hover { background: rgba(217,119,87,0.22); }
904.pl-slot:focus { background: rgba(217,119,87,0.28); border-bottom-style: solid; }
905.pl-slot::placeholder { color: rgba(240,238,230,0.4); font-style: italic; }
906.pl-hint { font-size: 14px; color: var(--pl-text-3); margin: 0 0 10px; }
907.pl-paste { color: var(--pl-text-2); }
908.pl-needs { color: var(--pl-text-2); }
909.pl-needs-label {
910 display: inline-block; font-size: 10.5px; letter-spacing: 0.06em;
911 text-transform: uppercase; padding: 2px 7px; margin-right: 6px;
912 border-radius: 4px; background: var(--pl-accent-bg); color: var(--pl-accent);
913}
914.pl-hint-chip {
915 font-family: var(--pl-mono); font-size: 0.92em;
916 background: var(--pl-accent-bg); color: var(--pl-accent);
917 border-bottom: 1.5px dashed var(--pl-accent);
918 border-radius: 3px 3px 0 0; padding: 1px 5px;
919}
920.pl-copy {
921 font-size: 12.5px; padding: 6px 12px; border-radius: 6px;
922 background: var(--pl-accent); color: #fff; border: none; flex-shrink: 0;
923}
924.pl-teaches { display: block; font-size: 15.5px; color: var(--pl-text-2); margin: 4px 0 0; line-height: 1.6; }
925.pl-match {
926 display: block; font-size: 13.5px; color: var(--pl-text-3);
927 margin-top: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
928}
929.pl-match mark { background: var(--pl-accent-bg); color: var(--pl-text); padding: 1px 2px; border-radius: 3px; }
930.pl-next {
931 display: flex; align-items: baseline; gap: 10px;
932 margin: 14px 0 0; padding: 10px 12px;
933 background: var(--pl-accent-bg); border-radius: 8px; font-size: 14.5px;
934}
935.pl-next-label {
936 font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase;
937 color: var(--pl-accent); font-weight: 600; flex-shrink: 0;
938}
939.pl-src { display: block; font-size: 14px; color: var(--pl-text-4); margin: 14px 0 0; }
940
941.pl-show-all {
942 display: block; width: 100%; padding: 14px; margin-top: 4px;
943 border: 1px dashed var(--pl-border); border-radius: 10px;
944 background: transparent; font-size: 15px; color: var(--pl-accent);
945 text-align: center;
946}
947.pl-show-all:hover { background: var(--pl-accent-bg); border-style: solid; }
948
949.pl-empty {
950 padding: 32px; text-align: center; color: var(--pl-text-4);
951 border: 1px dashed var(--pl-border); border-radius: 10px;
952}
953`, []);
954 if (!mounted) return <div className="pl" style={{
955 minHeight: 480
956 }} />;
957 return <div className="pl">
958 <style>{STYLES}</style>
959
960 <div className="pl-search">
961 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" style={{
962 color: 'var(--pl-text-4)'
963 }}>
964 <circle cx="11" cy="11" r="7" /><line x1="21" y1="21" x2="16.65" y2="16.65" />
965 </svg>
966 <input type="text" placeholder={L.search} value={q} onChange={e => {
967 setQ(e.target.value);
968 if (e.target.value) setStart(false);
969 }} aria-label={L.search} />
970 </div>
971
972 <div className={'pl-tags' + (ql ? ' pl-dim' : '')}>
973 <button type="button" className={'pl-tag pl-start' + (!ql && start ? ' pl-on' : '')} onClick={() => {
974 setQ('');
975 setStart(!start);
976 if (!start) setSel(null);
977 }}>
978 ★ {L.startHere}
979 </button>
980 <span className="pl-sep" />
981 {TAGS.map(k => <button key={k} type="button" aria-pressed={!ql && sel === k} className={'pl-tag' + (!ql && sel === k ? ' pl-on' : '')} onClick={() => {
982 setQ('');
983 toggleTag(k);
984 }}>
985 {TL(k)}
986 </button>)}
987 {(start || sel || q) && <button type="button" className="pl-clear" onClick={clear}>{L.clear}</button>}
988 <span className="pl-count">{results.length} {results.length === 1 ? L.prompt : L.prompts}</span>
989 </div>
990
991 {results.length === 0 ? <div className="pl-empty">
992 {L.noMatch} {ql ? <code>{q}</code> : null} <button type="button" className="pl-clear" onClick={clear}>{L.clear}</button>
993 </div> : !ql && start ? <div>
994 <div className="pl-group-h">{L.startHereHeader}</div>
995 {results.map(card)}
996 <button type="button" className="pl-show-all" onClick={clear}>
997 {L.showAll && L.showAll.replace('{n}', PROMPTS.length)} →
998 </button>
999 </div> : grouped.map(g => <div key={g.sdlc + '|' + g.cat}>
1000 <div className="pl-group-h"><span className="pl-phase">{phaseLabels[g.sdlc] || g.sdlc}</span> · {catLabels[g.cat] || g.cat}</div>
1001 {g.items.map(card)}
1002 </div>)}
1003 </div>;
1004};
1005
1006Ceci 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.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.
1007 10
1008Les prompts sont collectés à partir de divers guides Anthropic, notamment [Flux de travail courants](/docs/fr/common-workflows), [Bonnes pratiques](/docs/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.11Les prompts sont collectés à partir de divers guides Anthropic, notamment [Flux de travail courants](/docs/fr/common-workflows), [Bonnes pratiques](/docs/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.
1009 12
1010export const labels = {13## Ce qui rend ces prompts efficaces
1011 startHere: "Commencez ici",
1012 startHereHeader: "Cinq prompts à essayer en premier",
1013 showAll: "Afficher tous les {n} prompts",
1014 search: "Rechercher des prompts…",
1015 clear: "Effacer",
1016 prompt: "prompt",
1017 prompts: "prompts",
1018 noMatch: "Aucun prompt ne correspond",
1019 fillAndCopy: "Remplir et copier",
1020 copyThis: "Copier ce prompt",
1021 hintBefore: "Tapez dans le",
1022 hintChip: "champs en surbrillance",
1023 hintAfter: "pour personnaliser, puis copiez.",
1024 copy: "Copier",
1025 copied: "Copié",
1026 whyWorks: "Pourquoi cela fonctionne",
1027 makeItStick: "Rendez-le mémorable",
1028 from: "De",
1029 paste: {
1030 mockup: "Collez, glissez ou @-mentionnez votre image de maquette, puis envoyez ceci :",
1031 design: "Collez, glissez ou @-mentionnez votre image de conception, puis envoyez ceci :",
1032 screenshot: "Collez, glissez ou @-mentionnez votre capture d'écran, puis envoyez ceci :",
1033 plan: "Collez votre sortie de plan dans le prompt d'abord, puis envoyez ceci :",
1034 error: "Collez la sortie d'erreur dans le prompt d'abord, puis envoyez ceci :",
1035 csv: "Glissez votre fichier dans le prompt, ou remplacez le chemin ci-dessous par une @-mention de votre propre fichier :"
1036 },
1037 needsLabel: "Nécessite",
1038 needs: {
1039 tracker: "votre suivi de problèmes ajouté en tant que [connecteur claude.ai](/docs/fr/mcp#use-mcp-servers-from-claude-ai) ou [serveur MCP](/docs/fr/mcp).",
1040 gh: "la [CLI gh](https://cli.github.com) authentifiée, ou GitHub ajouté en tant que [connecteur claude.ai](/docs/fr/mcp#use-mcp-servers-from-claude-ai).",
1041 browser: "un moyen pour Claude de rendre et de capturer une capture d'écran du résultat. L'[application de bureau](/docs/fr/desktop#preview-your-app) a cela intégré. Dans le terminal, installez l'[extension Chrome](/docs/fr/chrome) ou un serveur [MCP](/docs/fr/mcp) Playwright.",
1042 db: "votre entrepôt de données ou magasin de journaux ajouté en tant que [connecteur claude.ai](/docs/fr/mcp#use-mcp-servers-from-claude-ai) ou [serveur MCP](/docs/fr/mcp)."
1043 }
1044};
1045
1046export const tagLabels = {
1047 understand: "Comprendre",
1048 plan: "Planifier",
1049 prototype: "Prototype",
1050 build: "Construire",
1051 test: "Tester",
1052 refactor: "Refactoriser",
1053 review: "Examiner",
1054 steer: "Diriger",
1055 debug: "Déboguer",
1056 git: "Git",
1057 release: "Sortie",
1058 data: "Données",
1059 automate: "Automatiser",
1060 pm: "Produit",
1061 design: "Conception",
1062 docs: "Docs",
1063 marketing: "Marketing",
1064 security: "Sécurité",
1065 ops: "Astreinte"
1066};
1067
1068export const phaseLabels = {
1069 discover: "Découvrir",
1070 design: "Concevoir",
1071 build: "Construire",
1072 ship: "Livrer",
1073 operate: "Exploiter"
1074};
1075
1076export const sourceLabels = {
1077 workflows: "Flux de travail courants",
1078 teams: "Comment les équipes Anthropic utilisent Claude Code",
1079 legal: "Comment Anthropic utilise Claude en Juridique",
1080 cybersecurity: "Comment Anthropic utilise Claude en Cybersécurité",
1081 "best-practices": "Bonnes pratiques",
1082 ebook: "Guide de codage agentique à l'échelle"
1083};
1084
1085export const catLabels = {
1086 Onboard: "Intégration",
1087 Understand: "Comprendre",
1088 Plan: "Planifier",
1089 Prototype: "Prototype",
1090 Implement: "Implémenter",
1091 Test: "Tester",
1092 Refactor: "Refactoriser",
1093 Review: "Examiner",
1094 Steer: "Diriger",
1095 Git: "Git",
1096 Release: "Sortie",
1097 Debug: "Déboguer",
1098 Incident: "Incident",
1099 Data: "Données",
1100 Automate: "Automatiser"
1101};
1102
1103export const text = {
1104 "get-oriented-in-a": {
1105 title: "S'orienter dans un nouveau dépôt",
1106 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.",
1107 next: "Exécutez `/init` pour configurer `CLAUDE.md` afin que Claude se souvienne de ceci à chaque session",
1108 prompt: "donnez-moi une vue d'ensemble de cette base de code : architecture, répertoires clés et façon dont les éléments s'articulent"
1109 },
1110 "explain-unfamiliar-code": {
1111 title: "Expliquer du code non familier",
1112 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.",
1113 next: "Définissez un style de sortie afin que Claude explique toujours dans votre format préféré",
1114 prompt: "expliquez ce que fait {path} et comment les données y circulent. rédigez cela comme {format}",
1115 slots: {
1116 path: "src/scheduler/queue.ts",
1117 format: "une page HTML avec un diagramme, puis ouvrez-la dans mon navigateur"
1118 }
1119 },
1120 "find-where-something-happens": {
1121 title: "Trouver où quelque chose se produit",
1122 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.",
1123 prompt: "où {behavior} ?",
1124 slots: {
1125 behavior: "validons-nous les types de fichiers téléversés"
1126 }
1127 },
1128 "see-what-depends-on": {
1129 title: "Vérifier ce qui se casse avant de supprimer",
1130 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.",
1131 prompt: "qu'est-ce qui casserait si je supprimais {target} ?",
1132 slots: {
1133 target: "le helper retryWithBackoff"
1134 }
1135 },
1136 "trace-how-code-evolved": {
1137 title: "Tracer l'évolution du code",
1138 teaches: "Pointez l'historique des commits quand la question est pourquoi, pas quoi. Claude lit le log et le blame de votre système de gestion de versions, quel qu'il soit, et explique les décisions derrière l'implémentation actuelle.",
1139 prompt: "parcourez l'historique des commits de {path} et résumez comment il a évolué et pourquoi",
1140 slots: {
1141 path: "internal/auth/session.go"
1142 }
1143 },
1144 "scope-a-change-before": {
1145 title: "Délimiter une modification avant de commencer",
1146 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.",
1147 prompt: "quels fichiers devrais-je modifier pour {change} ?",
1148 slots: {
1149 change: "ajouter un bouton de mode sombre dans les paramètres"
1150 }
1151 },
1152 "ask-the-codebase-a": {
1153 title: "Poser une question produit à la base de code",
1154 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.",
1155 next: "Définissez un style de sortie afin que Claude présente toujours les réponses à ce niveau",
1156 prompt: "je suis {role}. expliquez-moi étape par étape ce qui se passe quand un utilisateur {action}, de l'interface jusqu'au résultat",
1157 slots: {
1158 role: "PM",
1159 action: "clique sur Exporter en PDF"
1160 }
1161 },
1162 "plan-a-multi-file": {
1163 title: "Planifier une modification multi-fichiers avant de toucher au code",
1164 teaches: "Ajouter « ne modifiez rien pour l'instant » 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 passer en [mode plan](/docs/fr/permission-modes#analyze-before-you-edit-with-plan-mode).",
1165 prompt: "planifiez comment refactoriser le {target} pour {goal}. listez les fichiers que vous modifieriez, mais ne modifiez rien pour l'instant",
1166 slots: {
1167 target: "module de paiement",
1168 goal: "prendre en charge plusieurs devises"
1169 }
1170 },
1171 "draft-a-spec-by": {
1172 title: "Rédiger une spécification par entrevue",
1173 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.",
1174 next: "Enregistrez vos questions d'entrevue en tant que skill `/spec` afin que chaque spécification commence de la même façon",
1175 prompt: "je veux créer {feature}. interviewez-moi sur l'implémentation, l'UX, les cas limites et les compromis jusqu'à ce que nous ayons tout couvert, puis écrivez la spécification dans SPEC.md",
1176 slots: {
1177 feature: "des limites de débit par espace de travail"
1178 }
1179 },
1180 "turn-a-meeting-into": {
1181 title: "Transformer une réunion en tickets",
1182 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](/docs/fr/mcp), afin que vous examiniez les tickets, pas la transcription.",
1183 next: "Enregistrez ceci en tant que skill `/tickets`",
1184 prompt: "lisez {input} et rédigez les actions à mener, puis créez un ticket dans {tracker} pour chacune, avec des critères d'acceptation",
1185 slots: {
1186 input: "@meeting-notes.md",
1187 tracker: "notre outil de suivi des tickets"
1188 }
1189 },
1190 "map-edge-cases-before": {
1191 title: "Cartographier les cas limites avant de construire",
1192 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.",
1193 prompt: "listez les états d'erreur, les états vides et les cas limites de {feature} que la conception doit couvrir",
1194 slots: {
1195 feature: "le flux de téléversement de fichiers"
1196 }
1197 },
1198 "turn-a-mockup-into": {
1199 title: "Transformer une maquette en prototype fonctionnel",
1200 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.",
1201 prompt: "voici une maquette. créez un prototype fonctionnel sur lequel je peux cliquer, fidèle à la mise en page et aux états présentés"
1202 },
1203 "implement-from-a-screenshot": {
1204 title: "Implémenter à partir d'une capture d'écran et auto-vérifier",
1205 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.",
1206 next: "Utilisez `/goal` pour garder Claude itérant jusqu'à ce que les captures d'écran correspondent",
1207 prompt: "implémentez ce design, puis faites une capture d'écran du résultat, comparez-la à l'original et corrigez les différences"
1208 },
1209 "follow-an-existing-pattern": {
1210 title: "Suivre un modèle existant",
1211 teaches: "Pointez du code que vous aimez déjà. Sans référence, Claude utilise par défaut les bonnes pratiques générales. Avec une, il correspond aux conventions que votre base de code utilise réellement.",
1212 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",
1213 prompt: "regardez comment {example} est implémenté pour comprendre le modèle, puis créez {new} de la même façon",
1214 slots: {
1215 example: "le gestionnaire de webhooks existant",
1216 new: "un gestionnaire de webhooks de paiement"
1217 }
1218 },
1219 "add-a-small-well": {
1220 title: "Ajouter une petite fonctionnalité bien définie",
1221 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é.",
1222 prompt: "ajoutez un endpoint {endpoint} qui renvoie {payload}",
1223 slots: {
1224 endpoint: "/health",
1225 payload: "la version de l'application et sa durée de fonctionnement"
1226 }
1227 },
1228 "build-a-small-internal": {
1229 title: "Créer un petit outil interne à partir de zéro",
1230 teaches: "Vous n'avez pas besoin d'un projet, d'un framework ou d'une étape de build. Décrivez l'outil et demandez à Claude de l'ouvrir afin que vous le voyiez fonctionner immédiatement.",
1231 prompt: "créez un {tool} en HTML, CSS et JavaScript vanilla, puis ouvrez-le dans mon navigateur",
1232 slots: {
1233 tool: "tableau Kanban en glisser-déposer avec trois colonnes"
1234 }
1235 },
1236 "work-an-issue-end": {
1237 title: "Traiter un problème de bout en bout",
1238 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.",
1239 prompt: "lisez l'issue #{issue}, implémentez le correctif et lancez les tests",
1240 slots: {
1241 issue: "312"
1242 }
1243 },
1244 "find-and-update-copy": {
1245 title: "Trouver et mettre à jour le texte dans la base de code",
1246 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.",
1247 prompt: "trouvez chaque endroit où nous disons « {copy} » ou une variante proche, montrez-moi chacun dans son contexte, puis remplacez-les tous par « {new} ». ne touchez pas aux tests ni au changelog",
1248 slots: {
1249 copy: "Inscription gratuite",
1250 new: "Démarrer l'essai gratuit"
1251 }
1252 },
1253 "draft-from-past-examples": {
1254 title: "Rédiger un document à partir d'exemples passés",
1255 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.",
1256 next: "Enregistrez la voix en tant que skill afin que chaque brouillon commence là",
1257 prompt: "lisez les {examples} dans {folder} pour apprendre la structure et le ton, puis rédigez un nouveau document pour {topic}",
1258 slots: {
1259 examples: "analyses d'impact sur la vie privée",
1260 folder: "legal/pia/",
1261 topic: "la nouvelle intégration analytics"
1262 }
1263 },
1264 "write-tests-run-them": {
1265 title: "Écrire des tests, les exécuter, corriger les défaillances",
1266 teaches: "Demandez d'écrire, d'exécuter et de corriger ensemble afin que Claude itère sans s'arrêter pour les instructions.",
1267 next: "Exécutez `/init` afin que Claude apprenne automatiquement votre commande de test",
1268 prompt: "écrivez des tests pour {path}, exécutez-les et corrigez les échecs",
1269 slots: {
1270 path: "app/parsers/feed.py"
1271 }
1272 },
1273 "drive-implementation-from-tests": {
1274 title: "Piloter l'implémentation à partir des tests",
1275 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.",
1276 prompt: "écrivez d'abord des tests pour {feature}, puis implémentez-le jusqu'à ce qu'ils passent",
1277 slots: {
1278 feature: "le flux de réinitialisation du mot de passe"
1279 }
1280 },
1281 "fill-gaps-from-a": {
1282 title: "Combler les lacunes à partir d'un rapport de couverture",
1283 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.",
1284 next: "Définissez ceci en tant que `/goal` afin que Claude continue à écrire des tests jusqu'à ce que la couverture atteigne la cible",
1285 prompt: "lisez {report} et ajoutez des tests pour les fichiers les moins couverts jusqu'à ce que chacun dépasse {target} %",
1286 slots: {
1287 report: "coverage/coverage-summary.json",
1288 target: "80"
1289 }
1290 },
1291 "port-code-between-languages": {
1292 title: "Porter le code vers un autre langage",
1293 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.",
1294 prompt: "portez {source} en {target}, en conservant à l'identique {keep}",
1295 slots: {
1296 source: "ce module Python",
1297 target: "Rust",
1298 keep: "l'API publique et le comportement des tests"
1299 }
1300 },
1301 "generate-docs-for-code": {
1302 title: "Générer de la documentation pour du code non documenté",
1303 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.",
1304 prompt: "trouvez {scope} sans commentaires {format} et ajoutez-en, en respectant le style déjà utilisé dans le fichier",
1305 slots: {
1306 scope: "les fonctions publiques de src/auth/",
1307 format: "JSDoc"
1308 }
1309 },
1310 "migrate-a-pattern-across": {
1311 title: "Migrer un modèle dans la base de code",
1312 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é. Pour une migration sur plusieurs fichiers, exécutez [/batch](/docs/fr/commands). Claude divise le travail en unités pour que vous approuviez, puis les sous-agents d'arrière-plan effectuent les modifications.",
1313 prompt: "migrez tout de {from} vers {to} : identifiez chaque endroit à modifier, puis effectuez les modifications",
1314 slots: {
1315 from: "l'ancienne API de logging",
1316 to: "le logger structuré"
1317 }
1318 },
1319 "optimize-against-a-measurable": {
1320 title: "Optimiser par rapport à une cible mesurable",
1321 teaches: "Énoncer la métrique et la cible donne à Claude une définition claire de la fin.",
1322 next: "Définissez ceci en tant que `/goal` afin que Claude continue à mesurer et itérer jusqu'à ce qu'il atteigne le nombre",
1323 prompt: "optimisez {target} pour faire passer {metric} de {current} à moins de {goal}",
1324 slots: {
1325 target: "la requête de recherche",
1326 metric: "la latence p95",
1327 current: "2s",
1328 goal: "500ms"
1329 }
1330 },
1331 "fix-a-precise-visual": {
1332 title: "Corriger un bug visuel précis",
1333 teaches: "Un retour visuel précis obtient une correction précise. Énoncez l'élément exact, la mesure et la fenêtre d'affichage.",
1334 next: "Ajoutez un outil d'aperçu afin que Claude capture une capture d'écran et vérifie la correction lui-même",
1335 prompt: "le {element} dépasse de {amount} du {container} sur {viewport}. corrigez-le.",
1336 slots: {
1337 element: "bouton de connexion",
1338 amount: "20px",
1339 container: "bord de la carte",
1340 viewport: "mobile"
1341 }
1342 },
1343 "review-your-changes-before": {
1344 title: "Examiner vos modifications avant de faire un commit",
1345 teaches: "Repérez les problèmes tant qu'ils demandent moins de travail à 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.",
1346 next: "Exécutez `/code-review` pour la même vérification en une commande",
1347 prompt: "examinez mes modifications non commitées et signalez tout ce qui semble risqué avant que je fasse un commit"
1348 },
1349 "review-a-pull-request": {
1350 title: "Examiner une pull request",
1351 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'une revue limitée au diff manquerait.",
1352 next: "Exécutez `/code-review <pr#>` en une commande, ou activez Code Review pour chaque PR",
1353 prompt: "examinez la PR #{pr}, résumez ce qui a changé, puis listez vos réserves",
1354 slots: {
1355 pr: "247"
1356 }
1357 },
1358 "review-infrastructure-changes-before": {
1359 title: "Examiner les modifications d'infrastructure avant d'appliquer",
1360 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.",
1361 prompt: "voici la sortie de mon plan Terraform. que va-t-il faire, et y a-t-il quelque chose ici qui va poser problème ?"
1362 },
1363 "run-a-security-review": {
1364 title: "Exécuter un examen de sécurité avec un sous-agent",
1365 teaches: "Un [sous-agent](/docs/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.",
1366 next: "Configurez un sous-agent security-review dédié que toute votre équipe peut utiliser",
1367 prompt: "utilisez un sous-agent pour examiner {path} à la recherche de problèmes de sécurité et rapportez ce qu'il trouve",
1368 slots: {
1369 path: "src/api/"
1370 }
1371 },
1372 "review-content-before-sending": {
1373 title: "Attraper les problèmes avant l'examen formel",
1374 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.",
1375 next: "Capturez votre liste de contrôle d'examen en tant que skill que toute votre équipe peut exécuter",
1376 prompt: "examinez {file} pour détecter {concerns} et listez tout ce que je devrais corriger avant de l'envoyer à {reviewer}",
1377 slots: {
1378 file: "launch-post.md",
1379 concerns: "les affirmations non étayées, les attributions manquantes et les écarts par rapport à la charte de marque",
1380 reviewer: "l'équipe juridique"
1381 }
1382 },
1383 "course-correct-a-wrong": {
1384 title: "Corriger une mauvaise approche",
1385 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.",
1386 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",
1387 prompt: "ce n'est pas correct : {feedback}. essayez une approche différente",
1388 slots: {
1389 feedback: "la signature de la fonction doit rester rétrocompatible"
1390 }
1391 },
1392 "narrow-the-scope-of": {
1393 title: "Réduire la portée d'une modification",
1394 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.",
1395 prompt: "c'est trop. conservez uniquement les modifications apportées à {scope} et annulez vos autres changements",
1396 slots: {
1397 scope: "la logique de validation dans src/forms/"
1398 }
1399 },
1400 "turn-a-correction-into": {
1401 title: "Transformer une correction en règle",
1402 teaches: "Une correction en chat n'est pas partagée avec votre équipe. Une règle dans le [CLAUDE.md](/docs/fr/memory) du projet est partagée une fois que vous en avez fait un commit, et Claude la lit au début de chaque session.",
1403 next: "Ouvrez `/memory` pour examiner ce que Claude a écrit",
1404 prompt: "vous continuez à {mistake}. ajoutez une règle dans CLAUDE.md pour que cela cesse",
1405 slots: {
1406 mistake: "utiliser des exports par défaut alors que ce projet utilise des exports nommés"
1407 }
1408 },
1409 "resolve-merge-conflicts": {
1410 title: "Résoudre les conflits de fusion",
1411 teaches: "Dites quel état vous voulez, pas quels marqueurs garder. Demander le raisonnement rend la fusion examinable au lieu d'une boîte noire.",
1412 prompt: "résolvez les conflits de fusion de cette branche et expliquez ce que vous avez conservé de chaque côté"
1413 },
1414 "commit-with-a-generated": {
1415 title: "Faire un commit avec un message généré",
1416 teaches: "Laissez Claude dériver le message du diff. Il correspond au style de commit existant de votre dépôt.",
1417 prompt: "faites un commit de ces modifications avec un message qui résume ce que j'ai fait"
1418 },
1419 "open-a-pull-request": {
1420 title: "Ouvrir une pull request à partir d'un ticket",
1421 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.",
1422 prompt: "trouvez le ticket concernant {topic} dans {tracker} et ouvrez une PR qui l'implémente",
1423 slots: {
1424 tracker: "notre outil de suivi des tickets",
1425 topic: "le délai d'expiration de connexion"
1426 }
1427 },
1428 "draft-release-notes-from": {
1429 title: "Rédiger les notes de sortie à partir de l'historique git",
1430 teaches: "Donnez deux points de référence et la structure que vous voulez. Claude lit le log des commits entre eux et rédige un changelog que vous pouvez modifier.",
1431 next: "Enregistrez ceci en tant que skill `/changelog`",
1432 prompt: "comparez {from} à {to} et rédigez des notes de sortie regroupées par fonctionnalité, correctif et changement non rétrocompatible",
1433 slots: {
1434 from: "v2.3.0",
1435 to: "v2.4.0"
1436 }
1437 },
1438 "write-a-ci-workflow": {
1439 title: "Écrire un workflow CI",
1440 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 build et de test de votre projet.",
1441 prompt: "écrivez un workflow GitHub Actions qui {steps} à chaque push sur {branch}",
1442 slots: {
1443 steps: "exécute les tests et déploie en staging",
1444 branch: "main"
1445 }
1446 },
1447 "find-and-fix-a": {
1448 title: "Trouver et corriger un test défaillant",
1449 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.",
1450 prompt: "le test {test} échoue, trouvez pourquoi et corrigez-le",
1451 slots: {
1452 test: "UserAuth"
1453 }
1454 },
1455 "investigate-a-reported-error": {
1456 title: "Enquêter sur une erreur signalée",
1457 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.",
1458 next: "Mettez un lien profond dans votre runbook qui ouvre Claude avec ce prompt pré-rempli",
1459 prompt: "les utilisateurs rencontrent des {symptom} sur {where}. enquêtez et dites-moi ce qui se passe",
1460 slots: {
1461 symptom: "erreurs 500",
1462 where: "/api/settings"
1463 }
1464 },
1465 "fix-a-build-error": {
1466 title: "Corriger une erreur de build à la racine",
1467 teaches: "Demander la cause racine et la vérification empêche les correctifs de surface qui suppriment l'erreur sans la corriger.",
1468 prompt: "voici une erreur de build. corrigez la cause racine et vérifiez que le build réussit"
1469 },
1470 "investigate-a-production-incident": {
1471 title: "Enquêter sur un incident de production",
1472 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.",
1473 next: "Connectez votre outil de suivi des erreurs ou votre magasin de journaux via MCP",
1474 prompt: "{symptom}. vérifiez les logs, les déploiements récents et les changements de configuration, puis dites-moi la cause la plus probable",
1475 slots: {
1476 symptom: "l'endpoint de checkout a commencé à renvoyer des erreurs 500 il y a une heure"
1477 }
1478 },
1479 "query-logs-in-plain": {
1480 title: "Interroger les journaux en langage naturel",
1481 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é.",
1482 prompt: "montrez-moi tous les {events} pour {scope} sur {timeframe}. écrivez la requête, exécutez-la et dites-moi ce qui ressort",
1483 slots: {
1484 events: "échecs de connexion",
1485 scope: "le service d'authentification",
1486 timeframe: "les dernières 24 heures"
1487 }
1488 },
1489 "diagnose-from-a-console": {
1490 title: "Diagnostiquer à partir d'une capture d'écran de console",
1491 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.",
1492 prompt: "voici une capture d'écran de {console}. expliquez-moi pourquoi {resource} échoue et donnez-moi les commandes exactes pour le corriger",
1493 slots: {
1494 console: "notre tableau de bord Kubernetes",
1495 resource: "ce pod"
1496 }
1497 },
1498 "analyze-a-data-file": {
1499 title: "Analyser un fichier de données",
1500 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.",
1501 next: "Connectez la source de données via MCP au lieu d'exporter des fichiers",
1502 prompt: "lisez {file}, résumez les principales tendances et écrivez les résultats dans {output}",
1503 slots: {
1504 file: "@reports/q1-signups.csv",
1505 output: "une page HTML avec des graphiques, puis ouvrez-la dans mon navigateur"
1506 }
1507 },
1508 "generate-variations-from-performance": {
1509 title: "Générer des variations à partir de données de performance",
1510 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.",
1511 next: "Connectez la plateforme publicitaire via MCP au lieu d'exporter un fichier",
1512 prompt: "lisez {file}, trouvez les {items} les moins performants et générez {n} nouvelles variantes de moins de {limit} caractères",
1513 slots: {
1514 file: "@ads-performance.csv",
1515 items: "titres",
1516 n: "20",
1517 limit: "90"
1518 }
1519 },
1520 "turn-a-recurring-task": {
1521 title: "Transformer une tâche récurrente en skill",
1522 teaches: "Nommez les étapes une fois ; réutilisez-les en tant que commande. Claude écrit un [skill](/docs/fr/skills) que n'importe qui dans votre équipe peut exécuter.",
1523 prompt: "créez un skill /{name} pour ce projet qui {steps}",
1524 slots: {
1525 name: "ship",
1526 steps: "exécute le linter et les tests, puis rédige un message de commit"
1527 }
1528 },
1529 "add-a-hook-for": {
1530 title: "Ajouter un hook pour un comportement répété",
1531 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](/docs/fr/hooks).",
1532 prompt: "écrivez un hook qui {action} après chaque {event}",
1533 slots: {
1534 action: "exécute prettier",
1535 event: "modification d'un fichier .ts ou .tsx"
1536 }
1537 },
1538 "connect-a-tool-with": {
1539 title: "Connecter un outil avec MCP",
1540 teaches: "Connectez la source une fois au lieu de coller les données à chaque session. Après la configuration [MCP](/docs/fr/mcp), Claude lit directement à partir de l'outil quand vous lui en parlez.",
1541 prompt: "connectez {server} via MCP afin de pouvoir lire directement ses {data}",
1542 slots: {
1543 server: "notre outil de suivi des erreurs",
1544 data: "traces de pile"
1545 }
1546 },
1547 "capture-what-to-remember": {
1548 title: "Capturer ce qu'il faut retenir pour la prochaine fois",
1549 teaches: "Demandez avant d'oublier. Claude sait ce qu'il a dû comprendre cette session et propose des entrées [CLAUDE.md](/docs/fr/memory) afin que la session suivante commence avec ce contexte.",
1550 prompt: "résumez ce que nous avons fait pendant cette session et suggérez ce qu'il faut ajouter à CLAUDE.md"
1551 }
1552};
1553
1554<PromptLibrary text={text} labels={labels} tagLabels={tagLabels} phaseLabels={phaseLabels} sourceLabels={sourceLabels} catLabels={catLabels} />
1555
1556<h2 id="what-makes-these-prompts-work">
1557 Ce qui rend ces prompts efficaces
1558</h2>
1559 14
1560Les prompts ci-dessus partagent quelques modèles. Les reconnaître vous aide à adapter n'importe quel prompt ici à votre propre tâche.15Les prompts ci-dessus partagent quelques modèles. Les reconnaître vous aide à adapter n'importe quel prompt ici à votre propre tâche.
1561 16
1597 52
1598Pour plus sur chaque modèle, voir [bonnes pratiques](/docs/fr/best-practices).53Pour plus sur chaque modèle, voir [bonnes pratiques](/docs/fr/best-practices).
1599 54
1600<h2 id="where-these-come-from">55## D'où viennent ceux-ci
1601 D'où viennent ceux-ci
1602</h2>
1603 56
1604Ces prompts sont basés sur des modèles de ressources Anthropic publiées. Chaque carte renvoie à sa source :57Ces prompts sont basés sur des modèles de ressources Anthropic publiées. Chaque carte renvoie à sa source :
1605 58
1610 63
1611Pour des présentations vidéo de ces modèles, voir le cours gratuit [Claude Code in Action](https://academy.claude.com/courses/claude-code-in-action) sur [Claude Academy](https://academy.claude.com/).64Pour des présentations vidéo de ces modèles, voir le cours gratuit [Claude Code in Action](https://academy.claude.com/courses/claude-code-in-action) sur [Claude Academy](https://academy.claude.com/).
1612 65
1613<h2 id="related-resources">66## Ressources connexes
1614 Ressources connexes
1615</h2>
1616 67
1617Les prompts sur cette page sont des points de départ. Une fois qu'un fonctionne pour votre projet, l'étape suivante est de le rendre répétable : enregistrez-le en tant que [compétence](/docs/fr/skills) afin que n'importe qui dans votre équipe puisse l'exécuter en tant que `/commande`, et enregistrez les conventions que Claude a apprises dans [CLAUDE.md](/docs/fr/memory) afin que chaque session commence avec ce contexte au lieu que Claude le réapprenne. Pour les modifications plus grandes ou plus risquées, [mode plan](/docs/fr/permission-modes#analyze-before-you-edit-with-plan-mode) vous montre la liste des fichiers avant que des modifications ne se produisent.68Les prompts sur cette page sont des points de départ. Une fois qu'un fonctionne pour votre projet, l'étape suivante est de le rendre répétable : enregistrez-le en tant que [compétence](/docs/fr/skills) afin que n'importe qui dans votre équipe puisse l'exécuter en tant que `/commande`, et enregistrez les conventions que Claude a apprises dans [CLAUDE.md](/docs/fr/memory) afin que chaque session commence avec ce contexte au lieu que Claude le réapprenne. Pour les modifications plus grandes ou plus risquées, [mode plan](/docs/fr/permission-modes#analyze-before-you-edit-with-plan-mode) vous montre la liste des fichiers avant que des modifications ne se produisent.
1618 69