> ## Documentation Index
> Fetch the complete documentation index at: https://praison.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Render Shell Blocks • AI Agent SDK

> render_shell_blocks: Render ``!`cmd` `` and ```` ```! `` blocks inside a skill body.

# render\_shell\_blocks

<div className="flex items-center gap-2">
  <Badge color="teal">Function</Badge>
</div>

> This function is defined in the [**shell\_render**](../modules/shell_render) module.

Render ``!`cmd` `` and \`\`\`\` \`\`\`! \`\` blocks inside a skill body.

## Signature

```python theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
def render_shell_blocks(body: str, enabled: bool, shell: str, timeout: int, cwd: Optional[str]) -> str
```

## Parameters

<ParamField query="body" type="str" required={true}>
  SKILL.md body (post-substitution).
</ParamField>

<ParamField query="enabled" type="bool" required={false} default="False">
  Master switch. When False, every block is replaced with `[shell execution disabled]`. Defaults to False.
</ParamField>

<ParamField query="shell" type="str" required={false} default="'bash'">
  `bash` (default) or `powershell`.
</ParamField>

<ParamField query="timeout" type="int" required={false} default="15">
  Per-command timeout in seconds.
</ParamField>

<ParamField query="cwd" type="Optional[str]" required={false}>
  Working directory for commands (typically the skill dir).
</ParamField>

### Returns

<ResponseField name="Returns" type="str">
  Body with shell placeholders resolved.
</ResponseField>

## Uses

* `_INLINE_RE.sub`
* `_FENCED_RE.sub`
* `m.group`

## Used By

* [`SkillManager.invoke`](../functions/SkillManager-invoke)

## Source

<Card title="View on GitHub" icon="github" href="https://github.com/MervinPraison/PraisonAI/blob/main/src/praisonai-agents/praisonaiagents/skills/shell_render.py#L49">
  `praisonaiagents/skills/shell_render.py` at line 49
</Card>
