{"_id":"@apexstack/agent","_rev":"5-5ac99673adc5738a4fc38c2ffe950b0f","name":"@apexstack/agent","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.1":{"name":"@apexstack/agent","version":"0.1.1","_id":"@apexstack/agent@0.1.1","maintainers":[{"name":"andrew.mok","email":"mokgoon@myelinsoft.com"}],"bin":{"pjt-agent":"dist/index.js","pjt-agent-mcp":"dist/mcp.js"},"dist":{"shasum":"eb4c56bc6e1ef3c5fa0e4b4703257f49323dd932","tarball":"https://registry.npmjs.org/@apexstack/agent/-/agent-0.1.1.tgz","fileCount":8,"integrity":"sha512-nb4DWeBn+6quvva28ko8uXOcCaKFDSg4cx42zgGAzC5k9cf5dobr7+O2KMMz0cKF2DslTLf1ePtf6vgeI9iKYA==","signatures":[{"sig":"MEUCIQDtsGDZ/XZGoWaWZOfKm8L66wljUjSadytelwQULBEHUAIgR8DGU0VH7E+qWWv3DX/8szn5Act92wLWxV/mVVHDWkY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42055},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"5fd56d33f96c47e0255ed2d3ce235eeed3520d7f","scripts":{"dev":"tsx src/index.ts","mcp":"tsx src/mcp.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"andrew.mok","email":"mokgoon@myelinsoft.com"},"_npmVersion":"10.9.3","description":"Claude Code local agent for PJT workspaces — long-polls task queue and runs claude CLI on user's PC.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.23.8","chalk":"^5.3.0","commander":"^12.1.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/agent_0.1.1_1780915729526_0.060563849068403064","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@apexstack/agent","version":"0.1.2","_id":"@apexstack/agent@0.1.2","maintainers":[{"name":"andrew.mok","email":"mokgoon@myelinsoft.com"}],"bin":{"pjt-agent":"dist/index.js","pjt-agent-mcp":"dist/mcp.js"},"dist":{"shasum":"d7e46b560aaa700dbdf7c6299cd4aa7116eecdef","tarball":"https://registry.npmjs.org/@apexstack/agent/-/agent-0.1.2.tgz","fileCount":8,"integrity":"sha512-WRHNQJp5EHOSDH3Ol9V0tyHcMTwxh1QiNmbl2FTpvJ2wAtyNtAcvpDD3aOafBHzrXs23d19n7tcxSjm2fflwIg==","signatures":[{"sig":"MEQCIDWeNObakYRrOuW2EuYrS+YjEBuzWfCvEM70LXNHsGkZAiAPIEZkkt4slnsQVDl84UlDuM1I9+KbqjomxYuB49xBKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42055},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"5fd56d33f96c47e0255ed2d3ce235eeed3520d7f","scripts":{"dev":"tsx src/index.ts","mcp":"tsx src/mcp.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"andrew.mok","email":"mokgoon@myelinsoft.com"},"_npmVersion":"10.9.3","description":"Claude Code local agent for PJT workspaces — long-polls task queue and runs claude CLI on user's PC.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.23.8","chalk":"^5.3.0","commander":"^12.1.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/agent_0.1.2_1780915825195_0.7818925332528142","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@apexstack/agent","version":"0.1.3","_id":"@apexstack/agent@0.1.3","maintainers":[{"name":"andrew.mok","email":"mokgoon@myelinsoft.com"}],"bin":{"pjt-agent":"dist/index.js","pjt-agent-mcp":"dist/mcp.js"},"dist":{"shasum":"86298c764ddee039c79873bf2f28b2328cabe083","tarball":"https://registry.npmjs.org/@apexstack/agent/-/agent-0.1.3.tgz","fileCount":8,"integrity":"sha512-Bv06G+7vNSsSEZPVjYycrmoqnoRqtq7fsols1QKEduhDv4uop8a462ev9s0nYRB+0WsPOyGhfkSNym8hEwUBsw==","signatures":[{"sig":"MEUCIQDQyZa6+Yoa5yKX7NQZrnH7efuAer9/abfSRAOY8nI6HwIgNEUkRsYyaUgnhSdifQ98uZK8ks/CJczoyz+nKWimWag=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44350},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"b36c52a16a36f259132fe5ad9b174da8b6f4db6f","scripts":{"dev":"tsx src/index.ts","mcp":"tsx src/mcp.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"andrew.mok","email":"mokgoon@myelinsoft.com"},"_npmVersion":"10.9.3","description":"Claude Code local agent for PJT workspaces — long-polls task queue and runs claude CLI on user's PC.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.23.8","chalk":"^5.3.0","commander":"^12.1.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/agent_0.1.3_1780916171126_0.4365926503564954","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@apexstack/agent","version":"0.1.4","_id":"@apexstack/agent@0.1.4","maintainers":[{"name":"andrew.mok","email":"mokgoon@myelinsoft.com"}],"bin":{"pjt-agent":"dist/index.js","pjt-agent-mcp":"dist/mcp.js"},"dist":{"shasum":"c2d33cf9ffdad8ad470c3eb6fb5aa11a51b17839","tarball":"https://registry.npmjs.org/@apexstack/agent/-/agent-0.1.4.tgz","fileCount":8,"integrity":"sha512-s/JmvAj/y/FUnY9OJ4AOwYfV6O72/DMQWrPmT+of48fK8L7sL3O5hkaghnf3i/55M4mx/6IREA69pByZpnDFsQ==","signatures":[{"sig":"MEUCIQCDNI+F/ZqZSyIPkQMA+HGOyiiC6sDDdCJiMIAJPANVMQIgWB0tbG9JBqM5JC47/sKnrfEAFP4qSADyZxsNGfGyeCc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45044},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"2061edebeba017755bc2d0a5ae49981fc4fc95fa","scripts":{"dev":"tsx src/index.ts","mcp":"tsx src/mcp.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"andrew.mok","email":"mokgoon@myelinsoft.com"},"_npmVersion":"10.9.3","description":"Claude Code local agent for PJT workspaces — long-polls task queue and runs claude CLI on user's PC.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.23.8","chalk":"^5.3.0","commander":"^12.1.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/agent_0.1.4_1780916857058_0.6921878655246239","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@apexstack/agent","version":"0.2.0","description":"PJT Agent — runs PJT workspace tasks on your own computer (Claude Code primary, OpenAI Codex failover).","keywords":["pjt","claude-code","codex","agent","mcp","cli"],"homepage":"https://pjt.ai","license":"UNLICENSED","publishConfig":{"access":"public"},"bin":{"pjt-agent":"dist/index.js","pjt-agent-mcp":"dist/mcp.js"},"main":"dist/index.js","type":"module","scripts":{"build":"tsc","dev":"tsx src/index.ts","mcp":"tsx src/mcp.ts","start":"node dist/index.js","prepublishOnly":"npm run build"},"engines":{"node":">=18"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.0","commander":"^12.1.0","chalk":"^5.3.0","zod":"^3.23.8"},"devDependencies":{"@types/node":"^20.0.0","tsx":"^4.7.0","typescript":"^5.4.0"},"_id":"@apexstack/agent@0.2.0","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-+b7BRVufmDxt/Mp/RgQyxFFWNrwEx1XGB8+tNZPtXnnrFCkw5D/Ga8ieXK+k4KKED5JDyVthJ+TmUUNPZdtr4w==","shasum":"f82d2a84bfbdad6b85058e829533ed7d0bfe5102","tarball":"https://registry.npmjs.org/@apexstack/agent/-/agent-0.2.0.tgz","fileCount":8,"unpackedSize":60513,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICcoebMGSmvHB1AziE2P6sWntfu5DogWu0G+ta9CiGcpAiEAghOseOzSD7HqCEnnplqpwe9D8XRSLNpe3yymR3ynXtI="}]},"_npmUser":{"name":"andrew.mok","email":"mokgoon@myelinsoft.com"},"directories":{},"maintainers":[{"name":"andrew.mok","email":"mokgoon@myelinsoft.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent_0.2.0_1788227624233_0.09413863109183707"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-08T10:48:49.388Z","modified":"2026-09-01T01:53:44.554Z","0.1.1":"2026-06-08T10:48:49.691Z","0.1.2":"2026-06-08T10:50:25.325Z","0.1.3":"2026-06-08T10:56:11.258Z","0.1.4":"2026-06-08T11:07:37.228Z","0.2.0":"2026-09-01T01:53:44.377Z"},"description":"PJT Agent — runs PJT workspace tasks on your own computer (Claude Code primary, OpenAI Codex failover).","maintainers":[{"name":"andrew.mok","email":"mokgoon@myelinsoft.com"}],"readme":"# PJT Agent (`@apexstack/agent`)\n\nPJT 워크스페이스의 작업을 내 컴퓨터에서 실행하는 CLI.\n제품명은 **PJT Agent**, 명령은 `pjt-agent` 다.\n기본은 Claude Code이며, CLI/API 장애 시 작업 트리가 변경되지 않았을 때 OpenAI Codex로 자동 전환한다.\n\n## 설치 (개발 중)\n\n```bash\ncd cli/agent\nnpm install\nnpm run build\nnpm link            # 'pjt-agent' 글로벌 명령 등록\n```\n\n설치해서 쓸 때:\n```bash\nnpm install -g @apexstack/agent\n# 또는 설치 없이\nnpx @apexstack/agent@latest start\n```\n\n전제: 로컬 PATH에 Anthropic `claude`와 OpenAI `codex` CLI가 설치·로그인되어 있어야 한다.\nCodex를 설치하지 않으면 Claude 실패 시 명시적인 fallback 실패로 작업이 종료된다.\n\n## 사용\n\n### 1. 토큰 발급\n웹 UI → 워크스페이스 **AI 연동** → **PJT Agent** 섹션의 [Agent 설치하기]\n→ 위저드가 표시하는 `pjt-agent login --token pjta_xxx` 명령어 복사.\n\n### 2. 로그인\n```bash\npjt-agent login --token pjta_xxx\n# 운영: 자동 https://api.pjt.ai\n# 로컬: --api http://localhost:8080 추가\n# 기본 정책: --runner claude --fallback-runner codex\n```\n\n### 3. 실행\n원하는 코드 저장소에서:\n```bash\ncd ~/code/my-backend\npjt-agent start\n```\n→ 워크스페이스에서 실행 버튼을 누르면 이 PC의 Claude CLI가 먼저 실행되고,\n장애이며 부분 변경이 없을 때 `codex exec --sandbox workspace-write --approve-for-me`로 전환된다.\n\n## 명령어\n| 명령 | 설명 |\n|------|------|\n| `pjt-agent login --token <t> [--runner claude] [--fallback-runner codex]` | 토큰·실행기 정책 저장 (`~/.pjt/agent.json`) |\n| `pjt-agent start [--cwd <path>] [--runner ...] [--fallback-runner ...]` | long-poll 시작 (대기 + 실행) |\n| `pjt-agent status` | 인증 상태 + 설정 확인 |\n| `pjt-agent mcp` | stdio MCP 서버 실행 (워크스페이스 컨텍스트 tool 노출) |\n| `pjt-agent logout` | 로컬 설정 삭제 |\n\n## MCP 서버 (stdio · 레거시)\n\n> ⚠️ 지금 권장 경로는 **원격 HTTP MCP** 다 — AI 연동 화면의 도구 카드가 주는\n> `https://mcp.pjt.ai` + `Authorization: Bearer` 스니펫을 쓰면 설치가 필요 없다.\n> 아래 stdio 방식은 그 이전 방식으로, 오프라인/특수 환경용으로만 남겨둔다.\n\n`login` 으로 저장한 토큰을 그대로 사용해, Claude Code 가 PJT 워크스페이스 데이터를\n직접 조회할 수 있는 stdio MCP 서버를 띄운다. 백엔드 `AgentContextAPI` 의 얇은 래퍼이며\n권한/인증은 서버가 처리한다 (읽기 전용).\n\n### 등록 — 방법 1: 로그인 후 (파일 토큰)\n```bash\n# 1) 먼저 로그인되어 있어야 함 (위 login 절차)\n# 2) Claude Code 에 MCP 서버 등록 (전역 bin 사용)\nclaude mcp add pjt-workspace -- pjt-agent-mcp\n\n# npm link / 전역 설치 전이라면 직접 경로로:\nclaude mcp add pjt-workspace -- node /ABS/PATH/cli/agent/dist/mcp.js\n```\n\n### 등록 — 방법 2: env 한 줄 (login 불필요)\n`login` 없이 토큰을 환경변수로 바로 주입한다. 웹 UI 가 복붙용 명령을 생성하기 좋다.\n```bash\nclaude mcp add pjt-workspace \\\n  --env PJT_AGENT_TOKEN=pjta_xxx \\\n  --env PJT_API_URL=https://api.pjt.ai \\\n  -- pjt-agent-mcp\n```\n- `PJT_AGENT_TOKEN` (필수) — AI 연동에서 발급한 에이전트 토큰.\n- `PJT_API_URL` (선택) — 미지정 시 `~/.pjt/agent.json` → 기본값(`https://api.pjt.ai`) 순.\n- 해석 우선순위: **env → `~/.pjt/agent.json`**. 둘 다 없으면 서버가 안내 메시지와 함께 종료.\n\n### 노출 tool (7개)\n| tool | 설명 | 입력 |\n|------|------|------|\n| `list_workspaces` | 접근 가능한 워크스페이스 목록 | — |\n| `get_project` | 프로젝트 기본 정보 | `projectId` (id 또는 `p_xxx`) |\n| `list_project_tasks` | 태스크 목록 | `projectId`, `status?` |\n| `get_task` | 태스크 상세 | `taskId` |\n| `get_document` | 문서 상세(content 포함) | `documentId` |\n| `list_workspace_documents` | 워크스페이스 문서 목록 | `workspaceId`, `limit?`(1~50) |\n| `get_workspace_snapshot` | 워크스페이스 번들(최근 문서 등) | `workspaceId` |\n\n> stdout 은 JSON-RPC 전용 채널이라 로그는 모두 stderr 로만 출력한다.\n> 토큰 만료(401) 시 tool 결과에 재로그인 안내가 표시된다.\n\n## 동작 흐름\n\n```\n1. pjt-agent start\n2. GET /api/v1/agent/tasks/next?wait=20   (long poll)\n3. 작업 받음 → `claude -p \"프롬프트\"` 실행 (cwd = 작업 받은 경로 or --cwd)\n4. Claude 실패 + 정책 거절 아님 + git 상태 불변 → `codex exec`로 1회 전환\n5. POST /api/v1/agent/tasks/{id}/complete with { status, resultSummary, ... }\n6. 1번 반복\n```\n\n자동 전환은 부분 실행 중복을 막기 위해 git 상태 지문이 실행 전과 같을 때만 허용한다.\nClaude가 파일/커밋을 변경한 뒤 실패했다면 Codex를 이어 실행하지 않고 실패 결과를 반환한다.\n정책 거절이나 사용자 취소도 다른 공급자로 우회하지 않는다.\n\n환경변수로는 `PJT_AGENT_RUNNER=claude`, `PJT_AGENT_FALLBACK_RUNNER=codex`를 사용할 수 있다.\n\n## 보안\n- 토큰은 `~/.pjt/agent.json` (mode 0600) 에 평문 저장\n- 서버는 SHA-256 해시만 보관 (분실 시 새 토큰 발급 필요)\n- 작업의 `workingDir` 가 존재하지 않으면 에이전트의 `--cwd` 또는 현재 디렉토리로 폴백\n","readmeFilename":"README.md","homepage":"https://pjt.ai","keywords":["pjt","claude-code","codex","agent","mcp","cli"],"license":"UNLICENSED"}