bajaclaw 0.10.1
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/LICENSE +21 -0
- package/README.md +639 -0
- package/bin/bajaclaw.js +35 -0
- package/bin/create-bajaclaw.js +17 -0
- package/dist/agent.d.ts +29 -0
- package/dist/agent.js +231 -0
- package/dist/agent.js.map +1 -0
- package/dist/api/server.d.ts +15 -0
- package/dist/api/server.js +215 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/translate.d.ts +61 -0
- package/dist/api/translate.js +109 -0
- package/dist/api/translate.js.map +1 -0
- package/dist/banner.d.ts +7 -0
- package/dist/banner.js +31 -0
- package/dist/banner.js.map +1 -0
- package/dist/channels/gateway.d.ts +1 -0
- package/dist/channels/gateway.js +76 -0
- package/dist/channels/gateway.js.map +1 -0
- package/dist/claude.d.ts +9 -0
- package/dist/claude.js +170 -0
- package/dist/claude.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +303 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/channel.d.ts +3 -0
- package/dist/commands/channel.js +27 -0
- package/dist/commands/channel.js.map +1 -0
- package/dist/commands/compact.d.ts +8 -0
- package/dist/commands/compact.js +60 -0
- package/dist/commands/compact.js.map +1 -0
- package/dist/commands/daemon.d.ts +7 -0
- package/dist/commands/daemon.js +129 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/dashboard.d.ts +1 -0
- package/dist/commands/dashboard.js +78 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.js +25 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/dry-run.d.ts +1 -0
- package/dist/commands/dry-run.js +5 -0
- package/dist/commands/dry-run.js.map +1 -0
- package/dist/commands/effort.d.ts +6 -0
- package/dist/commands/effort.js +33 -0
- package/dist/commands/effort.js.map +1 -0
- package/dist/commands/guide.d.ts +4 -0
- package/dist/commands/guide.js +52 -0
- package/dist/commands/guide.js.map +1 -0
- package/dist/commands/health.d.ts +1 -0
- package/dist/commands/health.js +20 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/init.d.ts +12 -0
- package/dist/commands/init.js +114 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp.d.ts +9 -0
- package/dist/commands/mcp.js +63 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/migrate.d.ts +1 -0
- package/dist/commands/migrate.js +58 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/model.d.ts +5 -0
- package/dist/commands/model.js +31 -0
- package/dist/commands/model.js.map +1 -0
- package/dist/commands/persona.d.ts +6 -0
- package/dist/commands/persona.js +67 -0
- package/dist/commands/persona.js.map +1 -0
- package/dist/commands/port.d.ts +15 -0
- package/dist/commands/port.js +88 -0
- package/dist/commands/port.js.map +1 -0
- package/dist/commands/profile.d.ts +4 -0
- package/dist/commands/profile.js +41 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/serve.d.ts +14 -0
- package/dist/commands/serve.js +62 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/setup.d.ts +17 -0
- package/dist/commands/setup.js +228 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skill.d.ts +7 -0
- package/dist/commands/skill.js +137 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/start.d.ts +6 -0
- package/dist/commands/start.js +25 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.js +35 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/subagent.d.ts +14 -0
- package/dist/commands/subagent.js +173 -0
- package/dist/commands/subagent.js.map +1 -0
- package/dist/commands/trigger.d.ts +1 -0
- package/dist/commands/trigger.js +13 -0
- package/dist/commands/trigger.js.map +1 -0
- package/dist/commands/uninstall.d.ts +5 -0
- package/dist/commands/uninstall.js +165 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.js +49 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/concurrency.d.ts +1 -0
- package/dist/concurrency.js +17 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.js +42 -0
- package/dist/config.js.map +1 -0
- package/dist/db.d.ts +3 -0
- package/dist/db.js +124 -0
- package/dist/db.js.map +1 -0
- package/dist/delegation.d.ts +6 -0
- package/dist/delegation.js +21 -0
- package/dist/delegation.js.map +1 -0
- package/dist/health-check.d.ts +6 -0
- package/dist/health-check.js +38 -0
- package/dist/health-check.js.map +1 -0
- package/dist/logger.d.ts +11 -0
- package/dist/logger.js +53 -0
- package/dist/logger.js.map +1 -0
- package/dist/mcp/consumer.d.ts +15 -0
- package/dist/mcp/consumer.js +74 -0
- package/dist/mcp/consumer.js.map +1 -0
- package/dist/mcp/server.d.ts +6 -0
- package/dist/mcp/server.js +260 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/memory/claude-compat.d.ts +4 -0
- package/dist/memory/claude-compat.js +56 -0
- package/dist/memory/claude-compat.js.map +1 -0
- package/dist/memory/compact.d.ts +25 -0
- package/dist/memory/compact.js +195 -0
- package/dist/memory/compact.js.map +1 -0
- package/dist/memory/extract.d.ts +3 -0
- package/dist/memory/extract.js +56 -0
- package/dist/memory/extract.js.map +1 -0
- package/dist/memory/recall.d.ts +5 -0
- package/dist/memory/recall.js +47 -0
- package/dist/memory/recall.js.map +1 -0
- package/dist/model-picker.d.ts +33 -0
- package/dist/model-picker.js +104 -0
- package/dist/model-picker.js.map +1 -0
- package/dist/paths.d.ts +12 -0
- package/dist/paths.js +49 -0
- package/dist/paths.js.map +1 -0
- package/dist/persona-io.d.ts +5 -0
- package/dist/persona-io.js +29 -0
- package/dist/persona-io.js.map +1 -0
- package/dist/persona.d.ts +12 -0
- package/dist/persona.js +54 -0
- package/dist/persona.js.map +1 -0
- package/dist/prompt.d.ts +5 -0
- package/dist/prompt.js +56 -0
- package/dist/prompt.js.map +1 -0
- package/dist/safety.d.ts +17 -0
- package/dist/safety.js +47 -0
- package/dist/safety.js.map +1 -0
- package/dist/scheduler/cron.d.ts +4 -0
- package/dist/scheduler/cron.js +44 -0
- package/dist/scheduler/cron.js.map +1 -0
- package/dist/scheduler/index.d.ts +7 -0
- package/dist/scheduler/index.js +15 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/launchd.d.ts +4 -0
- package/dist/scheduler/launchd.js +73 -0
- package/dist/scheduler/launchd.js.map +1 -0
- package/dist/scheduler/schtasks.d.ts +4 -0
- package/dist/scheduler/schtasks.js +45 -0
- package/dist/scheduler/schtasks.js.map +1 -0
- package/dist/scheduler/systemd.d.ts +5 -0
- package/dist/scheduler/systemd.js +86 -0
- package/dist/scheduler/systemd.js.map +1 -0
- package/dist/self-improve.d.ts +4 -0
- package/dist/self-improve.js +48 -0
- package/dist/self-improve.js.map +1 -0
- package/dist/skills/auto-skiller.d.ts +21 -0
- package/dist/skills/auto-skiller.js +156 -0
- package/dist/skills/auto-skiller.js.map +1 -0
- package/dist/skills/loader.d.ts +3 -0
- package/dist/skills/loader.js +127 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/matcher.d.ts +2 -0
- package/dist/skills/matcher.js +27 -0
- package/dist/skills/matcher.js.map +1 -0
- package/dist/skills/porter.d.ts +27 -0
- package/dist/skills/porter.js +109 -0
- package/dist/skills/porter.js.map +1 -0
- package/dist/types.d.ts +110 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/updater.d.ts +25 -0
- package/dist/updater.js +185 -0
- package/dist/updater.js.map +1 -0
- package/package.json +53 -0
- package/scripts/postinstall.js +33 -0
- package/skills/configure-effort/SKILL.md +36 -0
- package/skills/configure-model/SKILL.md +41 -0
- package/skills/configure-tools/SKILL.md +51 -0
- package/skills/daily-briefing/SKILL.md +19 -0
- package/skills/delegate-to-subagent/SKILL.md +63 -0
- package/skills/email-triage/SKILL.md +21 -0
- package/skills/setup-api/SKILL.md +115 -0
- package/skills/setup-compaction/SKILL.md +102 -0
- package/skills/setup-daemon/SKILL.md +49 -0
- package/skills/setup-dashboard/SKILL.md +39 -0
- package/skills/setup-discord/SKILL.md +54 -0
- package/skills/setup-heartbeat/SKILL.md +51 -0
- package/skills/setup-mcp-port/SKILL.md +54 -0
- package/skills/setup-memory-sync/SKILL.md +45 -0
- package/skills/setup-profile/SKILL.md +44 -0
- package/skills/setup-self-update/SKILL.md +45 -0
- package/skills/setup-subagent/SKILL.md +102 -0
- package/skills/setup-telegram/SKILL.md +54 -0
- package/skills/setup-uninstall/SKILL.md +55 -0
- package/skills/web-research/SKILL.md +20 -0
- package/templates/code/AGENT.md +15 -0
- package/templates/code/HEARTBEAT.md +11 -0
- package/templates/code/SOUL.md +10 -0
- package/templates/code/bajaclaw.config.json +5 -0
- package/templates/code/scripts/launch.bat +4 -0
- package/templates/code/scripts/launch.sh +4 -0
- package/templates/custom/AGENT.md +14 -0
- package/templates/custom/HEARTBEAT.md +11 -0
- package/templates/custom/SOUL.md +10 -0
- package/templates/custom/bajaclaw.config.json +5 -0
- package/templates/custom/scripts/launch.bat +4 -0
- package/templates/custom/scripts/launch.sh +4 -0
- package/templates/outreach/AGENT.md +11 -0
- package/templates/outreach/HEARTBEAT.md +11 -0
- package/templates/outreach/SOUL.md +10 -0
- package/templates/outreach/bajaclaw.config.json +5 -0
- package/templates/outreach/scripts/launch.bat +4 -0
- package/templates/outreach/scripts/launch.sh +4 -0
- package/templates/research/AGENT.md +27 -0
- package/templates/research/HEARTBEAT.md +11 -0
- package/templates/research/SOUL.md +10 -0
- package/templates/research/bajaclaw.config.json +5 -0
- package/templates/research/scripts/launch.bat +4 -0
- package/templates/research/scripts/launch.sh +4 -0
- package/templates/social/AGENT.md +10 -0
- package/templates/social/HEARTBEAT.md +11 -0
- package/templates/social/SOUL.md +10 -0
- package/templates/social/bajaclaw.config.json +5 -0
- package/templates/social/scripts/launch.bat +4 -0
- package/templates/social/scripts/launch.sh +4 -0
- package/templates/support/AGENT.md +10 -0
- package/templates/support/HEARTBEAT.md +11 -0
- package/templates/support/SOUL.md +10 -0
- package/templates/support/bajaclaw.config.json +5 -0
- package/templates/support/scripts/launch.bat +4 -0
- package/templates/support/scripts/launch.sh +4 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function matchSkills(skills, task, topN = 3) {
|
|
2
|
+
const taskLower = task.toLowerCase();
|
|
3
|
+
const scored = skills.map((s) => ({ s, score: scoreSkill(s, taskLower) }));
|
|
4
|
+
scored.sort((a, b) => b.score - a.score);
|
|
5
|
+
return scored.filter((x) => x.score > 0).slice(0, topN).map((x) => x.s);
|
|
6
|
+
}
|
|
7
|
+
function scoreSkill(skill, taskLower) {
|
|
8
|
+
let score = 0;
|
|
9
|
+
for (const trig of skill.triggers ?? []) {
|
|
10
|
+
if (taskLower.includes(trig.toLowerCase()))
|
|
11
|
+
score += 5;
|
|
12
|
+
}
|
|
13
|
+
for (const word of (skill.description ?? "").toLowerCase().split(/\s+/)) {
|
|
14
|
+
if (word.length < 4)
|
|
15
|
+
continue;
|
|
16
|
+
if (taskLower.includes(word))
|
|
17
|
+
score += 1;
|
|
18
|
+
}
|
|
19
|
+
for (const word of skill.name.toLowerCase().split(/[-_\s]+/)) {
|
|
20
|
+
if (word.length < 4)
|
|
21
|
+
continue;
|
|
22
|
+
if (taskLower.includes(word))
|
|
23
|
+
score += 2;
|
|
24
|
+
}
|
|
25
|
+
return score;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/skills/matcher.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,MAAe,EAAE,IAAY,EAAE,IAAI,GAAG,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,UAAU,CAAC,KAAY,EAAE,SAAiB;IACjD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACxC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAC9B,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAC9B,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type PortDestination = {
|
|
2
|
+
scope: "user";
|
|
3
|
+
} | {
|
|
4
|
+
scope: "profile";
|
|
5
|
+
profile: string;
|
|
6
|
+
} | {
|
|
7
|
+
scope: "agent";
|
|
8
|
+
profile: string;
|
|
9
|
+
};
|
|
10
|
+
export type PortMode = "copy" | "link";
|
|
11
|
+
export interface PortOptions {
|
|
12
|
+
source?: string;
|
|
13
|
+
destination?: PortDestination;
|
|
14
|
+
mode?: PortMode;
|
|
15
|
+
names?: string[];
|
|
16
|
+
force?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface PortReport {
|
|
19
|
+
ported: string[];
|
|
20
|
+
skipped: {
|
|
21
|
+
name: string;
|
|
22
|
+
reason: string;
|
|
23
|
+
}[];
|
|
24
|
+
destinationDir: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function portSkills(opts?: PortOptions): Promise<PortReport>;
|
|
27
|
+
export declare function printPortReport(report: PortReport, mode: PortMode): void;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// Port skills from the desktop CLI scope into BajaClaw's scope. By default
|
|
2
|
+
// BajaClaw does not read ~/.claude/skills — use this to opt in per skill.
|
|
3
|
+
import { existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync, statSync, symlinkSync, unlinkSync, } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import { bajaclawHome, claudeSkillsDir, profileDir, ensureDir } from "../paths.js";
|
|
7
|
+
import { parseSkill } from "./loader.js";
|
|
8
|
+
export async function portSkills(opts = {}) {
|
|
9
|
+
const src = opts.source ?? claudeSkillsDir();
|
|
10
|
+
const dst = opts.destination ?? { scope: "user" };
|
|
11
|
+
const mode = opts.mode ?? "copy";
|
|
12
|
+
const destDir = destinationDir(dst);
|
|
13
|
+
const report = { ported: [], skipped: [], destinationDir: destDir };
|
|
14
|
+
if (!existsSync(src)) {
|
|
15
|
+
report.skipped.push({ name: "(source)", reason: `not found: ${src}` });
|
|
16
|
+
return report;
|
|
17
|
+
}
|
|
18
|
+
ensureDir(destDir);
|
|
19
|
+
const candidates = listSkillDirs(src);
|
|
20
|
+
const want = opts.names && opts.names.length > 0 ? new Set(opts.names) : null;
|
|
21
|
+
for (const name of candidates) {
|
|
22
|
+
if (want && !want.has(name))
|
|
23
|
+
continue;
|
|
24
|
+
const from = join(src, name);
|
|
25
|
+
const to = join(destDir, name);
|
|
26
|
+
const skillFile = join(from, "SKILL.md");
|
|
27
|
+
if (!existsSync(skillFile)) {
|
|
28
|
+
report.skipped.push({ name, reason: "no SKILL.md" });
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const parsed = parseSkill(readFileSync(skillFile, "utf8"), from, "bajaclaw-user");
|
|
32
|
+
if (!parsed) {
|
|
33
|
+
report.skipped.push({ name, reason: "unparseable frontmatter" });
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (existsSync(to) && !opts.force) {
|
|
37
|
+
report.skipped.push({ name, reason: "already present (use --force to overwrite)" });
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (existsSync(to)) {
|
|
41
|
+
removeRecursive(to);
|
|
42
|
+
}
|
|
43
|
+
if (mode === "link") {
|
|
44
|
+
symlinkSync(from, to, "dir");
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
copyDir(from, to);
|
|
48
|
+
}
|
|
49
|
+
report.ported.push(name);
|
|
50
|
+
}
|
|
51
|
+
return report;
|
|
52
|
+
}
|
|
53
|
+
export function printPortReport(report, mode) {
|
|
54
|
+
console.log(chalk.dim(`destination: ${report.destinationDir} (${mode})`));
|
|
55
|
+
for (const name of report.ported)
|
|
56
|
+
console.log(chalk.green(`✓ ${name}`));
|
|
57
|
+
for (const s of report.skipped)
|
|
58
|
+
console.log(chalk.yellow(`- ${s.name}: ${s.reason}`));
|
|
59
|
+
if (report.ported.length === 0 && report.skipped.length === 0) {
|
|
60
|
+
console.log(chalk.dim("(no skills found)"));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function destinationDir(dst) {
|
|
64
|
+
if (dst.scope === "user")
|
|
65
|
+
return join(bajaclawHome(), "skills");
|
|
66
|
+
if (dst.scope === "profile")
|
|
67
|
+
return join(profileDir(dst.profile), "skills");
|
|
68
|
+
return join(profileDir(dst.profile), "skills");
|
|
69
|
+
}
|
|
70
|
+
function listSkillDirs(dir) {
|
|
71
|
+
return readdirSync(dir).filter((name) => {
|
|
72
|
+
try {
|
|
73
|
+
return statSync(join(dir, name)).isDirectory();
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function copyDir(from, to) {
|
|
81
|
+
mkdirSync(to, { recursive: true });
|
|
82
|
+
for (const entry of readdirSync(from)) {
|
|
83
|
+
const src = join(from, entry);
|
|
84
|
+
const dst = join(to, entry);
|
|
85
|
+
const s = statSync(src);
|
|
86
|
+
if (s.isDirectory())
|
|
87
|
+
copyDir(src, dst);
|
|
88
|
+
else
|
|
89
|
+
writeFileSync(dst, readFileSync(src));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function removeRecursive(path) {
|
|
93
|
+
try {
|
|
94
|
+
const s = statSync(path);
|
|
95
|
+
if (s.isDirectory()) {
|
|
96
|
+
for (const entry of readdirSync(path))
|
|
97
|
+
removeRecursive(join(path, entry));
|
|
98
|
+
try {
|
|
99
|
+
unlinkSync(path);
|
|
100
|
+
}
|
|
101
|
+
catch { /* dir */ }
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
unlinkSync(path);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch { /* swallow */ }
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=porter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"porter.js","sourceRoot":"","sources":["../../src/skills/porter.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
export type Model = "auto" | "claude-opus-4-7" | "claude-sonnet-4-6" | "claude-haiku-4-5" | string;
|
|
2
|
+
export type Effort = "low" | "medium" | "high";
|
|
3
|
+
export interface ClaudeOptions {
|
|
4
|
+
model?: Model;
|
|
5
|
+
effort?: Effort;
|
|
6
|
+
maxTurns?: number;
|
|
7
|
+
allowedTools?: string[];
|
|
8
|
+
disallowedTools?: string[];
|
|
9
|
+
mcpConfig?: string;
|
|
10
|
+
workdir?: string;
|
|
11
|
+
printMode?: boolean;
|
|
12
|
+
systemPrompt?: string;
|
|
13
|
+
timeout?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ClaudeResult {
|
|
16
|
+
ok: boolean;
|
|
17
|
+
text: string;
|
|
18
|
+
events: ClaudeEvent[];
|
|
19
|
+
costUsd?: number;
|
|
20
|
+
inputTokens?: number;
|
|
21
|
+
outputTokens?: number;
|
|
22
|
+
turns?: number;
|
|
23
|
+
durationMs: number;
|
|
24
|
+
dryRun?: boolean;
|
|
25
|
+
command?: string[];
|
|
26
|
+
error?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ClaudeEvent {
|
|
29
|
+
type: "text" | "tool_use" | "tool_result" | "assistant" | "system" | "result" | "user";
|
|
30
|
+
content?: unknown;
|
|
31
|
+
[k: string]: unknown;
|
|
32
|
+
}
|
|
33
|
+
export interface AgentConfig {
|
|
34
|
+
name: string;
|
|
35
|
+
profile: string;
|
|
36
|
+
template: string;
|
|
37
|
+
model: Model;
|
|
38
|
+
effort: Effort;
|
|
39
|
+
maxTurns: number;
|
|
40
|
+
allowedTools?: string[];
|
|
41
|
+
disallowedTools?: string[];
|
|
42
|
+
dashboardPort?: number;
|
|
43
|
+
memorySync?: boolean;
|
|
44
|
+
channels?: ChannelConfig[];
|
|
45
|
+
mergeDesktopMcp?: boolean;
|
|
46
|
+
autoSkill?: {
|
|
47
|
+
enabled?: boolean;
|
|
48
|
+
minToolUses?: number;
|
|
49
|
+
maxPerDay?: number;
|
|
50
|
+
};
|
|
51
|
+
parent?: string;
|
|
52
|
+
subAgents?: string[];
|
|
53
|
+
compaction?: CompactionConfig;
|
|
54
|
+
}
|
|
55
|
+
export interface CompactionConfig {
|
|
56
|
+
enabled?: boolean;
|
|
57
|
+
threshold?: number;
|
|
58
|
+
schedule?: "threshold" | "daily" | "both" | "off";
|
|
59
|
+
dailyAtUtc?: string;
|
|
60
|
+
keepRecentPerKind?: number;
|
|
61
|
+
pruneCycleDays?: number;
|
|
62
|
+
}
|
|
63
|
+
export interface ChannelConfig {
|
|
64
|
+
kind: "telegram" | "discord";
|
|
65
|
+
token: string;
|
|
66
|
+
channelId?: string;
|
|
67
|
+
allowlist?: (string | number)[];
|
|
68
|
+
}
|
|
69
|
+
export interface Skill {
|
|
70
|
+
name: string;
|
|
71
|
+
description: string;
|
|
72
|
+
version?: string;
|
|
73
|
+
tools?: string[];
|
|
74
|
+
triggers?: string[];
|
|
75
|
+
effort?: Effort;
|
|
76
|
+
body: string;
|
|
77
|
+
path: string;
|
|
78
|
+
scope: SkillScope;
|
|
79
|
+
}
|
|
80
|
+
export type SkillScope = "agent" | "bajaclaw-user" | "bajaclaw-builtin" | "claude-user" | "claude-project";
|
|
81
|
+
export interface Memory {
|
|
82
|
+
id: number;
|
|
83
|
+
kind: string;
|
|
84
|
+
content: string;
|
|
85
|
+
source: string;
|
|
86
|
+
source_cycle_id?: number;
|
|
87
|
+
created_at: string;
|
|
88
|
+
}
|
|
89
|
+
export interface ScheduleEntry {
|
|
90
|
+
id?: number;
|
|
91
|
+
cron: string;
|
|
92
|
+
task: string;
|
|
93
|
+
enabled: number;
|
|
94
|
+
last_run?: string;
|
|
95
|
+
next_run?: string;
|
|
96
|
+
}
|
|
97
|
+
export interface CycleRow {
|
|
98
|
+
id: number;
|
|
99
|
+
started_at: string;
|
|
100
|
+
finished_at?: string;
|
|
101
|
+
status: "running" | "ok" | "error";
|
|
102
|
+
task: string;
|
|
103
|
+
prompt_preview: string;
|
|
104
|
+
response_preview?: string;
|
|
105
|
+
cost_usd?: number;
|
|
106
|
+
input_tokens?: number;
|
|
107
|
+
output_tokens?: number;
|
|
108
|
+
turns?: number;
|
|
109
|
+
error?: string;
|
|
110
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface UpdateInfo {
|
|
2
|
+
current: string;
|
|
3
|
+
latest: string | null;
|
|
4
|
+
channel: "npm" | "github" | "cache" | "none";
|
|
5
|
+
checkedAt: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function currentVersion(): string;
|
|
9
|
+
export declare function check(opts?: {
|
|
10
|
+
force?: boolean;
|
|
11
|
+
}): Promise<UpdateInfo | null>;
|
|
12
|
+
export declare function compareSemver(a: string, b: string): number;
|
|
13
|
+
export declare function newerAvailable(info: UpdateInfo | null): boolean;
|
|
14
|
+
export declare function printNotice(info: UpdateInfo): void;
|
|
15
|
+
export interface InstallLocation {
|
|
16
|
+
kind: "npm-global" | "npm-local" | "git" | "unknown";
|
|
17
|
+
path: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function detectInstall(): InstallLocation;
|
|
20
|
+
export interface UpdateResult {
|
|
21
|
+
ok: boolean;
|
|
22
|
+
method: string;
|
|
23
|
+
message: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function performUpdate(info: UpdateInfo | null): Promise<UpdateResult>;
|
package/dist/updater.js
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// Auto-update check. Runs at most once per 24h, never blocks the CLI.
|
|
2
|
+
// Channels:
|
|
3
|
+
// 1. npm registry (primary once published)
|
|
4
|
+
// 2. GitHub raw package.json (fallback, URL from package.json "bajaclaw.updateUrl")
|
|
5
|
+
// Cache: ~/.bajaclaw/.update-check.json
|
|
6
|
+
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
7
|
+
import { join, dirname } from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
import { spawnSync } from "node:child_process";
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import { bajaclawHome, ensureDir } from "./paths.js";
|
|
12
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
// __dirname is either .../src or .../dist; package.json lives one level up.
|
|
14
|
+
const PKG_PATH = join(__dirname, "..", "package.json");
|
|
15
|
+
const CACHE_PATH = () => join(bajaclawHome(), ".update-check.json");
|
|
16
|
+
const TTL_MS = 24 * 60 * 60 * 1000;
|
|
17
|
+
const FETCH_TIMEOUT = 3000;
|
|
18
|
+
export function currentVersion() {
|
|
19
|
+
try {
|
|
20
|
+
const pkg = JSON.parse(readFileSync(PKG_PATH, "utf8"));
|
|
21
|
+
return String(pkg.version ?? "0.0.0");
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return "0.0.0";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function readPkg() {
|
|
28
|
+
try {
|
|
29
|
+
return JSON.parse(readFileSync(PKG_PATH, "utf8"));
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export async function check(opts = {}) {
|
|
36
|
+
const current = currentVersion();
|
|
37
|
+
const cachePath = CACHE_PATH();
|
|
38
|
+
if (!opts.force && existsSync(cachePath)) {
|
|
39
|
+
try {
|
|
40
|
+
const cached = JSON.parse(readFileSync(cachePath, "utf8"));
|
|
41
|
+
if (Date.now() - Date.parse(cached.checkedAt) < TTL_MS) {
|
|
42
|
+
return { ...cached, channel: "cache" };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch { /* fall through */ }
|
|
46
|
+
}
|
|
47
|
+
const result = await fetchLatest();
|
|
48
|
+
const info = {
|
|
49
|
+
current,
|
|
50
|
+
latest: result?.version ?? null,
|
|
51
|
+
channel: result?.channel ?? "none",
|
|
52
|
+
checkedAt: new Date().toISOString(),
|
|
53
|
+
url: result?.url,
|
|
54
|
+
};
|
|
55
|
+
try {
|
|
56
|
+
ensureDir(bajaclawHome());
|
|
57
|
+
writeFileSync(cachePath, JSON.stringify(info, null, 2));
|
|
58
|
+
}
|
|
59
|
+
catch { /* silent */ }
|
|
60
|
+
return info;
|
|
61
|
+
}
|
|
62
|
+
async function fetchLatest() {
|
|
63
|
+
const pkg = readPkg();
|
|
64
|
+
const npmName = String(pkg.name ?? "bajaclaw");
|
|
65
|
+
const cfg = pkg.bajaclaw ?? {};
|
|
66
|
+
const overrideUrl = cfg.updateUrl;
|
|
67
|
+
const npmUrl = `https://registry.npmjs.org/${cfg.npmName ?? npmName}/latest`;
|
|
68
|
+
try {
|
|
69
|
+
const r = await fetchWithTimeout(npmUrl);
|
|
70
|
+
if (r?.ok) {
|
|
71
|
+
const data = await r.json();
|
|
72
|
+
if (data.version && typeof data.version === "string") {
|
|
73
|
+
return { version: data.version, channel: "npm", url: npmUrl };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch { /* silent */ }
|
|
78
|
+
if (overrideUrl) {
|
|
79
|
+
try {
|
|
80
|
+
const r = await fetchWithTimeout(overrideUrl);
|
|
81
|
+
if (r?.ok) {
|
|
82
|
+
const text = await r.text();
|
|
83
|
+
try {
|
|
84
|
+
const parsed = JSON.parse(text);
|
|
85
|
+
if (parsed.version)
|
|
86
|
+
return { version: parsed.version, channel: "github", url: overrideUrl };
|
|
87
|
+
}
|
|
88
|
+
catch { /* not JSON */ }
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch { /* silent */ }
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
async function fetchWithTimeout(url) {
|
|
96
|
+
try {
|
|
97
|
+
const ac = new AbortController();
|
|
98
|
+
const timer = setTimeout(() => ac.abort(), FETCH_TIMEOUT);
|
|
99
|
+
const r = await fetch(url, { signal: ac.signal });
|
|
100
|
+
clearTimeout(timer);
|
|
101
|
+
return r;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export function compareSemver(a, b) {
|
|
108
|
+
const pa = parse(a);
|
|
109
|
+
const pb = parse(b);
|
|
110
|
+
for (let i = 0; i < 3; i++) {
|
|
111
|
+
const diff = pa[i] - pb[i];
|
|
112
|
+
if (diff !== 0)
|
|
113
|
+
return diff;
|
|
114
|
+
}
|
|
115
|
+
return 0;
|
|
116
|
+
}
|
|
117
|
+
function parse(v) {
|
|
118
|
+
return v.replace(/^v/, "").split("-")[0].split(".").slice(0, 3).map((n) => Number(n) || 0);
|
|
119
|
+
}
|
|
120
|
+
export function newerAvailable(info) {
|
|
121
|
+
if (!info || !info.latest)
|
|
122
|
+
return false;
|
|
123
|
+
return compareSemver(info.latest, info.current) > 0;
|
|
124
|
+
}
|
|
125
|
+
export function printNotice(info) {
|
|
126
|
+
if (!newerAvailable(info))
|
|
127
|
+
return;
|
|
128
|
+
if (!process.stdout.isTTY)
|
|
129
|
+
return;
|
|
130
|
+
if (process.env.BAJACLAW_NO_UPDATE_NOTICE === "1")
|
|
131
|
+
return;
|
|
132
|
+
const label = "update available";
|
|
133
|
+
const versions = `${info.current} → ${info.latest}`;
|
|
134
|
+
const hint = "run: bajaclaw update";
|
|
135
|
+
const plain = ` ${label} ${versions} · ${hint} `;
|
|
136
|
+
const colored = ` ${chalk.bold.yellow(label)} ${chalk.cyan(info.current)} → ${chalk.green(info.latest)} · ${chalk.dim("run:")} ${chalk.bold("bajaclaw update")} `;
|
|
137
|
+
const width = plain.length;
|
|
138
|
+
const pad = colored.length - plain.length;
|
|
139
|
+
const top = "╭" + "─".repeat(width) + "╮";
|
|
140
|
+
const mid = "│" + colored.padEnd(width + pad) + "│";
|
|
141
|
+
const bot = "╰" + "─".repeat(width) + "╯";
|
|
142
|
+
process.stdout.write("\n" + chalk.dim(top) + "\n" + chalk.dim(mid) + "\n" + chalk.dim(bot) + "\n");
|
|
143
|
+
}
|
|
144
|
+
export function detectInstall() {
|
|
145
|
+
const root = join(__dirname, "..", "..");
|
|
146
|
+
if (existsSync(join(root, ".git")))
|
|
147
|
+
return { kind: "git", path: root };
|
|
148
|
+
// Heuristic: npm global usually has parent that is node_modules + .bin
|
|
149
|
+
const rootUp = join(root, "..", "..");
|
|
150
|
+
if (/node_modules[/\\](bajaclaw|create-bajaclaw)/.test(root) || existsSync(join(rootUp, ".package-lock.json"))) {
|
|
151
|
+
return { kind: "npm-global", path: root };
|
|
152
|
+
}
|
|
153
|
+
return { kind: "unknown", path: root };
|
|
154
|
+
}
|
|
155
|
+
export async function performUpdate(info) {
|
|
156
|
+
const loc = detectInstall();
|
|
157
|
+
if (loc.kind === "git") {
|
|
158
|
+
const pull = spawnSync("git", ["pull", "--ff-only"], { cwd: loc.path, encoding: "utf8" });
|
|
159
|
+
if (pull.status !== 0)
|
|
160
|
+
return { ok: false, method: "git pull", message: pull.stderr || pull.stdout || "git pull failed" };
|
|
161
|
+
const install = spawnSync("npm", ["install", "--no-audit", "--no-fund"], { cwd: loc.path, encoding: "utf8" });
|
|
162
|
+
if (install.status !== 0)
|
|
163
|
+
return { ok: false, method: "npm install", message: install.stderr || install.stdout };
|
|
164
|
+
const build = spawnSync("npm", ["run", "build"], { cwd: loc.path, encoding: "utf8" });
|
|
165
|
+
return {
|
|
166
|
+
ok: build.status === 0,
|
|
167
|
+
method: "git pull + npm install + npm run build",
|
|
168
|
+
message: build.status === 0 ? `updated to ${info?.latest ?? "HEAD"}` : (build.stderr || build.stdout),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// npm path. Defaults to the package name on the npm registry; an
|
|
172
|
+
// explicit `bajaclaw.installSpec` in package.json overrides that (e.g.
|
|
173
|
+
// `"github:backyarddd/BajaClaw"` to pin a fork to main).
|
|
174
|
+
const pkg = readPkg();
|
|
175
|
+
const cfg = pkg.bajaclaw ?? {};
|
|
176
|
+
const npmName = String(cfg.npmName ?? pkg.name ?? "bajaclaw");
|
|
177
|
+
const installSpec = cfg.installSpec ?? `${npmName}@latest`;
|
|
178
|
+
const install = spawnSync("npm", ["install", "-g", installSpec], { encoding: "utf8" });
|
|
179
|
+
return {
|
|
180
|
+
ok: install.status === 0,
|
|
181
|
+
method: `npm install -g ${installSpec}`,
|
|
182
|
+
message: install.status === 0 ? `updated to ${info?.latest ?? "latest"}` : (install.stderr || install.stdout),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=updater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updater.js","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bajaclaw",
|
|
3
|
+
"version": "0.10.1",
|
|
4
|
+
"description": "BajaClaw — autonomous agents on your terms",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bajaclaw": {
|
|
7
|
+
"npmName": "bajaclaw",
|
|
8
|
+
"updateUrl": "https://raw.githubusercontent.com/backyarddd/BajaClaw/main/package.json"
|
|
9
|
+
},
|
|
10
|
+
"bin": {
|
|
11
|
+
"create-bajaclaw": "bin/create-bajaclaw.js",
|
|
12
|
+
"bajaclaw": "bin/bajaclaw.js"
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc -p tsconfig.json",
|
|
16
|
+
"dev": "tsx src/cli.ts",
|
|
17
|
+
"test": "node --test \"tests/**/*.test.js\"",
|
|
18
|
+
"lint": "tsc --noEmit",
|
|
19
|
+
"prepare": "npm run build",
|
|
20
|
+
"postinstall": "node scripts/postinstall.js"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"bin/",
|
|
24
|
+
"dist/",
|
|
25
|
+
"scripts/",
|
|
26
|
+
"skills/",
|
|
27
|
+
"templates/"
|
|
28
|
+
],
|
|
29
|
+
"keywords": ["claude", "agent", "autonomous", "mcp", "cli"],
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=20"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
36
|
+
"better-sqlite3": "^12.0.0",
|
|
37
|
+
"chalk": "^5.3.0",
|
|
38
|
+
"commander": "^12.1.0",
|
|
39
|
+
"execa": "^9.5.0",
|
|
40
|
+
"ora": "^8.1.0"
|
|
41
|
+
},
|
|
42
|
+
"optionalDependencies": {
|
|
43
|
+
"discord.js": "^14.16.0",
|
|
44
|
+
"node-telegram-bot-api": "^0.66.0"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
48
|
+
"@types/node": "^22.10.0",
|
|
49
|
+
"@types/node-telegram-bot-api": "^0.64.10",
|
|
50
|
+
"tsx": "^4.21.0",
|
|
51
|
+
"typescript": "^5.9.0"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// npm postinstall — runs `bajaclaw setup` only on a global install.
|
|
3
|
+
// Local dev installs (npm install inside the repo) are a no-op.
|
|
4
|
+
//
|
|
5
|
+
// Silent on missing claude CLI, missing permissions, or any other soft
|
|
6
|
+
// failure — the install should not fail because setup didn't succeed.
|
|
7
|
+
import { spawnSync } from "node:child_process";
|
|
8
|
+
import { existsSync } from "node:fs";
|
|
9
|
+
import { dirname, join } from "node:path";
|
|
10
|
+
import { fileURLToPath } from "node:url";
|
|
11
|
+
|
|
12
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
|
|
14
|
+
// Skip if this isn't a global install. npm sets npm_config_global=true during
|
|
15
|
+
// `npm install -g`. For other installs, exit quietly.
|
|
16
|
+
if (process.env.npm_config_global !== "true") process.exit(0);
|
|
17
|
+
|
|
18
|
+
// Skip inside CI. Most CI envs set CI=true — we don't want to touch a home
|
|
19
|
+
// directory we don't own.
|
|
20
|
+
if (process.env.CI && process.env.BAJACLAW_SETUP_IN_CI !== "1") process.exit(0);
|
|
21
|
+
|
|
22
|
+
const launcher = join(__dirname, "..", "bin", "bajaclaw.js");
|
|
23
|
+
if (!existsSync(launcher)) process.exit(0);
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
spawnSync(process.execPath, [launcher, "setup"], {
|
|
27
|
+
stdio: "inherit",
|
|
28
|
+
env: { ...process.env, BAJACLAW_NO_UPDATE_NOTICE: "1" },
|
|
29
|
+
});
|
|
30
|
+
} catch {
|
|
31
|
+
// Never fail the install on a setup hiccup.
|
|
32
|
+
}
|
|
33
|
+
process.exit(0);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: configure-effort
|
|
3
|
+
description: Change the effort level (low/medium/high) a BajaClaw profile uses
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
tools: [Bash, Read, Edit]
|
|
6
|
+
triggers: ["change effort", "more effort", "less effort", "high effort", "low effort", "thinking harder", "faster cycles"]
|
|
7
|
+
effort: low
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## When to use
|
|
11
|
+
User wants cycles to think longer or finish faster — e.g. bump to `high`
|
|
12
|
+
for a weekly reflection, drop to `low` for noisy triage heartbeats.
|
|
13
|
+
|
|
14
|
+
## Quick reference
|
|
15
|
+
- Stored in `~/.bajaclaw/profiles/<profile>/config.json` → `"effort"`.
|
|
16
|
+
- Levels: `low`, `medium`, `high`. Maps to the backend CLI's `--effort` flag.
|
|
17
|
+
- Default: `medium`.
|
|
18
|
+
|
|
19
|
+
## Procedure
|
|
20
|
+
1. Show current: `bajaclaw effort <profile>`.
|
|
21
|
+
2. Set: `bajaclaw effort <level> <profile>`.
|
|
22
|
+
- `bajaclaw effort high` (sets on default profile)
|
|
23
|
+
- `bajaclaw effort low triage`
|
|
24
|
+
3. Or edit `config.json` directly: `"effort": "high"`.
|
|
25
|
+
4. Change takes effect on the next cycle.
|
|
26
|
+
|
|
27
|
+
## Pitfalls
|
|
28
|
+
- Higher effort ≠ better answers for trivial tasks — it just burns more
|
|
29
|
+
tokens.
|
|
30
|
+
- Triage cycles at `high` slow the entire queue. Keep routine work at
|
|
31
|
+
`low` or `medium`.
|
|
32
|
+
|
|
33
|
+
## Verification
|
|
34
|
+
- `bajaclaw effort <profile>` shows the new level.
|
|
35
|
+
- Dry-run shows `--effort <level>` in the command line if the flag is
|
|
36
|
+
present.
|