Introduction

Introduction


Jackadi is currently in an alpha state and is provided with no guarantees or warranties.

You’re welcome to try it out and give feedback.

But, it must not be used in production or in any environment where reliability, security, or data integrity are required.

What is Jackadi?

Jackadi is a developer-first distributed task execution platform designed for developers with a plugin system architecture consisting of a manager and agents.

The main motivation is to create a framework where developers write tasks as pure code without abstractions or hidden behaviors. Task writing is meant to be natural and direct.

Key principles:

  • Pure Go Approach: Tasks are written as Go code with no hidden behaviors - what you write is what you get.
  • No Runtime Dependencies: Tasks have no runtime dependencies on other tasks; all dependencies are resolved at compile-time.
  • No Abstractions: Task writing is natural for Go developers with minimal framework-specific knowledge needed.
  • Flexible Use Cases: From simple package installation to complex workflows like server management and upgrades.
  • No locking: Plugins are libraries which can be imported from any other program. They are standalone binaries, meaning they can be executed directly from the shell.

Features

Description
Distributed Task ExecutionExecute tasks across multiple agents from a central manager.
Plugin SystemExtend functionality through custom Go plugins.
Bonus: a plugin can be executed as a standalone binary.
Advanced TargetingTarget agents via list, glob, regex, advanced query.
Specs CollectorsGather and store system information from agents.
SecuritymTLS, agent acceptance workflow, protection against rogue agents.
Developer-FriendlyTasks/specs are Go function registered with a simple SDK.
Web API IntegrateJackadi with your infrastructure stack.

Architecture

Agents are connected to a manager via persistent bidirectional gRPC connections.

Jackadi features a simple plugin architecture where all tasks and specs collectors are implemented as pure Go functions. The plugin system is built on top of hashicorp/go-plugin, and is made intuitive using a simple and easy to use SDK.

By default, all executed task are recorded in BadgerDB.

Quick demo tour

Quickstart

# Start the manager
manager --mtls=false

# Start an agent
agent --id="agent1" --mtls=false

# Accept the agent connection (if not using auto-accept)
jack agents list
jack agents accept agent1

# The agent should be now in "accepted" list
jack agents list

# Check agents health
jack agents health

# Run a task
jack run agent1 cmd:run "echo hello"

Write my first plugin

Create a Go project

tour.go
package main

import "github.com/jackadi-io/jackadi/sdk"

func Hello(name string) (string, error) {
	return fmt.Sprintf("Hello %s!", name), nil
}

func main() {
	tour := sdk.New("tour")
	tour.MustRegisterTask("hello", Hello).WithDescription("Greetings.")
	sdk.MustServe(tour)
}

Compile the plugin

CGO_ENABLED=0 go build -o tour .

Put the plugin in the manager

Copy the file in the manager /opt/jackadi/plugins directory.

Then configure /etc/jackadi/plugins.yaml file:

"*":
  - tour

Synchronize the plugin to the agent

jack run agent1 plugins:sync

Run the plugin

jack run agent1 tour:hello

Next step