{
  "schema": "tesign-radar/item/1",
  "generated_at": "2026-09-17T01:56:13.055Z",
  "lang": "ko",
  "slug": "martin-loop",
  "url": "https://tesign.com/item/martin-loop/",
  "alternates": {
    "ko": {
      "html": "https://tesign.com/item/martin-loop/",
      "json": "https://tesign.com/item/martin-loop/index.json",
      "markdown": "https://tesign.com/item/martin-loop/index.md"
    },
    "en": {
      "html": "https://tesign.com/en/item/martin-loop/",
      "json": "https://tesign.com/en/item/martin-loop/index.json",
      "markdown": "https://tesign.com/en/item/martin-loop/index.md"
    }
  },
  "name": "MartinLoop",
  "use_label": "에이전트 실행 통제",
  "one_liner": "코딩 에이전트에게 예산 한도와 검증 절차를 채워, \"완료했다\"는 말 대신 증거가 붙은 영수증을 받게 만듭니다.",
  "text": {
    "why": "작은 수정처럼 보이던 작업이 수십 번의 재시도와 예산 초과, 아무도 못 믿는 diff로 끝나는 일이 흔합니다. MartinLoop는 목표·검증 명령·예산·시도 횟수를 하나의 실행 계약으로 묶어, Claude Code·Codex 같은 코딩 에이전트를 감쌉니다. 완료 판정은 그 실행과 작업공간에 묶인 새 검증 증거가 있어야만 나오고(\"VERIFIED\"는 코드가 버그 없다는 뜻이 아니라 설정한 검사를 통과했다는 뜻), 모든 실행은 martin dossier로 다시 확인할 수 있는 영수증을 남깁니다.",
    "take": "코딩 에이전트를 더 똑똑하게 만드는 도구가 아니라, \"이미 똑똑한 에이전트가 통제 없이 도는 것\"이 문제라고 짚은 관점이 눈에 띕니다.",
    "build": [
      "코딩 에이전트에게 맡긴 작업에 하드 예산·시도 한도를 걸어 폭주를 막기",
      "완료 주장에 독립 검증 명령(예: npm test)을 묶어, 통과 증거 없이는 끝나지 않게 하기",
      "여러 에이전트의 실행 결과를 같은 영수증 형식으로 비교하기"
    ],
    "who": [
      {
        "role": "코딩 에이전트에게 작업을 맡기고 결과를 검토해야 하는 개발자",
        "situation": null
      },
      {
        "role": "에이전트 실행 비용이 예측 밖으로 튄 걸 겪어 본 팀",
        "situation": null
      },
      {
        "role": "여러 에이전트·모델의 실행을 같은 기준으로 비교하고 싶은 사람",
        "situation": null
      }
    ],
    "start": [
      {
        "command": false,
        "text": "바로 써보기:"
      },
      {
        "command": true,
        "text": "npx -y martin-loop@latest start"
      },
      {
        "command": true,
        "text": "npx -y martin-loop@latest demo"
      },
      {
        "command": true,
        "text": "cd martin-loop-demo && npm install"
      },
      {
        "command": true,
        "text": "npx -y martin-loop@latest run \"작업 설명\" --verify \"npm test\" --budget-usd 2 --max-iterations 1"
      },
      {
        "command": true,
        "text": "npx -y martin-loop@latest dossier --latest"
      }
    ],
    "caveat": [
      "Apache-2.0 · Node.js 20 이상 필요",
      "호스팅 대시보드와 팀 기능은 아직 얼리 액세스 단계입니다(공식 홈페이지 기준)",
      "\"VERIFIED\"는 설정한 검증 명령을 통과했다는 뜻일 뿐, 코드가 안전하다는 보증은 아니라고 README가 직접 밝힙니다"
    ]
  },
  "cta": {
    "type": "try",
    "label": "TRY",
    "url": "https://martinloop.com/"
  },
  "ready": null,
  "categories": [
    "dev-tools",
    "ai"
  ],
  "categories_confirmed": true,
  "tags": [
    "ai-agents",
    "coding-agent",
    "governance",
    "budget-control",
    "cli"
  ],
  "platform": [
    "cli"
  ],
  "license": {
    "spdx": "Apache-2.0",
    "scope": "permissive",
    "scope_text": "상업 이용·수정·재배포 가능. 고지 유지, 바꾼 부분은 표시.",
    "url": "https://spdx.org/licenses/Apache-2.0.html",
    "note": null,
    "open_source": true
  },
  "language": "TypeScript",
  "source_urls": {
    "canonical": "https://martinloop.com/",
    "github": "https://github.com/keesan12/martin-loop",
    "huggingface": null,
    "app_store": null,
    "sightings": [
      {
        "source": "github",
        "url": "https://github.com/keesan12/martin-loop",
        "posted_at": "2026-09-15T18:00:00.000Z",
        "hn_url": null
      }
    ]
  },
  "numbers": {
    "as_of": "2026-09-16T21:00:00.000Z",
    "stars": 130,
    "stars_unit": "GitHub stars",
    "stars_checked_at": "2026-09-15T23:33:52.402Z",
    "stars_observed_since_check": 0,
    "star_delta_24h": null,
    "star_delta_7d": 21,
    "star_delta_30d": 21,
    "star_delta_unit": "GitHub stars gained in the window, GH Archive events summed to as_of",
    "spark_14d": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      21,
      null
    ],
    "hf_likes": null,
    "hf_likes_observed_at": null,
    "hn_points": null,
    "hn_points_observed_at": null,
    "store": null,
    "method": "별 총합 = GitHub에서 마지막으로 확인한 값(stars_checked_at) + 그 뒤 GH Archive에서 관측한 증가. 24h·7d·30d 증가는 GH Archive 시간별 이벤트를 기준 시각(as_of)까지 합한 값. 우리 점수는 없습니다."
  },
  "ranks": null,
  "activity": {
    "pushed_at": "2026-09-15T03:04:19.000Z",
    "owner_type": null,
    "open_issues": null,
    "contributors": null,
    "releases_count": null,
    "latest_release": null,
    "checked_at": null,
    "core_checked_at": "2026-09-15T23:33:52.402Z"
  },
  "signals": [],
  "images": {
    "og": "https://tesign.com/img/martin-loop-a1cb6e24d0.png",
    "cover": "https://tesign.com/img/martin-loop-a1cb6e24d0.png",
    "cover_width": 2400,
    "cover_height": 1260,
    "gallery": [
      "https://tesign.com/img/martin-loop-a1cb6e24d0.png",
      "https://tesign.com/img/martin-loop-b377bee9d1.png",
      "https://tesign.com/img/martin-loop-9c13aa3bac.png"
    ],
    "alt": "MartinLoop 홈페이지. \"Watch your AI burn $5.20. Then watch MartinLoop close the loop for $2.30.\"라는 문구가 있습니다.",
    "tier": 1
  },
  "dates": {
    "first_seen_at": "2026-09-15T23:33:09.628Z",
    "source_created_at": "2026-04-04T05:34:39.000Z",
    "discovery_hours": 3953.9751744444443,
    "launch_signal_at": "2026-09-15T18:00:00.000Z",
    "kept_at": "2026-09-17T01:24:00.699Z",
    "first_published_at": "2026-09-17T01:24:00.858Z",
    "updated_at": "2026-09-17T01:26:30.194Z",
    "ingestion_mode": "live"
  },
  "notes": [
    "이 파일은 tesign.com 항목 페이지와 같은 빌드에서 같은 데이터로 만들어졌습니다. 소개 글은 편집자가 쓴 것이고, 숫자는 저장된 관측값입니다.",
    "JSON의 null은 관측하지 않았다는 뜻입니다 — 0이 아닙니다. 마크다운에서는 [확인 필요]로 적습니다.",
    "별 총합 = GitHub에서 마지막으로 확인한 값(stars_checked_at) + 그 뒤 GH Archive에서 관측한 증가. 24h·7d·30d 증가는 GH Archive 시간별 이벤트를 기준 시각(as_of)까지 합한 값. 우리 점수는 없습니다.",
    "요약이며 법적 조언이 아닙니다."
  ]
}
