Skip to main content

🦆 Quack Norris - the code savy star 🌟

The harness optimized for SLMs

A rubber duckie coding nerd

Quack Norris is a compact agent core optimized for small language models (SLMs). It can be integrated as an Agent Client Protocol (ACP) agent into other agents or UIs or used for custom code as a Python SDK.

🤖 ACP Agent

Quack Norris works with any ACP-compatible client. To use it, install Quack Norris as a command-line tool:

uv tool install quack-norris

# Alternative from source for development
cd quack-norris
uv tool install . --force --reinstall --editable

Create your LLM configuration as described in LLM configuration, then configure your ACP client (e.g. zed) to start:

quack-norris acp [--config FILE]

🧩 Python SDK

Add Quack Norris as an application dependency:

uv add quack-norris

The async agent(...) function is stateless. Your application selects the model and provides exact tool list, history, callbacks, context policy, and optional skill metadata.

from pathlib import Path

from quack_norris.core import LLM, TextOutput, agent
from quack_norris.core.llm import UserMessage
from quack_norris.skills_and_agents import discover_skill_info
from quack_norris.tools import make_native_tools

# Load the configuration (described below)
LLM.setup()


# Implement your own approval logic
async def approve(_call):
    return False  # deny everything


# Stream outputs or ignore them, your choice
async def handle_output(item):
    if isinstance(item, TextOutput):
        print(item.text, end="", flush=True)


# Run the agent with tools and skills and await its final response
workspace = Path.cwd()
result = await agent(
    model=LLM.default_model() or "ollama/qwen3:14b",
    system_prompt="You are a concise coding agent.",
    tools=make_native_tools(workspace, skills=True),
    chat_history=[UserMessage(content="Review this change")],
    on_permission_request=approve,
    on_output=handle_output,
    context=None,
    skills=discover_skill_info(workspace),
)

⚙️ LLM Configuration

Configuration is loaded from ~/.config/quack-norris/config.yaml, a project-local config.yaml/llms.yaml, or a file passed with --config in ACP mode.

defaults:
  model: ollama/qwen3:14b

llms:
  - group: ollama
    provider: OpenAI
    api_endpoint: http://localhost:11434/v1
    api_key: ollama
    context_window: 32768

Supported providers include OpenAI-compatible endpoints, Ollama, Azure OpenAI, AWS Bedrock, and GitHub Copilot. Static model lists can be configured with models:; dynamic OpenAI-compatible and authenticated Copilot providers are discovered through their /models endpoints.

🛠️ Tools

Quack norris comes with a set of built-in tools to make your life easier. With ACP the tools are used if the client advertises the required capabilities, with the SDK you have control and can add, remove or replace tools as you like.

Tool Purpose
file_view Read a file or list a directory
file_write Create or write a text file
file_str_replace Replace one exact text occurrence
file_move Move a file or directory
file_delete Delete a file or directory
pwsh / bash Run a platform-appropriate shell command
check_tool Poll a deferred operation
await_tool Wait for a deferred operation
kill_tool Cancel a deferred operation
use_skill Load full skill instructions by name

🔍 Diving Deeper

  • Documentation
  • Development commands:
    uv run python -m pytest
    uv run ruff check .
    uv run ty check quack_norris
    

⚖️ License

The MIT License (MIT)

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quack_norris-4.0.1.tar.gz (159.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quack_norris-4.0.1-py3-none-any.whl (99.8 kB view details)

Uploaded Python 3

File details

Details for the file quack_norris-4.0.1.tar.gz.

File metadata

  • Download URL: quack_norris-4.0.1.tar.gz
  • Upload date:
  • Size: 159.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for quack_norris-4.0.1.tar.gz
Algorithm Hash digest
SHA256 6f270c40d2ecb92f3228c0a517959f884c6ac9a6ff5fe5a69b5647fce5186adc
MD5 9f85dda066ed66da927be04fc0dd9514
BLAKE2b-256 53955148781f015554c843995e6da23cb2a1899b330e85d23dc5a9da89c99f94

See more details on using hashes here.

Provenance

The following attestation bundles were made for quack_norris-4.0.1.tar.gz:

Publisher: python-publish.yml on penguinmenac3/quack-norris

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file quack_norris-4.0.1-py3-none-any.whl.

File metadata

  • Download URL: quack_norris-4.0.1-py3-none-any.whl
  • Upload date:
  • Size: 99.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for quack_norris-4.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4f7ad061f13cae28f069b8bfce407d3eea1fa3360de5f04a54b551382af34ccf
MD5 a055f4448970facbdcd5cbc8c6026a9a
BLAKE2b-256 f0eaf1dcc836a32499ca1dbe2501d583ea41476fdeda157dc4544b170ad8c24a

See more details on using hashes here.

Provenance

The following attestation bundles were made for quack_norris-4.0.1-py3-none-any.whl:

Publisher: python-publish.yml on penguinmenac3/quack-norris

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

4.0.3

2 files

4.0.2

2 files

This release

4.0.1 This release

2 files

4.0.0

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page