6 6
7> Salin-tempel prompt untuk Claude Code, diberi tag berdasarkan tugas dan peran.7> Salin-tempel prompt untuk Claude Code, diberi tag berdasarkan tugas dan peran.
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
1006Ini adalah perpustakaan prompt untuk disalin ke Claude Code. Gunakan untuk mengeksplorasi cara kerja yang belum pernah Anda coba, atau ketika Anda tidak yakin harus mulai dari mana.9Ini adalah perpustakaan prompt untuk disalin ke Claude Code. Gunakan untuk mengeksplorasi cara kerja yang belum pernah Anda coba, atau ketika Anda tidak yakin harus mulai dari mana.
1007 10
1008Prompt dikumpulkan dari berbagai panduan Anthropic, termasuk [Common workflows](/docs/id/common-workflows), [Best practices](/docs/id/best-practices), dan [How Anthropic teams use Claude Code](https://claude.com/blog/how-anthropic-teams-use-claude-code). Ini adalah titik awal, bukan skrip. Buka **Why this works** di bawah prompt apa pun untuk melihat pola di baliknya sehingga Anda dapat menulis prompt Anda sendiri.11Prompt dikumpulkan dari berbagai panduan Anthropic, termasuk [Common workflows](/docs/id/common-workflows), [Best practices](/docs/id/best-practices), dan [How Anthropic teams use Claude Code](https://claude.com/blog/how-anthropic-teams-use-claude-code). Ini adalah titik awal, bukan skrip. Buka **Why this works** di bawah prompt apa pun untuk melihat pola di baliknya sehingga Anda dapat menulis prompt Anda sendiri.
1009 12
1010export const labels = {13## Apa yang membuat prompt ini berhasil
1011 startHere: "Mulai dari sini",
1012 startHereHeader: "Lima prompt untuk dicoba terlebih dahulu",
1013 showAll: "Tampilkan semua {n} prompt",
1014 search: "Cari prompt…",
1015 clear: "Hapus",
1016 prompt: "prompt",
1017 prompts: "prompt",
1018 noMatch: "Tidak ada prompt yang cocok",
1019 fillAndCopy: "Isi dan salin",
1020 copyThis: "Salin prompt ini",
1021 hintBefore: "Ketik di",
1022 hintChip: "bidang yang disorot",
1023 hintAfter: "untuk menyesuaikan, lalu salin.",
1024 copy: "Salin",
1025 copied: "Disalin",
1026 whyWorks: "Mengapa ini berhasil",
1027 makeItStick: "Buat tetap berkesan",
1028 from: "Dari",
1029 paste: {
1030 mockup: "Tempel, seret, atau @-mention gambar mockup Anda, lalu kirim ini:",
1031 design: "Tempel, seret, atau @-mention gambar desain Anda, lalu kirim ini:",
1032 screenshot: "Tempel, seret, atau @-mention tangkapan layar Anda, lalu kirim ini:",
1033 plan: "Tempel output rencana Anda ke prompt terlebih dahulu, lalu kirim ini:",
1034 error: "Tempel output kesalahan ke prompt terlebih dahulu, lalu kirim ini:",
1035 csv: "Seret file Anda ke prompt, atau ganti jalur di bawah dengan @-mention milik Anda sendiri:"
1036 },
1037 needsLabel: "Membutuhkan",
1038 needs: {
1039 tracker: "pelacak masalah Anda ditambahkan sebagai [konektor claude.ai](/docs/id/mcp#use-mcp-servers-from-claude-ai) atau [server MCP](/docs/id/mcp).",
1040 gh: "[gh CLI](https://cli.github.com) yang diautentikasi, atau GitHub ditambahkan sebagai [konektor claude.ai](/docs/id/mcp#use-mcp-servers-from-claude-ai).",
1041 browser: "cara bagi Claude untuk merender dan mengambil tangkapan layar hasilnya. [Aplikasi Desktop](/docs/id/desktop#preview-your-app) memiliki ini bawaan. Di terminal, instal [ekstensi Chrome](/docs/id/chrome) atau server [MCP](/docs/id/mcp) Playwright.",
1042 db: "gudang data atau penyimpanan log Anda ditambahkan sebagai [konektor claude.ai](/docs/id/mcp#use-mcp-servers-from-claude-ai) atau [server MCP](/docs/id/mcp)."
1043 }
1044};
1045
1046export const tagLabels = {
1047 understand: "Pahami",
1048 plan: "Rencanakan",
1049 prototype: "Prototipe",
1050 build: "Bangun",
1051 test: "Uji",
1052 refactor: "Refaktor",
1053 review: "Tinjau",
1054 steer: "Kemudi",
1055 debug: "Debug",
1056 git: "Git",
1057 release: "Rilis",
1058 data: "Data",
1059 automate: "Otomatisasi",
1060 pm: "Produk",
1061 design: "Desain",
1062 docs: "Dokumen",
1063 marketing: "Pemasaran",
1064 security: "Keamanan",
1065 ops: "On-call"
1066};
1067
1068export const phaseLabels = {
1069 discover: "Temukan",
1070 design: "Desain",
1071 build: "Bangun",
1072 ship: "Kirim",
1073 operate: "Operasikan"
1074};
1075
1076export const sourceLabels = {
1077 workflows: "Common workflows",
1078 teams: "How Anthropic teams use Claude Code",
1079 legal: "How Anthropic uses Claude in Legal",
1080 cybersecurity: "How Anthropic uses Claude in Cybersecurity",
1081 "best-practices": "Best practices",
1082 ebook: "Scaling agentic coding guide"
1083};
1084
1085export const catLabels = {
1086 Onboard: "Onboard",
1087 Understand: "Pahami",
1088 Plan: "Rencanakan",
1089 Prototype: "Prototipe",
1090 Implement: "Implementasikan",
1091 Test: "Uji",
1092 Refactor: "Refaktor",
1093 Review: "Tinjau",
1094 Steer: "Kemudi",
1095 Git: "Git",
1096 Release: "Rilis",
1097 Debug: "Debug",
1098 Incident: "Insiden",
1099 Data: "Data",
1100 Automate: "Otomatisasi"
1101};
1102
1103export const text = {
1104 "get-oriented-in-a": {
1105 title: "Orientasi diri di repositori baru",
1106 teaches: "Jelaskan apa yang ingin Anda ketahui, bukan file mana yang harus dibaca. Claude mengeksplorasi proyek sendiri dan mengembalikan ringkasan tentang bagaimana semuanya cocok bersama.",
1107 next: "Jalankan `/init` untuk menyiapkan `CLAUDE.md` sehingga Claude mengingat ini setiap sesi",
1108 prompt: "berikan saya gambaran umum tentang codebase ini: arsitektur, direktori utama, dan bagaimana bagian-bagiannya saling terhubung"
1109 },
1110 "explain-unfamiliar-code": {
1111 title: "Jelaskan kode yang tidak familiar",
1112 teaches: "Sebutkan file dan katakan format apa yang Anda inginkan jawabannya. Tukar halaman HTML dengan diagram, poin-poin, atau apa pun yang sesuai dengan cara Anda belajar.",
1113 next: "Atur gaya output sehingga Claude selalu menjelaskan dalam format pilihan Anda",
1114 prompt: "jelaskan apa yang dilakukan {path} dan bagaimana data mengalir melaluinya. tuliskan sebagai {format}",
1115 slots: {
1116 path: "src/scheduler/queue.ts",
1117 format: "halaman HTML dengan diagram, lalu buka di browser saya"
1118 }
1119 },
1120 "find-where-something-happens": {
1121 title: "Temukan di mana sesuatu terjadi",
1122 teaches: "Cari berdasarkan perilaku, bukan nama file. Pencarian bekerja bahkan ketika Anda tidak tahu apa nama file atau direktori mana yang ditempatinya.",
1123 prompt: "di mana kita {behavior}?",
1124 slots: {
1125 behavior: "memvalidasi jenis file yang diunggah"
1126 }
1127 },
1128 "see-what-depends-on": {
1129 title: "Periksa apa yang rusak sebelum Anda menghapus",
1130 teaches: "Tanya sebelum Anda menghapus apa pun. Daftar pemanggil dan efek hilir memberi tahu Anda apakah Anda melihat pembersihan satu baris atau perubahan yang perlu Anda koordinasikan.",
1131 prompt: "apa yang akan rusak jika saya menghapus {target}?",
1132 slots: {
1133 target: "helper retryWithBackoff"
1134 }
1135 },
1136 "trace-how-code-evolved": {
1137 title: "Lacak bagaimana kode berkembang",
1138 teaches: "Tunjuk riwayat commit ketika pertanyaannya adalah mengapa, bukan apa. Claude membaca log dan blame untuk versi kontrol apa pun yang Anda gunakan dan menjelaskan keputusan di balik implementasi saat ini.",
1139 prompt: "telusuri riwayat commit dari {path} dan ringkas bagaimana file tersebut berkembang dan mengapa",
1140 slots: {
1141 path: "internal/auth/session.go"
1142 }
1143 },
1144 "scope-a-change-before": {
1145 title: "Tentukan cakupan perubahan sebelum Anda mulai",
1146 teaches: "Ukur pekerjaan sebelum Anda memasukkannya ke roadmap. Daftar file memberi tahu Anda apakah Anda melihat satu komponen atau perubahan lintas-potong.",
1147 prompt: "file mana yang perlu saya ubah untuk {change}?",
1148 slots: {
1149 change: "menambahkan toggle mode gelap ke pengaturan"
1150 }
1151 },
1152 "ask-the-codebase-a": {
1153 title: "Tanyakan pertanyaan produk kepada codebase",
1154 teaches: "Nyatakan peran Anda sehingga jawaban berada pada tingkat yang tepat. Claude menjelaskan apa yang sebenarnya dilakukan produk dari kode sumber, tanpa Anda perlu membacanya.",
1155 next: "Atur gaya output sehingga Claude selalu menyampaikan jawaban pada tingkat ini",
1156 prompt: "saya seorang {role}. jelaskan kepada saya apa yang terjadi ketika pengguna {action}, dari UI hingga hasilnya",
1157 slots: {
1158 role: "PM",
1159 action: "mengklik Export to PDF"
1160 }
1161 },
1162 "plan-a-multi-file": {
1163 title: "Rencanakan perubahan multi-file sebelum menyentuh kode",
1164 teaches: "Menambahkan \"jangan edit dulu\" memisahkan eksplorasi dari perubahan, sehingga Anda melihat pendekatannya sebelum kode bergerak. Untuk membuat rencana-pertama menjadi default pada setiap prompt, tekan Shift+Tab untuk [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode).",
1165 prompt: "rencanakan cara me-refactor {target} untuk {goal}. daftar file yang akan Anda ubah, tetapi jangan edit apa pun dulu",
1166 slots: {
1167 target: "modul pembayaran",
1168 goal: "mendukung beberapa mata uang"
1169 }
1170 },
1171 "draft-a-spec-by": {
1172 title: "Buat draf spesifikasi melalui wawancara",
1173 teaches: "Minta untuk diwawancarai alih-alih menulis spesifikasi sendiri. Claude mengajukan pertanyaan terstruktur kepada Anda sampai persyaratan lengkap, lalu menulis hasilnya ke file.",
1174 next: "Simpan pertanyaan wawancara Anda sebagai skill `/spec` sehingga setiap spesifikasi dimulai dengan cara yang sama",
1175 prompt: "saya ingin membangun {feature}. wawancarai saya tentang implementasi, UX, kasus tepi, dan tradeoff sampai kita telah membahas semuanya, lalu tulis spesifikasinya ke SPEC.md",
1176 slots: {
1177 feature: "rate limit per workspace"
1178 }
1179 },
1180 "turn-a-meeting-into": {
1181 title: "Ubah pertemuan menjadi tiket",
1182 teaches: "Lewati langkah transkripsi. Claude menarik item tindakan dari input yang tidak terstruktur dan menulisnya langsung ke pelacak Anda melalui [MCP](/docs/id/mcp), sehingga Anda meninjau tiket, bukan transkrip.",
1183 next: "Simpan ini sebagai skill `/tickets`",
1184 prompt: "baca {input} dan tuliskan item tindakannya, lalu buat tiket di {tracker} untuk masing-masing, dengan kriteria penerimaan",
1185 slots: {
1186 input: "@meeting-notes.md",
1187 tracker: "pelacak masalah kami"
1188 }
1189 },
1190 "map-edge-cases-before": {
1191 title: "Petakan kasus tepi sebelum membangun",
1192 teaches: "Tanyakan apa yang hilang, bukan apa yang ada. Claude mencantumkan status kesalahan, status kosong, dan kasus tepi yang cenderung dilewatkan desain jalur bahagia.",
1193 prompt: "daftar status kesalahan, status kosong, dan kasus tepi untuk {feature} yang perlu dicakup oleh desain",
1194 slots: {
1195 feature: "alur unggah file"
1196 }
1197 },
1198 "turn-a-mockup-into": {
1199 title: "Ubah mockup menjadi prototipe yang berfungsi",
1200 teaches: "Prototipe yang dapat diklik menjawab pertanyaan yang tidak dapat dijawab mockup statis. Serahkan kode yang berfungsi kepada teknik alih-alih menjelaskan interaksi dalam dokumen.",
1201 prompt: "ini adalah mockup. bangun prototipe yang berfungsi yang dapat saya klik, sesuai dengan tata letak dan status yang ditampilkan"
1202 },
1203 "implement-from-a-screenshot": {
1204 title: "Implementasikan dari tangkapan layar dan periksa sendiri",
1205 teaches: "Ini memberikan Claude loop verifikasi: ia merender, membandingkan dengan gambar sumber, dan mengulangi tanpa Anda menunjukkan setiap celah.",
1206 next: "Gunakan `/goal` untuk membuat Claude terus mengulangi sampai tangkapan layar cocok",
1207 prompt: "implementasikan desain ini, lalu ambil tangkapan layar hasilnya, bandingkan dengan aslinya, dan perbaiki perbedaan apa pun"
1208 },
1209 "follow-an-existing-pattern": {
1210 title: "Ikuti pola yang ada",
1211 teaches: "Tunjuk kode yang sudah Anda sukai. Tanpa referensi, Claude menggunakan praktik terbaik umum. Dengan satu, itu cocok dengan konvensi yang sebenarnya digunakan codebase Anda.",
1212 next: "Minta Claude untuk menulis pola yang diikutinya ke `CLAUDE.md` sehingga sesi mendatang cocok tanpa referensi",
1213 prompt: "lihat bagaimana {example} diimplementasikan untuk memahami polanya, lalu bangun {new} dengan cara yang sama",
1214 slots: {
1215 example: "handler webhook yang sudah ada",
1216 new: "handler webhook pembayaran"
1217 }
1218 },
1219 "add-a-small-well": {
1220 title: "Tambahkan fitur kecil yang terdefinisi dengan baik",
1221 teaches: "Nyatakan input dan output, bukan cara membangunnya. Claude menemukan di mana kode serupa berada dan menambahkan milik Anda di sampingnya.",
1222 prompt: "tambahkan endpoint {endpoint} yang mengembalikan {payload}",
1223 slots: {
1224 endpoint: "/health",
1225 payload: "versi aplikasi dan uptime"
1226 }
1227 },
1228 "build-a-small-internal": {
1229 title: "Bangun alat internal kecil dari awal",
1230 teaches: "Anda tidak memerlukan proyek, kerangka kerja, atau langkah build. Jelaskan alat dan minta Claude untuk membukanya sehingga Anda melihatnya bekerja segera.",
1231 prompt: "buat {tool} menggunakan HTML, CSS, dan JavaScript vanilla, lalu buka di browser saya",
1232 slots: {
1233 tool: "papan Kanban drag-and-drop dengan tiga kolom"
1234 }
1235 },
1236 "work-an-issue-end": {
1237 title: "Kerjakan masalah dari awal hingga akhir",
1238 teaches: "Berikan nomor masalah, bukan ringkasan. Claude membaca tiket lengkap itu sendiri, sehingga persyaratan yang akan Anda lupakan untuk disebutkan muncul, dan itu memvalidasi perubahan sebelum melaporkan kembali.",
1239 prompt: "baca masalah #{issue}, implementasikan perbaikannya, dan jalankan tes",
1240 slots: {
1241 issue: "312"
1242 }
1243 },
1244 "find-and-update-copy": {
1245 title: "Temukan dan perbarui salinan di seluruh codebase",
1246 teaches: "Tanyakan varian dan katakan apa yang harus dilewati. Claude menemukan frasa yang akan dilewatkan pencarian literal dan meninggalkan fixture pengujian dan riwayat tidak tersentuh, sehingga Anda hanya meninjau salinan yang sebenarnya dilihat pengguna.",
1247 prompt: "temukan setiap tempat kita menulis \"{copy}\" atau varian yang mirip, tunjukkan masing-masing dalam konteksnya, lalu perbarui semuanya menjadi \"{new}\". biarkan tes dan changelog apa adanya",
1248 slots: {
1249 copy: "Daftar gratis",
1250 new: "Mulai uji coba gratis"
1251 }
1252 },
1253 "draft-from-past-examples": {
1254 title: "Buat draf dokumen dari contoh masa lalu",
1255 teaches: "Tunjuk folder pekerjaan yang selesai alih-alih menjelaskan gaya Anda. Claude mempelajari struktur dan suara dari apa yang sudah Anda kirim, sehingga draf pertama terlihat seperti salah satu milik Anda.",
1256 next: "Simpan suara sebagai skill sehingga setiap draf dimulai di sana",
1257 prompt: "baca {examples} di {folder} untuk mempelajari struktur dan gayanya, lalu buat draf baru untuk {topic}",
1258 slots: {
1259 examples: "penilaian dampak privasi",
1260 folder: "legal/pia/",
1261 topic: "integrasi analitik yang baru"
1262 }
1263 },
1264 "write-tests-run-them": {
1265 title: "Tulis tes, jalankan, perbaiki kegagalan",
1266 teaches: "Minta untuk menulis, menjalankan, dan memperbaiki bersama-sama sehingga Claude mengulangi tanpa berhenti untuk instruksi.",
1267 next: "Jalankan `/init` sehingga Claude mempelajari perintah tes Anda secara otomatis",
1268 prompt: "tulis tes untuk {path}, jalankan, dan perbaiki kegagalan apa pun",
1269 slots: {
1270 path: "app/parsers/feed.py"
1271 }
1272 },
1273 "drive-implementation-from-tests": {
1274 title: "Dorong implementasi dari tes",
1275 teaches: "Pengembangan berbasis tes: tes mendefinisikan kapan pekerjaan selesai, dan Claude mengulangi implementasi sampai mereka lulus.",
1276 prompt: "tulis tes untuk {feature} terlebih dahulu, lalu implementasikan sampai tes tersebut lulus",
1277 slots: {
1278 feature: "alur reset kata sandi"
1279 }
1280 },
1281 "fill-gaps-from-a": {
1282 title: "Isi celah dari laporan cakupan",
1283 teaches: "Tunjuk laporan cakupan alih-alih menebak apa yang tidak diuji. Claude membaca angka sebenarnya dan menulis tes untuk file yang paling membutuhkannya.",
1284 next: "Atur ini sebagai `/goal` sehingga Claude terus menulis tes sampai cakupan mencapai target",
1285 prompt: "baca {report} dan tambahkan tes untuk file dengan cakupan terendah sampai masing-masing di atas {target}%",
1286 slots: {
1287 report: "coverage/coverage-summary.json",
1288 target: "80"
1289 }
1290 },
1291 "port-code-between-languages": {
1292 title: "Port kode ke bahasa lain",
1293 teaches: "Katakan apa yang harus dipertahankan, bukan hanya bahasa target. Menyebutkan API atau perilaku yang harus tetap sama memberikan Claude kontrak untuk memeriksa port.",
1294 prompt: "port {source} ke {target}, dengan mempertahankan {keep} yang sama",
1295 slots: {
1296 source: "modul Python ini",
1297 target: "Rust",
1298 keep: "API publik dan perilaku tes"
1299 }
1300 },
1301 "generate-docs-for-code": {
1302 title: "Hasilkan dokumen untuk kode yang tidak terdokumentasi",
1303 teaches: "Sebutkan cakupan dan format. Claude menemukan apa yang hilang dan cocok dengan gaya komentar yang sudah ada di file, sehingga dokumen baru terlihat seperti sisanya.",
1304 prompt: "temukan {scope} tanpa komentar {format} dan tambahkan, sesuai dengan gaya yang sudah digunakan di file tersebut",
1305 slots: {
1306 scope: "fungsi publik di src/auth/",
1307 format: "JSDoc"
1308 }
1309 },
1310 "migrate-a-pattern-across": {
1311 title: "Migrasikan pola di seluruh codebase",
1312 teaches: "Jelaskan pola lama dan yang baru. Meminta Claude untuk mengidentifikasi setiap tempat terlebih dahulu berarti situs panggilan tercantum dalam respons, sehingga Anda dapat memeriksa tidak ada yang terlewat. Untuk migrasi di banyak file, jalankan [/batch](/docs/id/commands). Claude membagi pekerjaan menjadi unit untuk Anda setujui, lalu subagent latar belakang membuat perubahannya.",
1313 prompt: "migrasikan semuanya dari {from} ke {to}: identifikasi setiap tempat yang perlu diubah, lalu lakukan perubahannya",
1314 slots: {
1315 from: "API logging lama",
1316 to: "logger terstruktur"
1317 }
1318 },
1319 "optimize-against-a-measurable": {
1320 title: "Optimalkan terhadap target yang terukur",
1321 teaches: "Menyatakan metrik dan target memberikan Claude definisi yang jelas tentang selesai.",
1322 next: "Atur ini sebagai `/goal` sehingga Claude terus mengukur dan mengulangi sampai mencapai angka",
1323 prompt: "optimalkan {target} untuk menurunkan {metric} dari {current} menjadi di bawah {goal}",
1324 slots: {
1325 target: "kueri pencarian",
1326 metric: "latensi p95",
1327 current: "2s",
1328 goal: "500ms"
1329 }
1330 },
1331 "fix-a-precise-visual": {
1332 title: "Perbaiki bug visual yang tepat",
1333 teaches: "Umpan balik visual yang tepat mendapat perbaikan yang tepat. Nyatakan elemen, pengukuran, dan viewport yang tepat.",
1334 next: "Tambahkan alat pratinjau sehingga Claude mengambil tangkapan layar dan memverifikasi perbaikan itu sendiri",
1335 prompt: "{element} melampaui {container} sebesar {amount} pada {viewport}. perbaiki.",
1336 slots: {
1337 element: "tombol login",
1338 amount: "20px",
1339 container: "batas kartu",
1340 viewport: "seluler"
1341 }
1342 },
1343 "review-your-changes-before": {
1344 title: "Tinjau perubahan Anda sebelum Anda melakukan commit",
1345 teaches: "Tangkap masalah selagi masih lebih mudah untuk diperbaiki. Claude membaca file yang diubah sepenuhnya, bukan hanya baris diff, sehingga menemukan masalah yang ditinggalkan tinjauan diri cepat.",
1346 next: "Jalankan `/code-review` untuk pemeriksaan yang sama dalam satu perintah",
1347 prompt: "tinjau perubahan saya yang belum di-commit dan tandai apa pun yang terlihat berisiko sebelum saya melakukan commit"
1348 },
1349 "review-a-pull-request": {
1350 title: "Tinjau pull request",
1351 teaches: "Claude meninjau dengan seluruh codebase dalam konteks, bukan hanya diff. Ia membaca kode yang diubah dan apa yang dipanggilnya, sehingga menangkap masalah yang akan dilewatkan tinjauan hanya-diff.",
1352 next: "Jalankan `/code-review <pr#>` dalam satu perintah, atau aktifkan Code Review untuk setiap PR",
1353 prompt: "tinjau PR #{pr} dan ringkas apa yang berubah, lalu daftar kekhawatiran apa pun",
1354 slots: {
1355 pr: "247"
1356 }
1357 },
1358 "review-infrastructure-changes-before": {
1359 title: "Tinjau perubahan infrastruktur sebelum menerapkan",
1360 teaches: "Output rencana padat dan sulit dipindai. Menempelkannya memberi Anda ringkasan bahasa biasa tentang apa yang sebenarnya akan berubah sebelum Anda menerapkannya.",
1361 prompt: "ini adalah output Terraform plan saya. apa yang akan dilakukannya, dan apakah ada sesuatu di sini yang akan menyebabkan masalah?"
1362 },
1363 "run-a-security-review": {
1364 title: "Jalankan tinjauan keamanan dengan subagent",
1365 teaches: "[Subagent](/docs/id/sub-agents) menjalankan audit dalam context window-nya sendiri dan melaporkan kembali ringkasan, sehingga tinjauan keamanan yang panjang tidak mengisi sesi utama Anda. Subagent tujuan umum bawaan menangani ini tanpa penyiapan tambahan.",
1366 next: "Siapkan subagent tinjauan keamanan khusus yang dapat digunakan seluruh tim Anda",
1367 prompt: "gunakan subagent untuk meninjau {path} terhadap masalah keamanan dan laporkan apa yang ditemukannya",
1368 slots: {
1369 path: "src/api/"
1370 }
1371 },
1372 "review-content-before-sending": {
1373 title: "Tangkap masalah sebelum tinjauan formal",
1374 teaches: "Dapatkan lintasan pertama sebelum manusia menghabiskan waktu untuk itu. Sebutkan kekhawatiran yang ingin Anda periksa sehingga tinjauan terfokus, lalu perbaiki apa yang ditemukannya dan kirim draf yang lebih bersih.",
1375 next: "Tangkap daftar periksa tinjauan Anda sebagai skill yang dapat dijalankan seluruh tim Anda",
1376 prompt: "tinjau {file} untuk {concerns} dan daftar apa pun yang harus saya perbaiki sebelum diserahkan ke {reviewer}",
1377 slots: {
1378 file: "launch-post.md",
1379 concerns: "klaim yang tidak didukung, atribusi yang hilang, dan masalah pedoman merek",
1380 reviewer: "tim hukum"
1381 }
1382 },
1383 "course-correct-a-wrong": {
1384 title: "Koreksi kursus pendekatan yang salah",
1385 teaches: "Sebutkan batasan yang dilewatkan Claude, bukan hanya bahwa itu salah. Alasan spesifik memberikan Claude batasan konkret untuk dipenuhi pada retry, alih-alih menebak lagi.",
1386 next: "Tekan `Esc` dua kali untuk membuka menu rewind dan mengembalikan kode dan percakapan sehingga retry dimulai bersih",
1387 prompt: "itu tidak benar: {feedback}. coba pendekatan yang berbeda",
1388 slots: {
1389 feedback: "signature fungsi harus tetap kompatibel ke belakang"
1390 }
1391 },
1392 "narrow-the-scope-of": {
1393 title: "Persempit cakupan perubahan",
1394 teaches: "Ketika arahnya benar tetapi perubahan terlalu luas, minta Claude untuk menyimpan bagian darinya daripada membatalkan semuanya. Batas yang dinyatakan mencegah perbaikan kecil berubah menjadi refaktor.",
1395 prompt: "itu terlalu banyak. simpan hanya perubahan pada {scope} dan batalkan edit Anda yang lain",
1396 slots: {
1397 scope: "logika validasi di src/forms/"
1398 }
1399 },
1400 "turn-a-correction-into": {
1401 title: "Ubah koreksi menjadi aturan",
1402 teaches: "Koreksi dalam obrolan tidak dibagikan dengan tim Anda. Aturan dalam [CLAUDE.md](/docs/id/memory) proyek dibagikan setelah Anda melakukan commit, dan Claude membacanya di awal setiap sesi.",
1403 next: "Buka `/memory` untuk meninjau apa yang ditulis Claude",
1404 prompt: "Anda terus {mistake}. tambahkan aturan ke CLAUDE.md agar ini tidak terjadi lagi",
1405 slots: {
1406 mistake: "menggunakan default export padahal proyek ini menggunakan named export"
1407 }
1408 },
1409 "resolve-merge-conflicts": {
1410 title: "Selesaikan merge conflict",
1411 teaches: "Katakan status apa yang Anda inginkan, bukan penanda mana yang harus disimpan. Meminta alasan membuat merge dapat ditinjau alih-alih kotak hitam.",
1412 prompt: "selesaikan merge conflict di branch ini dan jelaskan apa yang Anda pertahankan dari masing-masing sisi"
1413 },
1414 "commit-with-a-generated": {
1415 title: "Lakukan commit dengan pesan yang dihasilkan",
1416 teaches: "Biarkan Claude menurunkan pesan dari diff. Ini cocok dengan gaya commit yang ada di repositori Anda.",
1417 prompt: "lakukan commit atas perubahan ini dengan pesan yang merangkum apa yang saya lakukan"
1418 },
1419 "open-a-pull-request": {
1420 title: "Buka pull request dari tiket",
1421 teaches: "Lewati pengalihan konteks antara pelacak, editor, dan GitHub. Satu prompt membaca spesifikasi, membuat perubahan, dan membuka PR.",
1422 prompt: "temukan tiket tentang {topic} di {tracker} dan buka PR yang mengimplementasikannya",
1423 slots: {
1424 tracker: "pelacak masalah kami",
1425 topic: "timeout login"
1426 }
1427 },
1428 "draft-release-notes-from": {
1429 title: "Buat draf catatan rilis dari riwayat git",
1430 teaches: "Berikan dua titik referensi dan struktur yang Anda inginkan. Claude membaca log commit di antara keduanya dan membuat draf changelog yang dapat Anda edit.",
1431 next: "Simpan ini sebagai skill `/changelog`",
1432 prompt: "bandingkan {from} dengan {to} dan buat draf catatan rilis yang dikelompokkan berdasarkan fitur, perbaikan, dan breaking change",
1433 slots: {
1434 from: "v2.3.0",
1435 to: "v2.4.0"
1436 }
1437 },
1438 "write-a-ci-workflow": {
1439 title: "Tulis workflow CI",
1440 teaches: "Jelaskan kapan harus dijalankan dan apa yang harus dilakukan; YAML dihasilkan untuk Anda, cocok dengan perintah build dan pengujian proyek Anda.",
1441 prompt: "tulis workflow GitHub Actions yang {steps} pada setiap push ke {branch}",
1442 slots: {
1443 steps: "menjalankan tes dan melakukan deploy ke staging",
1444 branch: "main"
1445 }
1446 },
1447 "find-and-fix-a": {
1448 title: "Temukan dan perbaiki tes yang gagal",
1449 teaches: "Jelaskan gejala; Anda tidak perlu tahu file mana yang rusak. Claude menjalankan tes untuk melihat kegagalan, melacaknya ke sumber, dan memperbaikinya.",
1450 prompt: "tes {test} gagal, cari tahu penyebabnya dan perbaiki",
1451 slots: {
1452 test: "UserAuth"
1453 }
1454 },
1455 "investigate-a-reported-error": {
1456 title: "Selidiki kesalahan yang dilaporkan",
1457 teaches: "Jelaskan gejala dan lokasi; Claude membaca jalur kode yang relevan dan melacak kemungkinan penyebab. Tempel jejak tumpukan atau log jika Anda memilikinya.",
1458 next: "Letakkan deeplink dalam runbook Anda yang membuka Claude dengan prompt ini sudah diisi sebelumnya",
1459 prompt: "pengguna melihat {symptom} di {where}. selidiki dan beri tahu saya apa yang sedang terjadi",
1460 slots: {
1461 symptom: "error 500",
1462 where: "/api/settings"
1463 }
1464 },
1465 "fix-a-build-error": {
1466 title: "Perbaiki kesalahan build di akarnya",
1467 teaches: "Meminta penyebab akar dan verifikasi mencegah patch tingkat permukaan yang menekan kesalahan tanpa memperbaikinya.",
1468 prompt: "ini adalah error build. perbaiki akar penyebabnya dan verifikasi bahwa build berhasil"
1469 },
1470 "investigate-a-production-incident": {
1471 title: "Selidiki insiden produksi",
1472 teaches: "Daftar sumber bukti untuk berkorelasi, bukan langkah yang harus diambil. Claude membaca log, riwayat git, dan konfigurasi bersama untuk mempersempit penyebab.",
1473 next: "Hubungkan pelacak error atau penyimpanan log Anda melalui MCP",
1474 prompt: "{symptom}. periksa log, deploy terbaru, dan perubahan konfigurasi, lalu beri tahu saya penyebab yang paling mungkin",
1475 slots: {
1476 symptom: "endpoint checkout mulai mengembalikan error 500 sejak satu jam yang lalu"
1477 }
1478 },
1479 "query-logs-in-plain": {
1480 title: "Kueri log dengan bahasa sehari-hari",
1481 teaches: "Tanyakan pertanyaan alih-alih menulis SQL. Claude membangun kueri, menjalankannya terhadap log yang terhubung, dan menunjukkan kueri dan hasilnya sehingga Anda dapat memeriksa apa yang dijalankan.",
1482 prompt: "tampilkan semua {events} untuk {scope} selama {timeframe}. tulis kuerinya, jalankan, dan beri tahu saya apa yang menonjol",
1483 slots: {
1484 events: "login yang gagal",
1485 scope: "layanan auth",
1486 timeframe: "24 jam terakhir"
1487 }
1488 },
1489 "diagnose-from-a-console": {
1490 title: "Diagnosa dari tangkapan layar konsol",
1491 teaches: "Konsol cloud menunjukkan masalah tetapi bukan perintah untuk memperbaikinya. Claude membaca tangkapan layar dan menerjemahkan dasbor menjadi perintah kubectl, gcloud, atau aws untuk dijalankan.",
1492 prompt: "ini adalah tangkapan layar {console}. jelaskan kepada saya mengapa {resource} gagal dan berikan perintah persis untuk memperbaikinya",
1493 slots: {
1494 console: "dasbor Kubernetes kami",
1495 resource: "pod ini"
1496 }
1497 },
1498 "analyze-a-data-file": {
1499 title: "Analisis file data",
1500 teaches: "Pertanyaan sekali-jalan tidak memerlukan skrip sekali-jalan. Tunjuk file di folder proyek Anda dan Claude membacanya langsung, menemukan pola, dan menulis output di mana Anda minta.",
1501 next: "Hubungkan sumber data melalui MCP alih-alih mengekspor file",
1502 prompt: "baca {file}, ringkas pola-pola utamanya, dan tulis hasilnya ke {output}",
1503 slots: {
1504 file: "@reports/q1-signups.csv",
1505 output: "halaman HTML dengan grafik, lalu buka di browser saya"
1506 }
1507 },
1508 "generate-variations-from-performance": {
1509 title: "Hasilkan variasi dari data kinerja",
1510 teaches: "Nyatakan batasan di awal sehingga generasi tetap dalam batas. Claude membaca metrik, memilih apa yang harus diganti, dan menghasilkan alternatif yang sesuai.",
1511 next: "Hubungkan platform iklan melalui MCP alih-alih mengekspor file",
1512 prompt: "baca {file}, temukan {items} yang berkinerja buruk, dan hasilkan {n} variasi baru yang tetap di bawah {limit} karakter",
1513 slots: {
1514 file: "@ads-performance.csv",
1515 items: "headline",
1516 n: "20",
1517 limit: "90"
1518 }
1519 },
1520 "turn-a-recurring-task": {
1521 title: "Ubah tugas berulang menjadi skill",
1522 teaches: "Sebutkan langkah-langkah sekali; gunakan kembali sebagai perintah. Claude menulis [skill](/docs/id/skills) yang dapat dijalankan siapa pun di tim Anda.",
1523 prompt: "buat skill /{name} untuk proyek ini yang {steps}",
1524 slots: {
1525 name: "ship",
1526 steps: "menjalankan linter dan tes, lalu membuat draf pesan commit"
1527 }
1528 },
1529 "add-a-hook-for": {
1530 title: "Tambahkan hook untuk perilaku berulang",
1531 teaches: "Hooks membuat perilaku otomatis alih-alih sesuatu yang harus Anda ingat untuk diminta. Jelaskan pemicu dan tindakan dan Claude menulis konfigurasi [hook](/docs/id/hooks).",
1532 prompt: "tulis hook yang {action} setelah setiap {event}",
1533 slots: {
1534 action: "menjalankan prettier",
1535 event: "edit pada file .ts atau .tsx"
1536 }
1537 },
1538 "connect-a-tool-with": {
1539 title: "Hubungkan alat dengan MCP",
1540 teaches: "Hubungkan sumber sekali alih-alih menempel data setiap sesi. Setelah penyiapan [MCP](/docs/id/mcp), Claude membaca dari alat secara langsung ketika Anda menanyakannya.",
1541 prompt: "hubungkan {server} melalui MCP agar Anda dapat membaca {data} darinya secara langsung",
1542 slots: {
1543 server: "pelacak error kami",
1544 data: "stack trace"
1545 }
1546 },
1547 "capture-what-to-remember": {
1548 title: "Tangkap apa yang harus diingat untuk lain kali",
1549 teaches: "Tanya sebelum Anda lupa. Claude tahu apa yang harus dipikirkan sesi ini dan mengusulkan entri [CLAUDE.md](/docs/id/memory) sehingga sesi berikutnya dimulai dengan konteks itu.",
1550 prompt: "ringkas apa yang kita lakukan di sesi ini dan sarankan apa yang perlu ditambahkan ke 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 Apa yang membuat prompt ini berhasil
1558</h2>
1559 14
1560Prompt di atas berbagi beberapa pola. Mengenalinya membantu Anda menyesuaikan prompt apa pun di sini dengan tugas Anda sendiri.15Prompt di atas berbagi beberapa pola. Mengenalinya membantu Anda menyesuaikan prompt apa pun di sini dengan tugas Anda sendiri.
1561 16
1597 52
1598Untuk lebih lanjut tentang setiap pola, lihat [best practices](/docs/id/best-practices).53Untuk lebih lanjut tentang setiap pola, lihat [best practices](/docs/id/best-practices).
1599 54
1600<h2 id="where-these-come-from">55## Dari mana ini berasal
1601 Dari mana ini berasal
1602</h2>
1603 56
1604Prompt ini didasarkan pada pola dari sumber daya Anthropic yang dipublikasikan. Setiap kartu menautkan ke sumbernya:57Prompt ini didasarkan pada pola dari sumber daya Anthropic yang dipublikasikan. Setiap kartu menautkan ke sumbernya:
1605 58
1610 63
1611Untuk panduan video tentang pola ini, lihat kursus gratis [Claude Code in Action](https://academy.claude.com/courses/claude-code-in-action) di [Claude Academy](https://academy.claude.com/).64Untuk panduan video tentang pola ini, lihat kursus gratis [Claude Code in Action](https://academy.claude.com/courses/claude-code-in-action) di [Claude Academy](https://academy.claude.com/).
1612 65
1613<h2 id="related-resources">66## Sumber daya terkait
1614 Sumber daya terkait
1615</h2>
1616 67
1617Prompt di halaman ini adalah titik awal. Setelah satu berhasil untuk proyek Anda, langkah berikutnya adalah membuatnya dapat diulang: simpan sebagai [skill](/docs/id/skills) sehingga siapa pun di tim Anda dapat menjalankannya sebagai `/command`, dan catat konvensi yang dipelajari Claude dalam [CLAUDE.md](/docs/id/memory) sehingga setiap sesi dimulai dengan konteks itu alih-alih Claude mempelajarinya kembali. Untuk perubahan yang lebih besar atau lebih berisiko, [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode) menunjukkan daftar file sebelum pengeditan apa pun terjadi.68Prompt di halaman ini adalah titik awal. Setelah satu berhasil untuk proyek Anda, langkah berikutnya adalah membuatnya dapat diulang: simpan sebagai [skill](/docs/id/skills) sehingga siapa pun di tim Anda dapat menjalankannya sebagai `/command`, dan catat konvensi yang dipelajari Claude dalam [CLAUDE.md](/docs/id/memory) sehingga setiap sesi dimulai dengan konteks itu alih-alih Claude mempelajarinya kembali. Untuk perubahan yang lebih besar atau lebih berisiko, [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode) menunjukkan daftar file sebelum pengeditan apa pun terjadi.
1618 69