IMAP Client
Read, search, and download email over IMAP from the command line using the `myl` CLI client. Use this skill whenever the user wants to interact with their ma...
Rank
62
Safety
84
Downloads
1.1k
Updated
Oct 11, 2026
Version
0.1.3
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 11, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 11, 2026
- Adoption signal
- 1.1K downloadsadoption · observed Oct 11, 2026
- Latest release
- 0.1.3release · observed Apr 26, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s17e5jak0ty2ag4w69xnz7k06n85hfnm:imap-client- Install using `clawhub skill install s17e5jak0ty2ag4w69xnz7k06n85hfnm:imap-client` in an isolated environment before connecting it to live workloads.
- No published capability contract is available yet, so validate auth and request/response behavior manually.
- Review the upstream CLAWHUB listing at https://clawhub.ai/aggrrrh/imap-client before using production credentials.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-aggrrrh-imap-client/snapshot"
Documentation
CLAWHUB
142,977 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: imap-client
description: 'Read, search, and download email over IMAP from the command line using the `myl` CLI client. Use this skill whenever the user wants to interact with their mailbox from a terminal — checking the inbox, listing or searching messages, reading a specific email, opening HTML or raw source, or saving attachments. Trigger on any of these cues even when `myl` is not named explicitly — "check my email", "look in my inbox", "search my mail for X", "find the email from Y", "download the attachment", "is there an email about Z", "read the latest message", "show me unread", "connect to my IMAP server", "imap.gmail.com", "imap.yandex.com", "imap.yandex.ru", "imap.mail.ru", "imap.fastmail.com", "Yandex Mail", "Mail.ru", "Gmail IMAP", "проверить почту", "новые письма", "найти письмо", and similar. Also trigger when the user asks to script or automate any of the above. Do not trigger for outgoing mail (sending, SMTP, drafting) — `myl` is read-only — or for desktop/GUI mail clients.'
license: MIT
homepage: https://github.com/codd-tech/imap-client
metadata: {"openclaw":{"emoji":"📬","requires":{"bins":["myl"],"env":["IMAP_USER","IMAP_PASSWORD"]},"primaryEnv":"IMAP_PASSWORD","install":[{"id":"pipx","kind":"pipx","package":"myl","bins":["myl"],"label":"Install myl via pipx"}]}}
---
# imap-client
Read mailboxes over IMAP from the terminal using `myl`, a small Python CLI client. Maintained and distributed by [codd-tech](https://github.com/codd-tech/imap-client). Designed to drop into [OpenClaw](https://openclaw.ai) and any other AgentSkills-compatible runtime (Claude Code, generic).
`myl` is read-only and intentionally minimal: it lists, searches, and fetches messages and attachments. It does not send mail, manage folders, or modify state beyond optionally marking messages as seen.
## How credentials reach this skill
This is the most important section. **You do not type passwords on the command line.** Credentials live in environment variables that the runtime injects per agent run. The skill reads them and assembles the right `myl` flags through the wrapper at `{baseDir}/scripts/imap.sh`.
The variables the wrapper expects:
| Variable | Required | Purpose |
|---|---|---|
| `IMAP_USER` | yes | Login (usually full email address) |
| `IMAP_PASSWORD` | yes | App-specific password (see `references/authentication.md`) |
| `IMAP_PROVIDER` | no | One of `auto` (default), `gmail`, `yandex`, `mailru`, `manual` |
| `IMAP_SERVER` | only with `manual` | IMAP host |
| `IMAP_PORT` | no | Defaults to 993 |
| `IMAP_STARTTLS` | no | `1` to add `--starttls` (use only with port 143) |
**Set them once, use them every session.** How depends on the runtime — `references/authentication.md` covers OpenClaw's `skills.entries.imap-client.env`, generic shell `export`, and a `~/.config/imap-client/credentials` fallback file. Do not invent your own scheme; use one of those three.
If the wrapper detects `IMAP_USER` or `IMAP_PASSWORD` is missing, it printsREADME.md
# imap-client [](https://clawhub.ai/aggrrrh/imap-client) [](./LICENSE) [](https://codd.tech) [](https://github.com/codd-tech/imap-client/stargazers) An agent skill for [OpenClaw](https://openclaw.ai), Claude Code, and other AgentSkills-compatible runtimes. Lets the agent read, search, and download email over IMAP from the command line via the [`myl`](https://github.com/pschmitt/myl) CLI client. `myl` is a small read-only IMAP client. This skill teaches the agent **when** to reach for it, **how** to install it, **how to source credentials safely** from the runtime's environment-injection mechanism, and **which** flags to use for common tasks — without ever asking for the password mid-session. ## What this skill enables Once installed and configured once, the agent will recognise prompts like: - *"check my inbox"* - *"any new email from Acme today?"* - *"find the email with the AWS invoice and save the PDF"* - *"show me the HTML version of the newsletter from yesterday"* - *"download all unread messages as `.eml` files"* - *"проверь почту на Яндексе"* - *"найди письмо от налоговой"* …and translate them into safe `myl` invocations through the wrapper at `scripts/imap.sh`, summarising the result back in chat. ## Provider support First-class support, with `IMAP_PROVIDER` shortcuts: - **Gmail** / Google Workspace (`IMAP_PROVIDER=gmail`) - **Yandex Mail** — `@yandex.ru`, `@yandex.com`, Yandex 360 custom domains (`IMAP_PROVIDER=yandex`) - **Mail.ru** — `@mail.ru`, `@bk.ru`, `@inbox.ru`, `@list.ru` (`IMAP_PROVIDER=mailru`) Plus autodiscovery for most other providers (Fastmail, iCloud, ISPs) and explicit `manual` mode for self-hosted / corporate servers. ## Quick start ### 1. Install `myl` ```bash pipx install myl ``` (Or `pip install --user myl`, or `nix run github:pschmitt/myl`.) ### 2. Get an app-specific password from your provider Account settings → app passwords / external app passwords. Direct links per provider in [`references/authentication.md`](./references/authentication.md). ### 3. Install the skill **Recommended — via ClawHub:** ```bash clawhub install imap-client ``` **Or clone directly:** ```bash # OpenClaw git clone https://github.com/codd-tech/imap-client ~/.openclaw/skills/imap-client # Claude Code git clone https://github.com/codd-tech/imap-client ~/.claude/skills/imap-client # Generic AgentSkills runtime — drop the folder anywhere the runtime scans for SKILL.md ``` Restart the session. OpenClaw picks the skill up automatically. The skill declares `requires.bins: ["myl"]` so it filters itself out if `myl` isn't on `PATH` — you'll never get a
_meta.json
{
"ownerId": "kn78q4f09z7as2hbshyxss9sk185ht5d",
"slug": "imap-client",
"version": "0.1.3",
"publishedAt": 1777196800962
}references/authentication.md
# Authentication & Connection
This is the most security-sensitive part of the skill. Read it before configuring credentials anywhere.
## The model in one paragraph
Credentials live as **environment variables** that the runtime injects per agent run. The wrapper at `scripts/imap.sh` reads those env vars, picks the right `myl` connection flags, and never echoes the password. **You configure once, you read mail forever.**
## Setting up credentials — pick one method
### Method A — OpenClaw (recommended for OpenClaw users)
OpenClaw injects `skills.entries.<key>.env` into `process.env` for the duration of each agent turn, then restores the original environment. This is documented behaviour: see https://docs.openclaw.ai/tools/skills under "Environment injection (per agent run)".
Edit `~/.openclaw/openclaw.json` and add an entry under `skills.entries`:
```json
{
"skills": {
"entries": {
"imap-client": {
"enabled": true,
"env": {
"IMAP_USER": "[email protected]",
"IMAP_PASSWORD": "app-specific-password-here",
"IMAP_PROVIDER": "auto"
}
}
}
}
}
```
Then restart the agent session (or wait for the skills watcher to pick it up if `skills.load.watch` is enabled). The next time the agent runs the skill, `IMAP_USER` and `IMAP_PASSWORD` are already in the environment.
**Permissions matter.** `~/.openclaw/openclaw.json` should not be world-readable:
```bash
chmod 600 ~/.openclaw/openclaw.json
```
**Use `apiKey` with a SecretRef for stronger isolation.** OpenClaw supports pulling the password from a separate source rather than inlining it as plaintext in the JSON:
```json
{
"skills": {
"entries": {
"imap-client": {
"enabled": true,
"apiKey": { "source": "env", "provider": "default", "id": "MY_IMAP_PASSWORD" },
"env": {
"IMAP_USER": "[email protected]",
"IMAP_PROVIDER": "auto"
}
}
}
}
}
```
The `apiKey` field maps to whatever env var name is declared in `metadata.openclaw.primaryEnv` of `SKILL.md` — for this skill that's `IMAP_PASSWORD`. So OpenClaw reads `MY_IMAP_PASSWORD` from your shell env (or another secret backend) and exposes it as `IMAP_PASSWORD` to the wrapper. The literal password never appears in `openclaw.json`.
### Method B — Generic shell `export`
For Claude Code and other AgentSkills runtimes that don't have OpenClaw's injection mechanism, just export the variables in the shell that launches the agent:
```bash
export IMAP_USER='[email protected]'
export IMAP_PASSWORD='app-specific-password-here'
export IMAP_PROVIDER='auto'
```
Put this in `~/.bashrc` / `~/.zshrc` if you want it to persist. The downside compared to Method A is that the variables are global to that shell, not scoped to the agent run. The upside is no extra config file.
### Method C — Credentials file fallback
When neither Method A nor B is convenient (e.g. cron jobs, headless workflows, CI), drop a credentials file at `~/.references/installation.md
# Installation
`myl` is a Python package. There are several ways to install it; pick the first one that fits the user's environment.
## How OpenClaw handles this
This skill declares `requires.bins: ["myl"]` in `metadata.openclaw`. OpenClaw checks for `myl` on `PATH` at skill load time and **silently filters this skill out** if it's missing, preventing the agent from invoking it without a working binary.
It also declares an `install` block:
```json
{ "id": "pipx", "kind": "pipx", "package": "myl", "bins": ["myl"] }
```
In OpenClaw's macOS Skills UI this surfaces a one-click install button. From the CLI the user installs `myl` themselves with one of the methods below — the install block is hint metadata, not an automated runtime installer.
For non-OpenClaw runtimes (Claude Code, generic), there's no automatic gating. Run `bash scripts/check_myl.sh` first to confirm `myl` is present.
## Detect what's already there
Always check before installing:
```bash
bash scripts/check_myl.sh
```
Or inline:
```bash
if command -v myl >/dev/null 2>&1; then
echo "myl is installed: $(command -v myl) ($(myl --version 2>/dev/null || echo 'version unknown'))"
else
echo "myl is not on PATH"
fi
```
If `myl` is present, skip the rest of this file and move on to `authentication.md`.
## Install paths, in order of preference
### `pipx` — recommended
Isolates `myl` and its dependencies from system Python. This is what the upstream README recommends and what the skill's `install` metadata suggests.
```bash
# Install pipx itself if missing (Debian/Ubuntu)
sudo apt update && sudo apt install -y pipx
pipx ensurepath
# Install myl
pipx install myl
```
On macOS:
```bash
brew install pipx
pipx ensurepath
pipx install myl
```
After `pipx ensurepath`, the user may need to restart their shell or `source ~/.bashrc` / `source ~/.zshrc` for `myl` to appear on `PATH`.
### `pip --user` — fallback when `pipx` isn't available
```bash
pip install --user myl
```
The binary lands in `~/.local/bin`, which must be on `PATH`. If not:
```bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
```
### Nix flake — for Nix users
```bash
# One-shot run without installing
nix run github:pschmitt/myl -- --help
# Or add to a flake
```
### From source
```bash
git clone https://github.com/pschmitt/myl.git
cd myl
pipx install .
```
## Sandboxed agent runs
If the agent runs inside a Docker sandbox (OpenClaw `agents.defaults.sandbox.docker`), `myl` must be installed **inside the container** as well — the host bin doesn't satisfy the in-sandbox requirement. Add to `setupCommand`:
```json
{
"agents": {
"defaults": {
"sandbox": {
"docker": {
"setupCommand": "pipx install myl || pip install --user --break-system-packages myl"
}
}
}
}
}
```
Sandbox installs also need network egress, a writable root FS, and root user inside the container. See OpenClaw's sandboxing docs for details.
## Confirm before installing
`myl` is a thAionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/aggrrrh/skills/imap-client",
"sourceUrl": "https://clawhub.ai/aggrrrh/skills/imap-client",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-11T13:01:16.763Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-aggrrrh-imap-client/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-aggrrrh-imap-client/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-11T13:01:16.763Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1.1K downloads",
"href": "https://clawhub.ai/aggrrrh/imap-client",
"sourceUrl": "https://clawhub.ai/aggrrrh/imap-client",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-11T13:01:16.763Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "0.1.3",
"href": "https://clawhub.ai/aggrrrh/imap-client",
"sourceUrl": "https://clawhub.ai/aggrrrh/imap-client",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-04-26T09:46:40.962Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-aggrrrh-imap-client/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-aggrrrh-imap-client/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 0.1.3",
"description": "Fix misleading security claim in Principle 1: accurately document that the password is passed via myl argv and is visible in /proc/<pid>/cmdline.",
"href": "https://clawhub.ai/aggrrrh/imap-client",
"sourceUrl": "https://clawhub.ai/aggrrrh/imap-client",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-04-26T09:46:40.962Z",
"isPublic": true
}
]
}Record generated Oct 11, 2026.
