palmier 0.9.33 → 0.9.35
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/DISCLAIMER.md +1 -1
- package/README.md +2 -2
- package/dist/agents/agent-instructions.md +4 -0
- package/dist/agents/agent.js +1 -3
- package/package.json +1 -1
- package/dist/agents/gemini.d.ts +0 -3
- package/dist/agents/gemini.js +0 -49
package/DISCLAIMER.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## AI Agent Execution
|
|
6
6
|
|
|
7
|
-
Palmier spawns third-party AI agent CLIs (such as Claude Code,
|
|
7
|
+
Palmier spawns third-party AI agent CLIs (such as Claude Code, Codex CLI, GitHub Copilot, and others) that can:
|
|
8
8
|
|
|
9
9
|
- **Read, create, modify, and delete files** on your machine
|
|
10
10
|
- **Execute arbitrary shell commands** with your user permissions
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
**Website:** [palmier.me](https://www.palmier.me) | **Web App:** [app.palmier.me](https://app.palmier.me) | **Android App:** [caihongxu/palmier-android](https://github.com/caihongxu/palmier-android)
|
|
8
8
|
|
|
9
|
-
Palmier installs, manages, and runs AI agent CLIs (Claude Code,
|
|
9
|
+
Palmier installs, manages, and runs AI agent CLIs (Claude Code, Codex, GitHub Copilot, etc.) on your machine using your existing AI subscriptions, and exposes them to your phone through a mobile-friendly PWA and an Android app. It runs as a background daemon and is agent-agnostic — adding support for a new CLI is a config change, not a code change.
|
|
10
10
|
|
|
11
11
|
The control surface is bidirectional:
|
|
12
12
|
|
|
@@ -33,7 +33,7 @@ Capability access is opt-in per device: each capability is gated behind an Andro
|
|
|
33
33
|
```bash
|
|
34
34
|
npm install -g palmier && palmier init
|
|
35
35
|
```
|
|
36
|
-
The wizard creates `~/palmier` as the task storage directory, detects existing agent CLIs or offers to install supported ones ([Claude Code](https://docs.anthropic.com/en/docs/claude-code), [
|
|
36
|
+
The wizard creates `~/palmier` as the task storage directory, detects existing agent CLIs or offers to install supported ones ([Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex CLI](https://github.com/openai/codex), [GitHub Copilot](https://github.com/github/gh-copilot), [OpenClaw](https://openclaw.ai/), or [others](https://www.palmier.me/agents)), configures access, installs the background daemon, and starts pairing.
|
|
37
37
|
2. Open `http://localhost:7256` to access the app locally — no pairing needed.
|
|
38
38
|
3. To access from other devices, enter the pairing code shown after init into the [PWA](https://app.palmier.me) or the [Android app](https://github.com/caihongxu/palmier-android/releases/latest/download/palmier.apk).
|
|
39
39
|
|
|
@@ -18,6 +18,10 @@ When you are done, output exactly one of these markers as the very last line on
|
|
|
18
18
|
Whenever a tool you are trying to use is denied or you lack the required permissions, print each required permission on its own line to stdout using this exact format:
|
|
19
19
|
[PALMIER_PERMISSION] <tool_name> | <description>
|
|
20
20
|
|
|
21
|
+
## Browsers
|
|
22
|
+
|
|
23
|
+
When the user asks you to open a browser, launch it in headed mode (visible UI), not headless.
|
|
24
|
+
|
|
21
25
|
## HTTP Endpoints
|
|
22
26
|
|
|
23
27
|
{{ENDPOINT_DOCS}}
|
package/dist/agents/agent.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { execSync } from "child_process";
|
|
2
2
|
import { SHELL } from "../platform/index.js";
|
|
3
3
|
import { claudeAgent } from "./claude.js";
|
|
4
|
-
import { geminiAgent } from "./gemini.js";
|
|
5
4
|
import { codexAgent } from "./codex.js";
|
|
6
5
|
import { droidAgent } from "./droid.js";
|
|
7
6
|
import { openClawAgent } from "./openclaw.js";
|
|
@@ -56,7 +55,6 @@ export function getNpmInstalledVersion(npmPackage) {
|
|
|
56
55
|
}
|
|
57
56
|
const agentRegistry = {
|
|
58
57
|
claude: claudeAgent,
|
|
59
|
-
gemini: geminiAgent,
|
|
60
58
|
codex: codexAgent,
|
|
61
59
|
openclaw: openClawAgent,
|
|
62
60
|
copilot: copilotAgent,
|
|
@@ -73,7 +71,7 @@ const agentRegistry = {
|
|
|
73
71
|
qoder: qoderAgent,
|
|
74
72
|
hermes: hermesAgent,
|
|
75
73
|
};
|
|
76
|
-
const TIER_ONE_ORDER = ["claude", "
|
|
74
|
+
const TIER_ONE_ORDER = ["claude", "codex", "copilot"];
|
|
77
75
|
export function listInstallableAgents() {
|
|
78
76
|
const out = [];
|
|
79
77
|
for (const [key, agent] of Object.entries(agentRegistry)) {
|
package/package.json
CHANGED
package/dist/agents/gemini.d.ts
DELETED
package/dist/agents/gemini.js
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { getAgentInstructions } from "./shared-prompt.js";
|
|
2
|
-
export function renderPolicyToml(allowedTools) {
|
|
3
|
-
const list = allowedTools.map((t) => JSON.stringify(t)).join(", ");
|
|
4
|
-
return [
|
|
5
|
-
"# Generated by Palmier — do not edit.",
|
|
6
|
-
"[[rule]]",
|
|
7
|
-
`toolName = [${list}]`,
|
|
8
|
-
`decision = "allow"`,
|
|
9
|
-
"priority = 100",
|
|
10
|
-
"",
|
|
11
|
-
"[[rule]]",
|
|
12
|
-
`toolName = "*"`,
|
|
13
|
-
`decision = "deny"`,
|
|
14
|
-
"priority = 1",
|
|
15
|
-
"",
|
|
16
|
-
].join("\n");
|
|
17
|
-
}
|
|
18
|
-
export const geminiAgent = {
|
|
19
|
-
label: "Gemini CLI",
|
|
20
|
-
command: "gemini",
|
|
21
|
-
promptArgs: ["--prompt"],
|
|
22
|
-
probeArg: "--version",
|
|
23
|
-
supportsPermissions: true,
|
|
24
|
-
supportsYolo: true,
|
|
25
|
-
npmPackage: "@google/gemini-cli",
|
|
26
|
-
freeUsage: "Free Tier",
|
|
27
|
-
getTaskRunCommandLine(task, followupPrompt, extraPermissions) {
|
|
28
|
-
const yolo = extraPermissions === "yolo";
|
|
29
|
-
const prompt = followupPrompt ?? getAgentInstructions(task);
|
|
30
|
-
const args = ["--approval-mode", yolo ? "yolo" : "auto_edit"];
|
|
31
|
-
const files = [];
|
|
32
|
-
if (!yolo) {
|
|
33
|
-
const tools = ["run_shell_command(curl)", "web_fetch"];
|
|
34
|
-
const allPerms = [...(task.frontmatter.permissions ?? []), ...(extraPermissions ?? [])];
|
|
35
|
-
for (const p of allPerms) {
|
|
36
|
-
tools.push(p.name);
|
|
37
|
-
}
|
|
38
|
-
const policyPath = "gemini-policy.toml";
|
|
39
|
-
files.push({ path: policyPath, content: renderPolicyToml(tools) });
|
|
40
|
-
args.push("--admin-policy", policyPath);
|
|
41
|
-
}
|
|
42
|
-
if (followupPrompt) {
|
|
43
|
-
args.push("--resume");
|
|
44
|
-
}
|
|
45
|
-
// Read prompt from stdin to avoid command-line length limits.
|
|
46
|
-
args.push("--prompt", "-");
|
|
47
|
-
return { args, stdin: prompt, ...(files.length > 0 ? { files } : {}) };
|
|
48
|
-
},
|
|
49
|
-
};
|