Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,6 @@ docker/workspace/*
!docker/workspace/.gitkeep
docker/.odek/*
!docker/.odek/.gitkeep

# Claude Code local artifacts
.claude/
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,9 @@ Any OpenAI-compatible endpoint: Deepseek, OpenAI, Anthropic, Ollama, vLLM, Groq,
### 🤖 Telegram Bot
Run agent tasks directly from Telegram via long-polling. Supports slash commands (`/plan`, `/sessions`, `/resume`, `/prune`, `/help`, etc.), voice message transcription, photo analysis, conversation persistence across restarts, saved plan files, and daily token budgeting. No external Telegram libraries — built on stdlib `net/http`. [docs/TELEGRAM.md](docs/TELEGRAM.md)

### ⏰ Scheduled Tasks (native cron)
Run agent tasks on a cron schedule and deliver results to Telegram, stdout, or a log — no external cron daemon. The scheduler runs **in-process** (inside `odek telegram` or a standalone `odek schedule daemon`), so a scheduled task sees the same resolved config (API key, model, bot token) an interactive run does. Stdlib-only cron parser with Vixie day-of-month/day-of-week semantics, per-job timezones, missed-run catchup, and a singleton lock so jobs never double-fire. `odek schedule add --cron "0 9 * * 1-5" --deliver telegram "..."`. [docs/SCHEDULES.md](docs/SCHEDULES.md)

### 📎 File Attachments
Attach files to any prompt with `--ctx` / `-c` (CLI), `@filename` inline references (CLI + REPL + Web UI), or drag-and-drop (Web UI). File content is injected as context blocks before the task — no tool calls needed. Comma-separate multiple files: `--ctx main.go,lib.go`. [docs/CLI.md#file-attachments](docs/CLI.md#file-attachments)

Expand Down Expand Up @@ -164,6 +167,7 @@ odek run "@README.md what does this project do?"
| [Memory](docs/MEMORY.md) | Three-tier design, go-vector merge-on-write, `memory` tool |
| [Sessions](docs/SESSIONS.md) | Multi-turn conversations, save/resume/trim/cleanup |
| [Telegram Bot](docs/TELEGRAM.md) | Telegram integration: bot client, slash commands, session management, plans, media downloads |
| [Scheduled Tasks](docs/SCHEDULES.md) | Native in-process cron: `odek schedule`, Vixie cron syntax, delivery, missed-run catchup, daemon vs embedded |
| [Sandboxing](docs/SANDBOXING.md) | Docker isolation model, config, security hardening |
| [Security](docs/SECURITY.md) | Threat model, prompt injection defense, sandbox model |
| [Sub-Agents](docs/SUBAGENTS.md) | Task decomposition, delegation tool, subagent protocol |
Expand Down
2 changes: 2 additions & 0 deletions cmd/odek/dispatch.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ func dispatch(args []string) int {
return cliExit(mcpCmd(rest))
case "telegram":
return cliExit(telegramCmd(rest))
case "schedule":
return cliExit(scheduleCmd(rest))
default:
fmt.Fprintf(os.Stderr, "odek: unknown command %q\n", cmd)
printUsage()
Expand Down
5 changes: 5 additions & 0 deletions cmd/odek/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,7 @@ func printUsage() {
odek skill <list|view|save|delete|import|curate>
odek mcp [--sandbox]
odek telegram
odek schedule <list|add|rm|enable|disable|run|next|daemon>
odek version

Commands:
Expand All @@ -497,6 +498,10 @@ Commands:
mcp Start MCP server (Model Context Protocol) over stdio
Exposes all built-in tools for Claude Code, Cursor, etc.
telegram Start Telegram bot (long-polling mode)
schedule Manage native in-process scheduled tasks (cron)
Subcommands: list, add, rm, enable, disable, run, next, daemon
The daemon (or the Telegram bot) fires jobs and delivers
results to stdout, a log, or a Telegram chat.
init Create a config file (default: ./odek.json)
version Print version and exit

Expand Down
Loading
Loading