Add api package

Change-Id: Ifcdd1f45c01e98b91c1edef3371332cb4a098e82
diff --git a/server/app/app.go b/server/app/app.go
new file mode 100644
index 0000000..a016c4b
--- /dev/null
+++ b/server/app/app.go
@@ -0,0 +1,48 @@
+package app
+
+import (
+	"fmt"
+	"log/slog"
+
+	"github.com/iomodo/staff/agent"
+	"github.com/iomodo/staff/config"
+	"github.com/iomodo/staff/git"
+	"github.com/iomodo/staff/tm/git_tm"
+)
+
+// App type defines application global state
+type App struct {
+	logger  *slog.Logger
+	config  *config.Config
+	manager *agent.Manager
+}
+
+// NewApp creates new App
+func NewApp(config *config.Config, logger *slog.Logger) (*App, error) {
+	// Create task manager using config
+	gitInterface := git.New(config, logger)
+	taskManager := git_tm.NewGitTaskManager(gitInterface, config, logger)
+
+	manager, err := agent.NewManager(config, taskManager, logger)
+	if err != nil {
+		return nil, fmt.Errorf("failed to create agent manager: %w", err)
+	}
+
+	return &App{
+		logger:  logger,
+		config:  config,
+		manager: manager,
+	}, nil
+}
+
+func (a *App) Start() {
+	a.manager.StartAllAgents()
+}
+
+func (a *App) Stop() {
+	if a.manager != nil {
+		if err := a.manager.Close(); err != nil {
+			a.logger.Error("Error closing manager", slog.String("error", err.Error()))
+		}
+	}
+}