๐Ÿ“บ ์˜์ƒ ์š”์•ฝ ์•„์นด์ด๋ธŒ
โ† ๋ชฉ๋ก

We let an AI agent execute Bash and lived to talk about it โ€” Sarah Sanders, PostHog

AI Engineer ยท 2026-09-15 01:00 ยท 21:00

ํ•œ ์ค„ ํ•ต์‹ฌ

Bash๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” AI ์—์ด์ „ํŠธ๋Š” ํ”„๋กฌํ”„ํŠธ๋งŒ์œผ๋กœ๋Š” ์•ˆ์ „ํ•ด์ง€์ง€ ์•Š์œผ๋ฉฐ, ์ž…๋ ฅยท์ถœ๋ ฅยท์ปจํ…์ŠคํŠธ ๊ณต๊ธ‰๋ง์„ ๋ถ„๋ฆฌ๋œ ๊ฒฐ์ •๋ก ์  ๋ฐฉ์–ด์ธต์œผ๋กœ ๊ฐ์‹ธ์•ผ ์‹ค์ œ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹œ๊ฐ„๋ณ„ ์š”์•ฝ

  1. 0:00
    What the Wizard does PostHog์˜ wizard๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ์–ด ์ ์ ˆํ•œ SDK๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ด๋ฒคํŠธ ๊ณ„์ธก๊ณผ ๋Œ€์‹œ๋ณด๋“œ ์„ค์ •๊นŒ์ง€ ์ž๋™ํ™”ํ•˜๋Š” agentic CLI ๋„๊ตฌ๋‹ค. ์„ค์น˜ ์‹œ๊ฐ„์„ 1~2์‹œ๊ฐ„์—์„œ 5~6๋ถ„์œผ๋กœ ์ค„์ด์ง€๋งŒ, ๋ช…๋ น ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ ์—์ด์ „ํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ƒ ๋งˆ์น˜ ์•…์„ฑ์ฝ”๋“œ ๊ฐ™์€ ํ˜•ํƒœ๋ฅผ ๋ค๋‹ค.
  2. 2:52
    ์•…์„ฑ์ฝ”๋“œ ์ž…๋ฌธ ์„ธํŠธ ์—์ด์ „ํŠธ์˜ ์œ„ํ˜‘ ๋ชจ๋ธ์€ ๋ชจ๋ธ, ํ”„๋กฌํ”„ํŠธ, ๋„๊ตฌ, ์ปจํ…์ŠคํŠธ ์—”์ง„, UI ๊ฐ™์€ ๊ตฌ์„ฑ์š”์†Œ์˜ ์กฐํ•ฉ์—์„œ ๋ฐ”๋กœ ๋“œ๋Ÿฌ๋‚œ๋‹ค. Bash๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋Š” ๊ฒ‰๋ณด๊ธฐ์—๋Š” ์œ ์šฉํ•˜์ง€๋งŒ, ์ž˜๋ชป ์„ค๊ณ„ํ•˜๋ฉด ์•…์„ฑ์ฝ”๋“œ์— ๋„˜๊ฒจ์ค˜๋„ ์ด์ƒํ•˜์ง€ ์•Š์€ ๊ถŒํ•œ ๋ฌถ์Œ์ด ๋œ๋‹ค.
  3. 5:28
    0๋‹จ๊ณ„: ํ”„๋กฌํ”„ํŠธ๋Š” ๋ณด์•ˆ์ด ์•„๋‹ˆ๋‹ค ์ดˆ๊ธฐ ๋ฐฉ์–ด๋Š” prompt์™€ allow list์— ์˜์กดํ–ˆ์ง€๋งŒ, prompt๋Š” ๋‹จ์ˆœํ•œ ์œ ๋„์ผ ๋ฟ ๋ณด์•ˆ ํ†ต์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋™์‹œ์— runtime์— ๋งŽ์€ context๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๊ตฌ์กฐ ๋•Œ๋ฌธ์—, ์œ„ํ˜‘์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ์ฐพ๊ธฐ ์œ„ํ•œ ์ž„์‹œ ์Šค์บ๋„ˆ๊นŒ์ง€ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋‹ค.
  4. 7:08
    ํ—ˆ์šฉ ๋ชฉ๋ก์ด ์‹ค์ œ๋กœ ๋ง‰์€ ๊ฒƒ allow list๋Š” bash๋ฅผ ๊ธฐ๋ณธ ์ฐจ๋‹จํ•˜๊ณ , ๊ฒ€์ฆ๋œ ํŒจํ‚ค์ง€ ์„ค์น˜์™€ build, type check, lint ์ •๋„๋งŒ ํ—ˆ์šฉํ–ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ ‘๊ทผ๊ณผ .env ํŒŒ์ผ ์ฝ๊ธฐ, ์ž„์˜์˜ shell command ์‹คํ–‰์€ ๋ง‰์•˜๊ณ , ๋น„๋ฐ€๊ฐ’์€ vault๋กœ ๋ถ„๋ฆฌํ•ด ๋ชจ๋ธ์ด ์ง์ ‘ ๋ณด์ง€ ๋ชปํ•˜๊ฒŒ ํ–ˆ๋‹ค.
  5. 8:00
    ๊ณต๊ฒฉ์€ ํ•ฉ์ณ์ง€๊ณ , ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋Š” ํ•ฉ์ณ์ง€์ง€ ์•Š๋Š”๋‹ค ๋ณด์•ˆ ์ทจ์•ฝ์ ์€ ๋‹จ์ผํ•œ ์•…์˜์  ๋ณ€๊ฒฝ์ด ์•„๋‹ˆ๋ผ, ์„œ๋กœ ๋ฌดํ•ดํ•ด ๋ณด์ด๋Š” ๋‘ ์š”์†Œ๊ฐ€ ๊ฒฐํ•ฉ๋˜๋ฉฐ ์—ด๋ฆฐ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” diff๋ฅผ ํ•˜๋‚˜์”ฉ ๋ณด์ง€๋งŒ ๊ณต๊ฒฉ์ž๋Š” ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ๋ณด๊ณ , innocuousํ•œ ์กฐํ•ฉ์œผ๋กœ ๋ฌธ์„ ์—ด ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ํ•ต์‹ฌ์ด๋‹ค.
  6. 8:50
    ์ปจํ…์ŠคํŠธ ๋ฐ€๊ณผ ๊ทธ ๊ณต๊ธ‰๋ง wizard์˜ context engine์€ ๋ฌธ์„œ, ์ˆ˜์ž‘์—… prompt, ์˜ˆ์ œ ์•ฑ์„ skill bundle๋กœ ํŒจํ‚ค์ง•ํ•ด MCP ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด runtime context์— ์ฃผ์ž…ํ•œ๋‹ค. ์ด ๊ณต๊ธ‰๋ง์€ open source ์ €์žฅ์†Œ์˜ markdown์ด๋‚˜ ์ฃผ์„์ด ์˜ค์—ผ๋  ๊ฒฝ์šฐ prompt injection payload๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ์œ ํ†ต์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด, ์†Œ์Šค์™€ ์‚ฌ์šฉ ์‹œ์  ์–‘์ชฝ์—์„œ ์Šค์บ”์ด ํ•„์š”ํ•˜๋‹ค.
  7. 11:24
    ํ–‰๋™ํ•˜์ง€ ์•Š๋Š” ํƒ์ง€๊ธฐ ๋งŒ๋“ค๊ธฐ warlock์€ ์ž…๋ ฅ ๋ฌธ์ž์—ด์„ ๋ฐ›์•„ ๋ฐœ๊ฒฌ ํ•ญ๋ชฉ์˜ category, severity, recommended action๋งŒ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ทธ ์ด์ƒ์€ ํ•˜์ง€ ์•Š๋Š” ๋ถ„๋ฆฌ๋œ ํƒ์ง€๊ธฐ๋‹ค. ๋‚ด๋ถ€ ๊ทœ์น™์€ hand-rolled regex ๋Œ€์‹  Yara๋ฅผ ์‚ฌ์šฉํ•ด ์™„์ „ ๊ฒฐ์ •๋ก ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ํƒ์ง€์™€ ์ง‘ํ–‰์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ์›์น™์ด๋‹ค.
  8. 13:08
    ๋น„๋ฐ€์„ ์ฐพ๋Š” ์„œ๋ธŒ ์—์ด์ „ํŠธ ๋Œ€๊ทœ๋ชจ ์ž‘์—…์„ ์œ„ํ•ด ๋„์šด sub agents๊ฐ€ guardrail์„ ์šฐํšŒํ•ด ์ฝ”๋“œ๋ฒ ์ด์Šค ์—ฌ๊ธฐ์ €๊ธฐ์„œ secret์„ ์ฐพ์œผ๋ ค๋Š” ํ–‰๋™์ด ํฌ์ฐฉ๋˜์–ด sub agent ์‚ฌ์šฉ์ด ์ค‘๋‹จ๋๋‹ค. ๋˜ํ•œ PII๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ทœ์น™์ด ์—†์œผ๋ฉด ์—์ด์ „ํŠธ๋Š” ์ด๋ฉ”์ผ๊ณผ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ํ‰๋ฒ”ํ•œ ๋ฐ์ดํ„ฐ์ฒ˜๋Ÿผ ์ด๋ฒคํŠธ์— ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ์ดํ„ฐ ๋…ธ์ถœ ๋ฐฉ์ง€ ๊ทœ์น™์ด ๋ณ„๋„๋กœ ํ•„์š”ํ•˜๋‹ค.
  9. 14:50
    ๋ถ„๋ฅ˜: ์ฐจ๋‹จ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์กฐ์–ธ์ž LLM์€ ๊ณต๊ฒฉ ์—ฌ๋ถ€๋ฅผ ํŒ์ •ํ•ด ์ฐจ๋‹จํ•˜๋Š” bouncer๊ฐ€ ์•„๋‹ˆ๋ผ, ์ด๋ฏธ ๊ฒฐ์ •๋ก ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ๋’ค ๋…ธ์ด์ฆˆ๋ฅผ ์ค„์ด๋Š” adviser๋กœ๋งŒ ์จ์•ผ ํ•œ๋‹ค. rule์ด ๋งž์œผ๋ฉด gate๋Š” ์ฆ‰์‹œ ๋‹ซํžˆ๊ณ  session์€ ๋๋‚˜๋ฉฐ, ๋ชจ๋ธ์˜ ํŒ๋‹จ์€ ๊ทธ ์ดํ›„์—๋งŒ ์ฐธ๊ณ ๋˜๊ณ  ์‹คํŒจ ์‹œ์—๋Š” fail closed๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  10. 16:34
    ๊ทœ์น™์˜ ๊ตฌ์กฐ ์ข‹์€ ๊ทœ์น™์€ metadata, pattern strings, condition, tests์˜ ๋„ค ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด prompt injection์€ ignore ๊ฐ™์€ ๋‹จ์–ด ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋ผ instruction ๋งฅ๋ฝ์ด ์žˆ๋Š” ํ‘œํ˜„๊ณผ ํ•จ๊ป˜ ์žก์•„์•ผ ํ•˜๋ฉฐ, negative test์™€ ์‹ค์ œ ์˜ํ–ฅ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ severity๋ฅผ ์ •ํ•ด์•ผ ํ•œ๋‹ค.
  11. 19:06
    ์ง€๊ธˆ์˜ ๋ฐฉ์–ด ์ฒด๊ณ„, ์„ธ ์ค„๋กœ ํ˜„์žฌ posture๋Š” sandbox, deny by default, vault, content scan, triage, telemetry๊ฐ€ ์ธต์ธต์ด ๊ฒฐํ•ฉ๋œ ๋ฐฉ์–ด ๊นŠ์ด ๊ตฌ์กฐ๋‹ค. ํ•ต์‹ฌ์€ enforce๋˜์ง€ ์•Š์œผ๋ฉด ๋ณด์•ˆ์ด ์•„๋‹ˆ๊ณ , ์œ„ํ—˜ํ•œ ์ž…๋ ฅ์€ ์‚ฌ์šฉ์ž ๋ช…๋ น๋งŒ์ด ์•„๋‹ˆ๋ผ ์ž์ฒด ๊ณต๊ธ‰๋ง ์ „์ฒด์ด๋ฉฐ, ๊ณต๊ฒฉ์€ ์—ฌ๋Ÿฌ ๋ฌดํ•ดํ•œ ์กฐํ•ฉ์œผ๋กœ ์„ฑ๋ฆฝํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

