claude-teammate 0.1.24 → 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,8 +17,6 @@
17
17
  <a href="https://github.com/ignify-rd/claude-teammate/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License" /></a>
18
18
  </p>
19
19
 
20
- <br/>
21
-
22
20
  # An autonomous software engineer that lives in your Jira and GitHub
23
21
 
24
22
  Claude Teammate is an AI bot that works around the clock - picking up tickets, writing plans, opening PRs, acting on feedback, and reviewing code. No stand-ups. No Slack pings. No passive-aggressive "per my last email." Just like your best teammate, minus the coffee breath.
@@ -32,6 +30,8 @@ Assign it tickets. It ships.
32
30
  | **03** | It ships | Opens a PR. Responds to feedback. Keeps going until it's merged. |
33
31
  | **04** | It remembers | Retains build commands, known pitfalls, and lessons from every task it has shipped - so the next ticket in the same epic starts smarter. |
34
32
 
33
+ ![Demo](assets/demo.gif)
34
+
35
35
  <br/>
36
36
 
37
37
  ## Claude Teammate is right for you if
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-teammate",
3
- "version": "0.1.24",
3
+ "version": "0.1.26",
4
4
  "description": "CLI bootstrapper for Claude Teammate.",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/src/claude.js CHANGED
@@ -6,6 +6,7 @@ const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;
6
6
  const STARTUP_CHECK_TIMEOUT_MS = 15 * 1000;
7
7
  const CHILD_CLEANUP_WAIT_MS = 1_000;
8
8
  const CLAUDE_RETRY_DELAY_MS = 5 * 60 * 1000;
9
+ const DEFAULT_CLAUDE_PERMISSION_MODE = "bypassPermissions";
9
10
  const activeClaudeChildren = new Set();
10
11
  const DEFAULT_MODEL = "sonnet";
11
12
  const PLAYWRIGHT_MCP_NAME = "playwright";
@@ -172,7 +173,7 @@ export async function runClaudeClarification(input) {
172
173
  "--model",
173
174
  input.model || DEFAULT_MODEL,
174
175
  "--permission-mode",
175
- input.permissionMode || "dontAsk",
176
+ resolveClaudePermissionMode(input.permissionMode),
176
177
  "--effort",
177
178
  "low",
178
179
  "--output-format",
@@ -206,6 +207,8 @@ export async function runClaudeClarification(input) {
206
207
 
207
208
  export async function verifyClaudeCli(input = {}) {
208
209
  const args = [
210
+ "--permission-mode",
211
+ resolveClaudePermissionMode(input.permissionMode),
209
212
  "--print",
210
213
  "--output-format",
211
214
  "text",
@@ -245,7 +248,7 @@ export async function ensurePlaywrightMcpAvailable(input = {}) {
245
248
 
246
249
  if (existingConfig) {
247
250
  try {
248
- await runClaudeCommand("claude", ["mcp", "remove", "--scope", scope, PLAYWRIGHT_MCP_NAME], {
251
+ await runClaudeCommand("claude", buildClaudeArgs(["mcp", "remove", "--scope", scope, PLAYWRIGHT_MCP_NAME], input.permissionMode), {
249
252
  cwd: input.cwd,
250
253
  maxBuffer: 1024 * 1024,
251
254
  timeout: timeoutMs
@@ -258,7 +261,7 @@ export async function ensurePlaywrightMcpAvailable(input = {}) {
258
261
  const addArgs = ["mcp", "add", "--scope", scope, PLAYWRIGHT_MCP_NAME, "--", PLAYWRIGHT_MCP_COMMAND, ...PLAYWRIGHT_MCP_ARGS];
259
262
 
260
263
  try {
261
- await runClaudeCommand("claude", addArgs, {
264
+ await runClaudeCommand("claude", buildClaudeArgs(addArgs, input.permissionMode), {
262
265
  cwd: input.cwd,
263
266
  maxBuffer: 1024 * 1024,
264
267
  timeout: input.installTimeoutMs || 60_000
@@ -309,7 +312,7 @@ export async function runClaudeGitHubIssueReview(input) {
309
312
  "--model",
310
313
  input.model || DEFAULT_MODEL,
311
314
  "--permission-mode",
312
- input.permissionMode || "dontAsk",
315
+ resolveClaudePermissionMode(input.permissionMode),
313
316
  "--effort",
314
317
  "low",
315
318
  "--output-format",
@@ -347,7 +350,7 @@ export async function runClaudeEpicMemoryCleanup(input) {
347
350
  "--model",
348
351
  input.model || DEFAULT_MODEL,
349
352
  "--permission-mode",
350
- input.permissionMode || "dontAsk",
353
+ resolveClaudePermissionMode(input.permissionMode),
351
354
  "--effort",
352
355
  "low",
353
356
  "--output-format",
@@ -385,7 +388,7 @@ export async function runClaudeEpicMemorySummarize(input) {
385
388
  "--model",
386
389
  input.model || DEFAULT_MODEL,
387
390
  "--permission-mode",
388
- input.permissionMode || "dontAsk",
391
+ resolveClaudePermissionMode(input.permissionMode),
389
392
  "--effort",
390
393
  "low",
391
394
  "--output-format",
@@ -425,7 +428,7 @@ export async function runClaudeImplementation(input) {
425
428
  "--model",
426
429
  input.model || DEFAULT_MODEL,
427
430
  "--permission-mode",
428
- input.permissionMode || "acceptEdits",
431
+ resolveClaudePermissionMode(input.permissionMode),
429
432
  "--tools",
430
433
  "Bash,Read,Grep,Glob,Edit,Write",
431
434
  "--effort",
@@ -468,7 +471,7 @@ export async function runClaudePullRequestCommentReview(input) {
468
471
  "--model",
469
472
  input.model || DEFAULT_MODEL,
470
473
  "--permission-mode",
471
- input.permissionMode || "dontAsk",
474
+ resolveClaudePermissionMode(input.permissionMode),
472
475
  "--strict-mcp-config",
473
476
  "--tools",
474
477
  "Read,Grep,Glob",
@@ -655,6 +658,14 @@ function formatClaudeInvocationError(error, timeoutMs) {
655
658
  return `Claude CLI invocation failed${timeout ? ` after ${timeoutMs}ms` : ""}${signal ? ` (${signal})` : ""}${details ? `: ${details}` : "."}`;
656
659
  }
657
660
 
661
+ function resolveClaudePermissionMode(permissionMode) {
662
+ return permissionMode || DEFAULT_CLAUDE_PERMISSION_MODE;
663
+ }
664
+
665
+ function buildClaudeArgs(args, permissionMode) {
666
+ return ["--permission-mode", resolveClaudePermissionMode(permissionMode), ...args];
667
+ }
668
+
658
669
  async function runClaudeCommand(command, args, options) {
659
670
  for (;;) {
660
671
  try {
@@ -838,7 +849,7 @@ async function clearLocalPlaywrightMcpConfig(cwd) {
838
849
  }
839
850
 
840
851
  try {
841
- await runClaudeCommand("claude", ["mcp", "remove", "--scope", "local", PLAYWRIGHT_MCP_NAME], {
852
+ await runClaudeCommand("claude", buildClaudeArgs(["mcp", "remove", "--scope", "local", PLAYWRIGHT_MCP_NAME]), {
842
853
  cwd,
843
854
  maxBuffer: 1024 * 1024,
844
855
  timeout: timeoutMs