tasak


Nametasak JSON
Version 0.1.4 PyPI version JSON
download
home_pageNone
SummaryTransform your AI coding assistant into a productivity powerhouse with custom tools and workflows
upload_time2025-09-08 10:37:04
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseMIT License Copyright (c) 2025 Jacek Jursza Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords ai-agents claude-code cursor copilot developer-tools automation cli mcp
VCS
bugtrack_url
requirements PyYAML pre-commit requests mcp fastapi uvicorn psutil daemoniker pytest-timeout pytest-asyncio fastmcp pytest-asyncio
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # TASAK: The Agent's Swiss Army Knife

**Transform your AI coding assistant into a productivity powerhouse with custom tools and workflows tailored to YOUR codebase.**

[![PyPI version](https://img.shields.io/pypi/v/tasak.svg)](https://pypi.org/project/tasak/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![GitHub release](https://img.shields.io/github/release/jacekjursza/tasak.svg)](https://github.com/jacekjursza/tasak/releases/latest)

📋 **[See what's new in v0.1.4 →](https://github.com/jacekjursza/TASAK/blob/v0.1.4/CHANGELOG.md#014---2025-09-08)**

## 🚀 Why TASAK?

### For AI Agent Power Users (Claude Code, Cursor, Copilot)
**Problem:** Your AI assistant wastes tokens rediscovering your project structure, can't run your custom toolchain, and you're copy-pasting commands back and forth.

**Solution:** TASAK gives your AI agent a curated toolkit that understands YOUR workflow:
- 📦 **Package complex workflows** into simple commands ("deploy staging" instead of 10 manual steps)
- 🧠 **Reduce context usage** by 80% through hierarchical command discovery
- 🔧 **Self-improving:** Let your agent write Python plugins to extend its own capabilities!
- 🎯 **Project-aware:** Different tools for different projects, automatically

### For Development Teams
**Problem:** Every developer has their own way of running tests, deployments, and dev environments. Onboarding is painful.

**Solution:** TASAK standardizes your team's workflow into a unified command palette:
- 🏢 **Company-wide tooling** in global config, project-specific in local
- 📚 **Self-documenting:** Your AI agent can explain and execute any workflow
- 🔒 **Secure by default:** Only expose what you explicitly allow
- 🚄 **Zero friction:** Works with any language, any framework, any toolchain

## 💡 Real-World Magic

```yaml
# Your AI agent can now do THIS with a single command:
tasak deploy_review_app
# Instead of:
# 1. Check git branch
# 2. Build Docker image
# 3. Push to registry
# 4. Update k8s manifests
# 5. Apply to cluster
# 6. Wait for rollout
# 7. Run smoke tests
# 8. Post PR comment with URL
```

## 🎯 Perfect For

### ✨ Claude Code / Cursor / Copilot / Gemini CLI / Codex CLI / Users
- Build a custom toolkit that makes your AI assistant 10x more effective
- Stop wasting time on repetitive commands - let your agent handle them
- Create project-specific "skills" your AI can use intelligently

### 👥 Development Teams
- Standardize workflows across your entire team
- Make complex operations accessible to junior developers
- Document-by-doing: your commands ARE the documentation

### 🔧 DevOps & Platform Engineers
- Expose safe, curated access to production tools
- Build guardrails around dangerous operations
- Create approval workflows for sensitive commands

### 🎨 Open Source Maintainers
- Give contributors a standard way to run your project
- Reduce "works on my machine" issues
- Make your project AI-assistant friendly

## 🌟 Killer Features

### 🧩 **Python Plugins** (NEW!)
Your AI agent can write its own tools! Just ask:
> "Create a plugin that formats all Python files and runs tests"

The agent writes the Python function, TASAK automatically loads it. Mind = blown. 🤯

### 🧱 Useful Node Types (App Types)

TASAK exposes your tools as app “nodes” your agent can navigate. The most useful types:

- `cmd` — quick shell commands
  ```yaml
  format_code:
    type: cmd
    meta:
      command: "ruff format . && ruff check --fix"
  ```

- `docs` — Markdown navigator (commands = .md files; sub‑apps = folders)
  ```yaml
  docs:
    type: docs
    meta:
      directory: "./docs"
      respect_include: true
  ```

- `mcp` — local MCP server (stateful, AI‑native)
  ```yaml
  database:
    type: mcp
    meta:
      command: "uvx mcp-server-sqlite --db ./app.db"
  ```

- `mcp-remote` — remote MCP via proxy (OAuth, SSE)
  ```yaml
  atlassian:
    type: mcp-remote
    meta:
      server_url: "https://mcp.atlassian.com/v1/sse"
  ```

- `curated` — orchestrated workflows (compose multiple steps/tools)
  ```yaml
  full_deploy:
    type: curated
    commands:
      - test
      - build
      - deploy
      - notify_slack
  ```

- `python-plugin` — Python‑written plugins discovered from plugin dirs
  ```yaml
  # auto‑discovered; enable via plugins.python settings
  ```

See all node/app types and details → docs/basic_usage.md#understanding-app-types

### 🔄 **Hierarchical Config**
Global tools + project tools = perfect setup (with optional isolation)
```
~/.tasak/tasak.yaml       # Your personal toolkit
./project/tasak.yaml      # Project-specific tools
= Your AI has exactly what it needs
```

Tip: To stop inheriting from parents/global at a given level, set:
```yaml
apps_config:
  isolate: true  # Ignore all higher configs above this file
```

## ⚡ Quick Start

### 1. Install (30 seconds)
```bash
pipx install tasak
```

Optional (edge builds from GitHub):
```bash
# pipx
pipx install git+https://github.com/jacekjursza/TASAK.git

# or pip
pip install -U git+https://github.com/jacekjursza/TASAK.git
```

### 2. Create Your First Power Tool (1 minute)
```bash
cat > ~/.tasak/tasak.yaml << 'EOF'
header: "My AI Assistant Toolkit"

apps_config:
  enabled_apps:
    - dev
    - test
    - deploy

# One command to rule them all
dev:
  name: "Start Development"
  type: "cmd"
  meta:
    command: "docker-compose up -d && npm run dev"

test:
  name: "Run Tests"
  type: "cmd"
  meta:
    command: "npm test && npm run e2e"

deploy:
  name: "Deploy to Staging"
  type: "cmd"
  meta:
    command: "./scripts/deploy.sh staging"
EOF
```

### 3. Watch Your AI Agent Level Up
```bash
# Your AI can now:
tasak dev      # Start entire dev environment
tasak test     # Run full test suite
tasak deploy   # Deploy to staging
# No more copy-pasting commands!
```

## 🎓 Real Use Cases

### Use Case 1: Supercharge Your Claude Code
```yaml
# .tasak/tasak.yaml in your project
header: "NextJS + Supabase Project"

apps_config:
  enabled_apps:
    - setup_branch
    - check_types
    - preview

setup_branch:
  name: "Setup new feature branch"
  type: "cmd"
  meta:
    command: |
      git checkout -b $1 &&
      npm install &&
      npm run db:migrate &&
      npm run dev

check_types:
  name: "Full type check"
  type: "cmd"
  meta:
    command: "tsc --noEmit && eslint . --fix"

preview:
  name: "Deploy preview"
  type: "cmd"
  meta:
    command: "vercel --prod=false"
```

Now your Claude Code can:
- Create and setup feature branches
- Run comprehensive type checks
- Deploy preview environments
...all without you typing a single command!

### Use Case 2: Team Workflow Standardization
```yaml
# Company-wide ~/.tasak/tasak.yaml
header: "ACME Corp Standard Tools"

apps_config:
  enabled_apps:
    - vpn
    - staging_logs
    - prod_deploy

vpn:
  name: "Connect to VPN"
  type: "cmd"
  meta:
    command: "openvpn --config ~/.acme/vpn.conf"

staging_logs:
  name: "Stream staging logs"
  type: "cmd"
  meta:
    command: "kubectl logs -f -n staging --selector=app"

prod_deploy:
  name: "Production deployment"
  type: "curated"
  commands:
    - name: "deploy"
      description: "Full production deployment with approvals"
      backend:
        type: composite
        steps:
          - type: cmd
            command: ["./scripts/request-approval.sh"]
          - type: cmd
            command: ["./scripts/deploy-prod.sh"]
```

### Use Case 3: Python Plugins - Let AI Extend Itself!
```python
# Your AI agent can write this!
# ~/.tasak/plugins/my_tools.py

def smart_refactor(file_pattern: str, old_name: str, new_name: str):
    """Refactor variable/function names across multiple files"""
    import subprocess
    result = subprocess.run(
        ["rg", "-l", old_name, file_pattern],
        capture_output=True,
        text=True
    )
    files = result.stdout.strip().split("\n")

    for file in files:
        subprocess.run([
            "sed", "-i", f"s/{old_name}/{new_name}/g", file
        ])

    return f"Refactored {len(files)} files"

# Now available as: tasak smart_refactor "*.py" "oldFunc" "newFunc"
```

## 📚 Documentation

**Quick Links:**
- [Why TASAK?](docs/about.md) - See more use cases and benefits
- [Installation & Setup](docs/setup.md) - Get running in 2 minutes
- [Basic Usage](docs/basic_usage.md) - Your first `cmd` apps
- [Advanced Usage](docs/advanced_usage.md) - MCP servers, Python plugins, and workflows
- [Changelog](CHANGELOG.md) - See all releases and changes

## 🤖 CLI Semantics for Agents

Agent‑friendly defaults across app types:

- `tasak <app>` →
  - If the app exposes exactly one command with no required params: runs it immediately.
  - Otherwise: shows grouped simplified help with sections "<app> commands:" and "<app> sub-apps:".
- `tasak <app> <command>` →
  - If the command has no required parameters: executes immediately.
  - If it has required parameters: shows focused help for that command (same as `--help`).
- `tasak <app> <command> --help` → focused help for that single command.
- For docs apps:
  - Navigate: `tasak <docs-app> <subdir> [subdir...]` or shorthand `tasak <docs-app> a:b[:c]`
  - Open files: `tasak <docs-app> <sub-app...> <command>` (extension optional)

Behavior notes:
- Tool schema listing/help uses a transparent cache and refreshes quietly when stale or missing.
- Noisy transport logs are suppressed by default; enable with `TASAK_DEBUG=1` or `TASAK_VERBOSE=1` if you need to debug.

## Daemon (Connection Pooling)

TASAK can run a local daemon to pool MCP connections and cache schemas, dramatically reducing per-command startup time. The daemon runs on `127.0.0.1:8765` and the CLI auto-starts it on demand (unless explicitly stopped or disabled).

- Start: `tasak daemon start`
- Stop: `tasak daemon stop` (also disables autostart until next manual start)
- Restart: `tasak daemon restart`
- Status: `tasak daemon status`
- Logs: `tasak daemon logs -f`

### Logging levels

By default the daemon is quiet (warning and errors only). Enable verbose logs when debugging:

- CLI flags:
  - `tasak daemon start -v` or `tasak daemon restart -v` (equivalent to debug)
  - `tasak daemon start --log-level info` (or `debug`, `warning`, `error`)
- Environment variable:
  - `TASAK_DAEMON_LOG_LEVEL=INFO` (or `DEBUG`) before starting the daemon

CLI-side daemon hints ("Using daemon…", "Daemon: …") appear only when `--debug` or `TASAK_VERBOSE=1` is set.

### HTTP endpoints

The daemon exposes a small local API for health checks and diagnostics:

- `GET /health` – basic liveness + uptime
- `GET /connections` – active connections with age/idle and counters
- `GET /apps/{app}/ping?deep=true` – shallow or deep ping (deep performs a quick tool list)
- `GET /metrics` – basic counters (connection creations/reuses, per-app list/call/error counts)

### Autostart behavior

The CLI auto-starts the daemon unless one of the following is true:
- `tasak daemon stop` was called (creates `~/.tasak/daemon.disabled`)
- `TASAK_NO_DAEMON=1` is set in the environment
- `--debug` is used (bypasses daemon for direct connections)

### Tuning

You can tune TTLs via environment variables before starting the daemon:

- `TASAK_DAEMON_CONN_TTL` – connection idle TTL in seconds (default: `300`)
- `TASAK_DAEMON_CACHE_TTL` – tools cache TTL in seconds (default: `900`)

## 🤝 Community & Support

- **GitHub Issues**: [Report bugs or request features](https://github.com/jacekjursza/TASAK/issues)
- **Discussions**: [Share your TASAK configs and workflows](https://github.com/jacekjursza/TASAK/discussions)
- **Examples**: Check out `examples/` folder for real-world configurations

## 🛠️ For Contributors

Built with Python 3.11+, following TDD principles. We welcome contributions!

### Development Setup
```bash
git clone https://github.com/jacekjursza/TASAK.git
cd TASAK
python -m venv .venv
source .venv/bin/activate

# Install in editable mode (includes MCP by default)
pip install -e .

# Run tests
pytest -q

# Optional: if you install pytest-timeout, you can enable
# suite timeouts using the provided CI config
pytest -c pytest-ci.ini -q
```

See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

## 📄 License

MIT License - see [LICENSE](LICENSE) for details.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "tasak",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "ai-agents, claude-code, cursor, copilot, developer-tools, automation, cli, mcp",
    "author": null,
    "author_email": "Jacek Jursza <okhan.pl@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/e9/73/707ccbba7f618e976a700c60dec8727b428b9912b011721a271b1b78882b/tasak-0.1.4.tar.gz",
    "platform": null,
    "description": "# TASAK: The Agent's Swiss Army Knife\n\n**Transform your AI coding assistant into a productivity powerhouse with custom tools and workflows tailored to YOUR codebase.**\n\n[![PyPI version](https://img.shields.io/pypi/v/tasak.svg)](https://pypi.org/project/tasak/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![GitHub release](https://img.shields.io/github/release/jacekjursza/tasak.svg)](https://github.com/jacekjursza/tasak/releases/latest)\n\n\ud83d\udccb **[See what's new in v0.1.4 \u2192](https://github.com/jacekjursza/TASAK/blob/v0.1.4/CHANGELOG.md#014---2025-09-08)**\n\n## \ud83d\ude80 Why TASAK?\n\n### For AI Agent Power Users (Claude Code, Cursor, Copilot)\n**Problem:** Your AI assistant wastes tokens rediscovering your project structure, can't run your custom toolchain, and you're copy-pasting commands back and forth.\n\n**Solution:** TASAK gives your AI agent a curated toolkit that understands YOUR workflow:\n- \ud83d\udce6 **Package complex workflows** into simple commands (\"deploy staging\" instead of 10 manual steps)\n- \ud83e\udde0 **Reduce context usage** by 80% through hierarchical command discovery\n- \ud83d\udd27 **Self-improving:** Let your agent write Python plugins to extend its own capabilities!\n- \ud83c\udfaf **Project-aware:** Different tools for different projects, automatically\n\n### For Development Teams\n**Problem:** Every developer has their own way of running tests, deployments, and dev environments. Onboarding is painful.\n\n**Solution:** TASAK standardizes your team's workflow into a unified command palette:\n- \ud83c\udfe2 **Company-wide tooling** in global config, project-specific in local\n- \ud83d\udcda **Self-documenting:** Your AI agent can explain and execute any workflow\n- \ud83d\udd12 **Secure by default:** Only expose what you explicitly allow\n- \ud83d\ude84 **Zero friction:** Works with any language, any framework, any toolchain\n\n## \ud83d\udca1 Real-World Magic\n\n```yaml\n# Your AI agent can now do THIS with a single command:\ntasak deploy_review_app\n# Instead of:\n# 1. Check git branch\n# 2. Build Docker image\n# 3. Push to registry\n# 4. Update k8s manifests\n# 5. Apply to cluster\n# 6. Wait for rollout\n# 7. Run smoke tests\n# 8. Post PR comment with URL\n```\n\n## \ud83c\udfaf Perfect For\n\n### \u2728 Claude Code / Cursor / Copilot / Gemini CLI / Codex CLI / Users\n- Build a custom toolkit that makes your AI assistant 10x more effective\n- Stop wasting time on repetitive commands - let your agent handle them\n- Create project-specific \"skills\" your AI can use intelligently\n\n### \ud83d\udc65 Development Teams\n- Standardize workflows across your entire team\n- Make complex operations accessible to junior developers\n- Document-by-doing: your commands ARE the documentation\n\n### \ud83d\udd27 DevOps & Platform Engineers\n- Expose safe, curated access to production tools\n- Build guardrails around dangerous operations\n- Create approval workflows for sensitive commands\n\n### \ud83c\udfa8 Open Source Maintainers\n- Give contributors a standard way to run your project\n- Reduce \"works on my machine\" issues\n- Make your project AI-assistant friendly\n\n## \ud83c\udf1f Killer Features\n\n### \ud83e\udde9 **Python Plugins** (NEW!)\nYour AI agent can write its own tools! Just ask:\n> \"Create a plugin that formats all Python files and runs tests\"\n\nThe agent writes the Python function, TASAK automatically loads it. Mind = blown. \ud83e\udd2f\n\n### \ud83e\uddf1 Useful Node Types (App Types)\n\nTASAK exposes your tools as app \u201cnodes\u201d your agent can navigate. The most useful types:\n\n- `cmd` \u2014 quick shell commands\n  ```yaml\n  format_code:\n    type: cmd\n    meta:\n      command: \"ruff format . && ruff check --fix\"\n  ```\n\n- `docs` \u2014 Markdown navigator (commands = .md files; sub\u2011apps = folders)\n  ```yaml\n  docs:\n    type: docs\n    meta:\n      directory: \"./docs\"\n      respect_include: true\n  ```\n\n- `mcp` \u2014 local MCP server (stateful, AI\u2011native)\n  ```yaml\n  database:\n    type: mcp\n    meta:\n      command: \"uvx mcp-server-sqlite --db ./app.db\"\n  ```\n\n- `mcp-remote` \u2014 remote MCP via proxy (OAuth, SSE)\n  ```yaml\n  atlassian:\n    type: mcp-remote\n    meta:\n      server_url: \"https://mcp.atlassian.com/v1/sse\"\n  ```\n\n- `curated` \u2014 orchestrated workflows (compose multiple steps/tools)\n  ```yaml\n  full_deploy:\n    type: curated\n    commands:\n      - test\n      - build\n      - deploy\n      - notify_slack\n  ```\n\n- `python-plugin` \u2014 Python\u2011written plugins discovered from plugin dirs\n  ```yaml\n  # auto\u2011discovered; enable via plugins.python settings\n  ```\n\nSee all node/app types and details \u2192 docs/basic_usage.md#understanding-app-types\n\n### \ud83d\udd04 **Hierarchical Config**\nGlobal tools + project tools = perfect setup (with optional isolation)\n```\n~/.tasak/tasak.yaml       # Your personal toolkit\n./project/tasak.yaml      # Project-specific tools\n= Your AI has exactly what it needs\n```\n\nTip: To stop inheriting from parents/global at a given level, set:\n```yaml\napps_config:\n  isolate: true  # Ignore all higher configs above this file\n```\n\n## \u26a1 Quick Start\n\n### 1. Install (30 seconds)\n```bash\npipx install tasak\n```\n\nOptional (edge builds from GitHub):\n```bash\n# pipx\npipx install git+https://github.com/jacekjursza/TASAK.git\n\n# or pip\npip install -U git+https://github.com/jacekjursza/TASAK.git\n```\n\n### 2. Create Your First Power Tool (1 minute)\n```bash\ncat > ~/.tasak/tasak.yaml << 'EOF'\nheader: \"My AI Assistant Toolkit\"\n\napps_config:\n  enabled_apps:\n    - dev\n    - test\n    - deploy\n\n# One command to rule them all\ndev:\n  name: \"Start Development\"\n  type: \"cmd\"\n  meta:\n    command: \"docker-compose up -d && npm run dev\"\n\ntest:\n  name: \"Run Tests\"\n  type: \"cmd\"\n  meta:\n    command: \"npm test && npm run e2e\"\n\ndeploy:\n  name: \"Deploy to Staging\"\n  type: \"cmd\"\n  meta:\n    command: \"./scripts/deploy.sh staging\"\nEOF\n```\n\n### 3. Watch Your AI Agent Level Up\n```bash\n# Your AI can now:\ntasak dev      # Start entire dev environment\ntasak test     # Run full test suite\ntasak deploy   # Deploy to staging\n# No more copy-pasting commands!\n```\n\n## \ud83c\udf93 Real Use Cases\n\n### Use Case 1: Supercharge Your Claude Code\n```yaml\n# .tasak/tasak.yaml in your project\nheader: \"NextJS + Supabase Project\"\n\napps_config:\n  enabled_apps:\n    - setup_branch\n    - check_types\n    - preview\n\nsetup_branch:\n  name: \"Setup new feature branch\"\n  type: \"cmd\"\n  meta:\n    command: |\n      git checkout -b $1 &&\n      npm install &&\n      npm run db:migrate &&\n      npm run dev\n\ncheck_types:\n  name: \"Full type check\"\n  type: \"cmd\"\n  meta:\n    command: \"tsc --noEmit && eslint . --fix\"\n\npreview:\n  name: \"Deploy preview\"\n  type: \"cmd\"\n  meta:\n    command: \"vercel --prod=false\"\n```\n\nNow your Claude Code can:\n- Create and setup feature branches\n- Run comprehensive type checks\n- Deploy preview environments\n...all without you typing a single command!\n\n### Use Case 2: Team Workflow Standardization\n```yaml\n# Company-wide ~/.tasak/tasak.yaml\nheader: \"ACME Corp Standard Tools\"\n\napps_config:\n  enabled_apps:\n    - vpn\n    - staging_logs\n    - prod_deploy\n\nvpn:\n  name: \"Connect to VPN\"\n  type: \"cmd\"\n  meta:\n    command: \"openvpn --config ~/.acme/vpn.conf\"\n\nstaging_logs:\n  name: \"Stream staging logs\"\n  type: \"cmd\"\n  meta:\n    command: \"kubectl logs -f -n staging --selector=app\"\n\nprod_deploy:\n  name: \"Production deployment\"\n  type: \"curated\"\n  commands:\n    - name: \"deploy\"\n      description: \"Full production deployment with approvals\"\n      backend:\n        type: composite\n        steps:\n          - type: cmd\n            command: [\"./scripts/request-approval.sh\"]\n          - type: cmd\n            command: [\"./scripts/deploy-prod.sh\"]\n```\n\n### Use Case 3: Python Plugins - Let AI Extend Itself!\n```python\n# Your AI agent can write this!\n# ~/.tasak/plugins/my_tools.py\n\ndef smart_refactor(file_pattern: str, old_name: str, new_name: str):\n    \"\"\"Refactor variable/function names across multiple files\"\"\"\n    import subprocess\n    result = subprocess.run(\n        [\"rg\", \"-l\", old_name, file_pattern],\n        capture_output=True,\n        text=True\n    )\n    files = result.stdout.strip().split(\"\\n\")\n\n    for file in files:\n        subprocess.run([\n            \"sed\", \"-i\", f\"s/{old_name}/{new_name}/g\", file\n        ])\n\n    return f\"Refactored {len(files)} files\"\n\n# Now available as: tasak smart_refactor \"*.py\" \"oldFunc\" \"newFunc\"\n```\n\n## \ud83d\udcda Documentation\n\n**Quick Links:**\n- [Why TASAK?](docs/about.md) - See more use cases and benefits\n- [Installation & Setup](docs/setup.md) - Get running in 2 minutes\n- [Basic Usage](docs/basic_usage.md) - Your first `cmd` apps\n- [Advanced Usage](docs/advanced_usage.md) - MCP servers, Python plugins, and workflows\n- [Changelog](CHANGELOG.md) - See all releases and changes\n\n## \ud83e\udd16 CLI Semantics for Agents\n\nAgent\u2011friendly defaults across app types:\n\n- `tasak <app>` \u2192\n  - If the app exposes exactly one command with no required params: runs it immediately.\n  - Otherwise: shows grouped simplified help with sections \"<app> commands:\" and \"<app> sub-apps:\".\n- `tasak <app> <command>` \u2192\n  - If the command has no required parameters: executes immediately.\n  - If it has required parameters: shows focused help for that command (same as `--help`).\n- `tasak <app> <command> --help` \u2192 focused help for that single command.\n- For docs apps:\n  - Navigate: `tasak <docs-app> <subdir> [subdir...]` or shorthand `tasak <docs-app> a:b[:c]`\n  - Open files: `tasak <docs-app> <sub-app...> <command>` (extension optional)\n\nBehavior notes:\n- Tool schema listing/help uses a transparent cache and refreshes quietly when stale or missing.\n- Noisy transport logs are suppressed by default; enable with `TASAK_DEBUG=1` or `TASAK_VERBOSE=1` if you need to debug.\n\n## Daemon (Connection Pooling)\n\nTASAK can run a local daemon to pool MCP connections and cache schemas, dramatically reducing per-command startup time. The daemon runs on `127.0.0.1:8765` and the CLI auto-starts it on demand (unless explicitly stopped or disabled).\n\n- Start: `tasak daemon start`\n- Stop: `tasak daemon stop` (also disables autostart until next manual start)\n- Restart: `tasak daemon restart`\n- Status: `tasak daemon status`\n- Logs: `tasak daemon logs -f`\n\n### Logging levels\n\nBy default the daemon is quiet (warning and errors only). Enable verbose logs when debugging:\n\n- CLI flags:\n  - `tasak daemon start -v` or `tasak daemon restart -v` (equivalent to debug)\n  - `tasak daemon start --log-level info` (or `debug`, `warning`, `error`)\n- Environment variable:\n  - `TASAK_DAEMON_LOG_LEVEL=INFO` (or `DEBUG`) before starting the daemon\n\nCLI-side daemon hints (\"Using daemon\u2026\", \"Daemon: \u2026\") appear only when `--debug` or `TASAK_VERBOSE=1` is set.\n\n### HTTP endpoints\n\nThe daemon exposes a small local API for health checks and diagnostics:\n\n- `GET /health` \u2013 basic liveness + uptime\n- `GET /connections` \u2013 active connections with age/idle and counters\n- `GET /apps/{app}/ping?deep=true` \u2013 shallow or deep ping (deep performs a quick tool list)\n- `GET /metrics` \u2013 basic counters (connection creations/reuses, per-app list/call/error counts)\n\n### Autostart behavior\n\nThe CLI auto-starts the daemon unless one of the following is true:\n- `tasak daemon stop` was called (creates `~/.tasak/daemon.disabled`)\n- `TASAK_NO_DAEMON=1` is set in the environment\n- `--debug` is used (bypasses daemon for direct connections)\n\n### Tuning\n\nYou can tune TTLs via environment variables before starting the daemon:\n\n- `TASAK_DAEMON_CONN_TTL` \u2013 connection idle TTL in seconds (default: `300`)\n- `TASAK_DAEMON_CACHE_TTL` \u2013 tools cache TTL in seconds (default: `900`)\n\n## \ud83e\udd1d Community & Support\n\n- **GitHub Issues**: [Report bugs or request features](https://github.com/jacekjursza/TASAK/issues)\n- **Discussions**: [Share your TASAK configs and workflows](https://github.com/jacekjursza/TASAK/discussions)\n- **Examples**: Check out `examples/` folder for real-world configurations\n\n## \ud83d\udee0\ufe0f For Contributors\n\nBuilt with Python 3.11+, following TDD principles. We welcome contributions!\n\n### Development Setup\n```bash\ngit clone https://github.com/jacekjursza/TASAK.git\ncd TASAK\npython -m venv .venv\nsource .venv/bin/activate\n\n# Install in editable mode (includes MCP by default)\npip install -e .\n\n# Run tests\npytest -q\n\n# Optional: if you install pytest-timeout, you can enable\n# suite timeouts using the provided CI config\npytest -c pytest-ci.ini -q\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## \ud83d\udcc4 License\n\nMIT License - see [LICENSE](LICENSE) for details.\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2025 Jacek Jursza\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.\n        ",
    "summary": "Transform your AI coding assistant into a productivity powerhouse with custom tools and workflows",
    "version": "0.1.4",
    "project_urls": {
        "Bug Tracker": "https://github.com/jacekjursza/tasak/issues",
        "Homepage": "https://github.com/jacekjursza/tasak"
    },
    "split_keywords": [
        "ai-agents",
        " claude-code",
        " cursor",
        " copilot",
        " developer-tools",
        " automation",
        " cli",
        " mcp"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "792673e10668c62362fe0a5e3ae991e2142f0e8166c1e6f4b8d29e110e08d8fd",
                "md5": "6688b736be26e87d2f73ea12942eb979",
                "sha256": "e61f878e8afe7e16d2de9631a62824016c0996b087a518bb56fe5ee322d6c604"
            },
            "downloads": -1,
            "filename": "tasak-0.1.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6688b736be26e87d2f73ea12942eb979",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 83267,
            "upload_time": "2025-09-08T10:37:02",
            "upload_time_iso_8601": "2025-09-08T10:37:02.567591Z",
            "url": "https://files.pythonhosted.org/packages/79/26/73e10668c62362fe0a5e3ae991e2142f0e8166c1e6f4b8d29e110e08d8fd/tasak-0.1.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e973707ccbba7f618e976a700c60dec8727b428b9912b011721a271b1b78882b",
                "md5": "6b2f63160a752a86afbe1ca66248e288",
                "sha256": "0128f8a8266f9c0c4ea31e6d4f1bfb42c5c97e086cf92108e2c85c5c12c9529b"
            },
            "downloads": -1,
            "filename": "tasak-0.1.4.tar.gz",
            "has_sig": false,
            "md5_digest": "6b2f63160a752a86afbe1ca66248e288",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 101257,
            "upload_time": "2025-09-08T10:37:04",
            "upload_time_iso_8601": "2025-09-08T10:37:04.738066Z",
            "url": "https://files.pythonhosted.org/packages/e9/73/707ccbba7f618e976a700c60dec8727b428b9912b011721a271b1b78882b/tasak-0.1.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-08 10:37:04",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jacekjursza",
    "github_project": "tasak",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "PyYAML",
            "specs": [
                [
                    "==",
                    "6.0.1"
                ]
            ]
        },
        {
            "name": "pre-commit",
            "specs": []
        },
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.31.0"
                ]
            ]
        },
        {
            "name": "mcp",
            "specs": [
                [
                    ">=",
                    "1.13.1"
                ]
            ]
        },
        {
            "name": "fastapi",
            "specs": [
                [
                    ">=",
                    "0.100.0"
                ]
            ]
        },
        {
            "name": "uvicorn",
            "specs": [
                [
                    ">=",
                    "0.23.0"
                ]
            ]
        },
        {
            "name": "psutil",
            "specs": [
                [
                    ">=",
                    "5.9.0"
                ]
            ]
        },
        {
            "name": "daemoniker",
            "specs": [
                [
                    ">=",
                    "0.2.3"
                ]
            ]
        },
        {
            "name": "pytest-timeout",
            "specs": [
                [
                    ">=",
                    "2.3.1"
                ]
            ]
        },
        {
            "name": "pytest-asyncio",
            "specs": [
                [
                    ">=",
                    "0.23"
                ]
            ]
        },
        {
            "name": "fastmcp",
            "specs": [
                [
                    ">=",
                    "0.2"
                ]
            ]
        },
        {
            "name": "pytest-asyncio",
            "specs": [
                [
                    ">=",
                    "0.23"
                ]
            ]
        }
    ],
    "lcname": "tasak"
}
        
Elapsed time: 0.47553s