Skip to main content

Create AI prompts with files, directories, and URLs

Project description

ctxkit

PyPI - Status PyPI GitHub PyPI - Python Version

ctxkit is a command-line tool for constructing AI prompts containing files, directories, and URL content. For example:

ctxkit -m "Please review the following source code file." -f main.py

In the preceding example, the -m argument outputs the message text, and the -f argument outputs the main.py file text as follows.

Please review the following source code file.

<main.py>
print('Hello, world!')
</main.py>

API Calling

ctxkit supports calling the Ollama API and the Grok (xAI) API via the --ollama and --grok arguments, respectively.

Ollama

ctxkit -m 'Hello!' --ollama gpt-oss:20b

Grok

Click here to create an xAI API key.

export XAI_API_KEY=<key>
ctxkit -m 'Hello!' --grok grok-3

You can call an API with a prompt from stdin by passing no prompt items:

echo 'Hello!' | ctxkit --ollama gpt-oss:20b

Copying Output

To copy the output of ctxkit and paste it into your favorite AI chat application, pipe ctxkit's output into the clipboard tool for your platform.

macOS

ctxkit -m 'Hello!' | pbcopy

Windows

ctxkit -m 'Hello!' | clip

Linux

ctxkit -m 'Hello!' | xsel -ib

Usage

Using the ctxkit command line application, you can add any number of ordered context items of the following types: configuration files (-c), messages (-m), file path or URL content (-i and -f), and directories (-d).

usage: ctxkit [-h] [-g] [-c PATH] [-m TEXT] [-i PATH] [-t PATH] [-f PATH]
              [-d PATH] [-v VAR EXPR] [-x EXT] [-l INT] [--ollama MODEL |
              --grok MODEL] [--temp NUM] [--topp NUM]

options:
  -h, --help           show this help message and exit
  -g, --config-help    display the JSON configuration file format

Prompt Items:
  -c, --config PATH    process the JSON configuration file path or URL
  -m, --message TEXT   add a prompt message
  -i, --include PATH   add the file path or URL text
  -t, --template PATH  add the file path or URL template text
  -f, --file PATH      add the file path or URL as a text file
  -d, --dir PATH       add a directory's text files
  -v, --var VAR EXPR   define a variable (reference with "{{var}}")

Directory Options:
  -x, --ext EXT        add a directory text file extension
  -l, --depth INT      the maximum directory depth, default is 0 (infinite)

API Calling:
  --ollama MODEL       pass to the Ollama API
  --grok MODEL         pass to the Grok API
  --temp NUM           set the model response temperature
  --topp NUM           set the model response top_p

Variables

You can specify one or more variable references in a message's text, a file path, a directory path, or a URL using the syntax, {{var}}. A variable's value is specified using the -v argument. For example:

ctxkit -v package ctxkit -m 'Write a 100 word or less description of the Python package named "{{package}}"'

Configuration Files

ctxkit JSON configuration files allow you to construct complex prompts in one or more JSON files.

Example: Write Unit Tests

To generate a prompt to write unit tests for a function or method in a module, create a configuration file similar to the following:

{
    "items": [
        {"message": "Write the unit test methods to cover the code in the {{scope}}."},
        {"file": "src/my_package/{{base}}.py"},
        {"file": "src/tests/test_{{base}}.py"}
    ]
}

In this example, the "scope" variable allows you to specify what you want to write unit tests for. The "base" variable specifies the base sub-module name. To generate the prompt, run ctxkit:

ctxkit -v base main -v scope "main function" -c unittest.json

This outputs:

Write the unit test methods to cover the code in the main function.

<src/my_package/main.py>
# main.py
</src/my_package/main.py>

<src/tests/test_main.py>
# test_main.py
</src/tests/test_main.py>

Configuration File Format

The ctxkit -g argument outputs the JSON configuration file format defined using the Schema Markdown Language.

# The ctxkit configuration file format
struct CtxKitConfig

    # The list of prompt items
    CtxKitItem[len > 0] items


# A prompt item
union CtxKitItem

    # Config file path or URL
    string config

    # A prompt message
    string message

    # A long prompt message
    string[len > 0] long

    # File path or URL text
    string include

    # File path or URL as a text file
    string file

    # Add a directory's text files
    CtxKitDir dir

    # Set a variable (reference with "{{var}}")
    CtxKitVariable var


# A directory item
struct CtxKitDir

    # The directory file path or URL
    string path

    # The file extensions to include (e.g. ".py")
    string[] exts

    # The directory traversal depth (default is 0, infinite)
    optional int(>= 0) depth


# A variable definition item
struct CtxKitVariable

    # The variable's name
    string name

    # The variable's value
    string value

Development

This package is developed using python-build. It was started using python-template as follows:

template-specialize python-template/template/ ctxkit/ -k package ctxkit -k name 'Craig A. Hobbs' -k email 'craigahobbs@gmail.com' -k github 'craigahobbs' -k noapi 1

Project details


Download files

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

Source Distribution

ctxkit-1.2.7.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

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

ctxkit-1.2.7-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file ctxkit-1.2.7.tar.gz.

File metadata

  • Download URL: ctxkit-1.2.7.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for ctxkit-1.2.7.tar.gz
Algorithm Hash digest
SHA256 d07127bf27bd9671b3dffa30f2880264bc70af4ac9682ebece5793d21dad90d3
MD5 80334c70e56a4913c2668fb64fcee6e5
BLAKE2b-256 a1ae0175de9e9b63f106dbc8015d6f192e358971fd38a38a2f1eda857849b604

See more details on using hashes here.

File details

Details for the file ctxkit-1.2.7-py3-none-any.whl.

File metadata

  • Download URL: ctxkit-1.2.7-py3-none-any.whl
  • Upload date:
  • Size: 10.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for ctxkit-1.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 6923e981f1900c1e323265839e24c79f228fb76ce7f95703db54fefd896e4f1a
MD5 275783bbb12afd1fc914f7160be2af23
BLAKE2b-256 464667fc2a4854d4fdf00f8059f5809567caf7baebd2a0b04af655b7292c15a6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page