Project Management
Penguin v0.6.x introduces a powerful SQLite-backed project management system that provides robust task tracking, hierarchical organization, and integration with the AI assistant workflow. This guide covers all aspects of managing projects and tasks in Penguin.
Overview
The project management system offers:
- SQLite-backed storage with ACID transactions for reliability
- Hierarchical task organization with dependencies and subtasks
- Real-time status tracking with automatic checkpointing
- Resource constraints for budget and time management
- EventBus integration for real-time updates across CLI and web interfaces
- CLI, web/API, and Python surfaces for interacting with the same underlying project/task runtime
Core Concepts
Projects
A project is a high-level container for related work with:
- Name and description for identification
- Workspace path for file organization
- Creation and modification timestamps
- Associated tasks and their relationships
- Overall status derived from task completion
Tasks
Tasks are individual work items with:
- Hierarchical structure (parent/child relationships)
- Status tracking (
active,running,pending_review,completed,failed,cancelled,archived) plus separate task phases - Dependencies between tasks
- Resource constraints (token budgets, time limits)
- Execution records with detailed logs
- Agent assignment for automated execution
Dependencies
Tasks can depend on other tasks with:
- Completion-required dependencies - the default scheduling gate
- Typed dependency policies - Blueprint-driven dependency specs can express stricter semantics such as
artifact_ready - Structured Blueprint diagnostics - missing dependencies, duplicate IDs, missing acceptance criteria, and cycles are now surfaced explicitly during Blueprint parse/lint flows
CLI Usage (Current Public Surface)
Implemented Commands
Project
# Create a project
penguin-cli project create "My Project" [--description/-d TEXT]
# List projects
penguin-cli project list
# Delete a project
penguin-cli project delete <PROJECT_ID> [--force/-f]
Task (within a project)
# Create a task
penguin-cli project task create <PROJECT_ID> "Task title" [--description/-d TEXT]
# List tasks
penguin-cli project task list [<PROJECT_ID>] [--status/-s STATUS]
# Start / approve / delete
penguin-cli project task start <TASK_ID> # moves task into the active state
penguin-cli project task complete <TASK_ID> # approves a task that is pending review
penguin-cli project task delete <TASK_ID> [--force/-f]
Task status filters are case-insensitive and follow the current lifecycle values (active, running, pending_review, completed, cancelled, failed, archived).
⚠️ The above are the only task-related CLI commands that exist today. Everything else in earlier docs (update, show, pause, graphs, bulk ops, etc.) is planned or internal and should not be treated as a stable public CLI command.
Blueprint / orchestration notes
Blueprint parsing, dependency DAG construction, diagnostics, recipes, and ITUV orchestration exist in the backend/runtime, but they are not all exposed as stable first-class CLI commands yet.
Current truth:
- Blueprint import/sync and dependency-policy support are runtime/backend capabilities.
- Structured diagnostics exist for duplicate task IDs, missing dependencies, cycles, missing acceptance criteria, and related authoring issues.
- Public CLI exposure is intentionally narrower than the backend capability set.
Treat older examples of /blueprint, /task graph, or /workflow ... commands as design/history material unless they are explicitly listed in the implemented CLI section above.
Python API
Basic Project Management
from pathlib import Path
from penguin.project.manager import ProjectManager
from penguin.project.models import TaskStatus
workspace = Path("./penguin-workspace")
pm = ProjectManager(workspace)
project = pm.create_project(
name="Web Application",
description="Full-stack web app",
)
task = pm.create_task(
title="Setup FastAPI backend",
description="Initialize FastAPI project with basic structure",
project_id=project.id,
dependencies=[],
acceptance_criteria=["Backend scaffold exists"],
)
projects = pm.list_projects()
tasks = pm.list_tasks(project_id=project.id)
pm.update_task_status(task.id, TaskStatus.ACTIVE)
Notes on current Python surface truth
ProjectManageris the real project/task entry point documented today.- Project workspaces are managed under the manager workspace root;
create_project(...)does not currently accept a separateworkspace=keyword. - There is no public
AsyncProjectManager,TaskManager, orAgentMatcherAPI shipped today. - Dependency-policy semantics, Blueprint diagnostics, recipes, and clarification-aware task execution exist in the runtime/backend, but the broader Python embedding surface still needs its own dedicated refresh pass.
Web/API Interface
Penguin's web surface is available through penguin-web and is no longer a “coming soon” concept.
Current web/API behavior includes:
- REST endpoints for project/task access
- richer task payloads that expose lifecycle truth such as:
statusphase- dependency fields
- artifact evidence
- clarification metadata
POST /api/v1/tasks/{task_id}/execute- routes through
RunModeso non-terminal outcomes likewaiting_inputsurvive to clients
- routes through
POST /api/v1/tasks/{task_id}/clarification/resume- answers the latest open clarification request and resumes task execution
GET /api/v1/events/sse- exposes OpenCode-compatible SSE and now includes clarification-related session status visibility
The web/API surface is still being audited, but it now reflects current runtime truth much more closely than older docs implied.
Advanced Features
Clarification-aware task execution
from penguin.web.app import PenguinAPI
api = PenguinAPI()
result = await api.run_task("Implement auth flow")
if result.get("status") == "waiting_input":
resumed = await api.resume_with_clarification(
task_id=result["task_id"],
answer="Use rotating refresh tokens",
answered_by="human",
)
This Python embedding surface is usable, but it still has a dedicated follow-up plan because it has not received the same depth of audit/ergonomics cleanup as the CLI and web/API surfaces.
Additional notes
Project templates, richer event-driven integrations, and other higher-level orchestration surfaces remain active design/runtime territory. Prefer the explicit CLI and web/API surfaces documented above when you need current public behavior.
Database Schema
The project/task storage layer is SQLite-backed, but the exact schema is an implementation detail and may evolve. Prefer the Python and CLI/web surfaces documented above over relying on copied table layouts from older docs.
Performance and Scaling
Operational tuning details are still evolving. Treat older examples of WAL toggles, template loaders, or higher-level orchestration helpers as implementation notes rather than stable public APIs unless they are explicitly documented in the current CLI/web/Python sections above.
Workspace Semantics
--workspaceuses the exact provided path. Penguin does not silently create a child directory under that path.- When
--workspaceis omitted, Penguin uses its managed default workspace path. - Project creation output now distinguishes:
Workspace (explicit): ...Workspace (default): ...Execution root: ...
This separation is intentional: the execution root and the stored project workspace are related concepts, but they are not the same thing.