Add execline skill documentation

💘 Generated with Crush

Assisted-by: MiniMax-M2.5 via Crush <crush@charm.land>
This commit is contained in:
Keith Patrick 2026-03-22 23:00:45 +00:00
parent 96deeeab7f
commit c772e008cb
2 changed files with 27 additions and 10 deletions

View file

@ -100,7 +100,7 @@ func (t *ExeclineTool) Parameters() map[string]any {
},
"env": map[string]any{
"type": "object",
"description": "Additional environment variables to set for this command",
"description": "Additional environment variables to set for this command. Do not try to set PICOCLAW*, PATH, HOME, USER, LOGNAME, SHELL, LD_PRELOAD, or LD_LIBRARY_PATH",
"additionalProperties": map[string]any{
"type": "string",
},
@ -174,7 +174,7 @@ func (t *ExeclineTool) Execute(ctx context.Context, args map[string]any) *ToolRe
"PICOCLAW_EXEC_TIME": time.Now().Format(time.RFC3339),
"PICOCLAW_EXEC_TIMEOUT": t.timeout.String(),
}
execEnv = shell.MergeEnvVars(execEnv, execTimeEnv, nil)
execEnv := shell.MergeEnvVars(baseEnv, execTimeEnv, extraEnv)
// Use execlineb to execute
// execlineb -c takes a command string and executes it

View file

@ -63,7 +63,7 @@ cd $home
ls
```
### backtick - Command output to variable
### backtick - Command output to variable (with -E flag!)
```bash
backtick DATE { date +%Y-%m-%d }
echo $DATE
@ -76,6 +76,16 @@ echo $DATE
- Stores it in an environment variable
- Then execs into the next command
### backtick -E - Auto-import command substitution
The `-E` flag makes backtick automatically import the result as a variable, enabling true command substitution (like `$()` in bash):
```bash
backtick -E DATE { date } echo $DATE
# Output: Sun Mar 22 08:08:58 PM GMT 2026
```
Without `-E`, you need `importas` to access the variable. With `-E`, it's auto-imported directly.
## Sequencing Commands
### foreground - Run and wait
@ -194,8 +204,8 @@ wc -l
|---------|---------|----------|
| $VAR expansion | Yes | Yes (via substitution) |
| ${VAR} expansion | Yes | Yes |
| $(cmd) substitution | Yes | **No** - use backtick |
| `cmd` substitution | Yes | **No** |
| $(cmd) substitution | Yes | **Yes** - use `backtick -E VAR { cmd }` |
| `cmd` substitution | Yes | **No** (use backtick) |
| &&, \|\| | Yes | **No** - use if/foreground |
| ; | Yes | **No** - use foreground |
| Variable assignment | VAR=value | define VAR value |
@ -205,10 +215,13 @@ wc -l
## Usage in picoclaw
### Via ExeclineTool:
The picoclaw agent has a built-in `execline` tool that you can call directly:
```
Use the `execline` tool for commands that don't need shell features.
Tool: execline
ToolInput: { "command": "define FOO bar echo $FOO" }
```
→ Output: bar
The ExeclineTool validates:
- No `&&`, `||` (use `if`, `foreground` instead)
@ -225,9 +238,13 @@ execlineb -c 'define FOO bar echo $FOO'
HOME=/tmp execlineb -c 'importas h HOME cd $h pwd'
# Output: /tmp
# Command substitution is LITERAL (not executed):
execlineb -c 'echo $(whoami)'
# Output: $(whoami)
# backtick -E enables command substitution (like $()):
execlineb -c 'backtick -E DATE { date } echo $DATE'
# Output: current date/time
# backtick without -E requires importas:
execlineb -c 'backtick DATE { date } importas D DATE echo $D'
# Output: current date/time
```
## Recommendations