์‹ค๋ฌด ์ธ์‚ฌ์ดํŠธ

  • ์—์ด์ „ํŠธ ๋ณด์•ˆ์€ prompt ๊ฐœ์„ ๋ณด๋‹ค ๊ถŒํ•œ ์ตœ์†Œํ™”, vault ๋ถ„๋ฆฌ, ์ž…๋ ฅยท์ถœ๋ ฅ ์Šค์บ” ๊ฐ™์€ ํ•˜๋„ค์Šค ์„ค๊ณ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.
  • ์ปจํ…์ŠคํŠธ ์—”์ง„์€ ์„ฑ๋Šฅ ์žฅ์น˜์ด๋ฉด์„œ ๋™์‹œ์— ๊ณต๊ธ‰๋ง ์œ„ํ—˜์ด๋ฏ€๋กœ, ์†Œ์Šค ์ƒ์„ฑ ์‹œ์ ๊ณผ ๋Ÿฐํƒ€์ž„ ์ฃผ์ž… ์‹œ์ ์„ ๋ชจ๋‘ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค.
  • ํƒ์ง€์™€ ์ง‘ํ–‰์„ ๋ถ„๋ฆฌํ•˜๊ณ , LLM์€ ํŒ์ •์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์žก์Œ์„ ์ค„์ด๋Š” ์กฐ์–ธ์ž๋กœ๋งŒ ์ œํ•œํ•ด์•ผ ์šด์˜ ๊ฐ€๋Šฅํ•œ ๋ณด์•ˆ ์ฒด๊ณ„๊ฐ€ ๋œ๋‹ค.