Task Agent is a small, forkable workspace for task-first autonomous-agent workflows.
It is intentionally generic: no private task history, no local data, and no bundled personal integrations. Project-level operating rules live in AGENTS.md.
Every commit before this date was rewritten to remove deployment-specific host
paths and private project, task, and trip names that the earlier commits still
carried in examples. Only those strings changed: the tree at the tip is
byte-identical to what it was before the rewrite. Commit hashes did change, so a
clone made before 2026-08-06 has no commit in common with origin/main.
If you have such a clone, discard its local history:
git fetch --all && git reset --hard origin/mainCommit anything you want to keep to a separate branch first; the reset discards
uncommitted and unpushed work. One merged leftover branch was renamed in the same
change and is now port-generic-agent-workspace-work; prune stale
remote-tracking refs with git fetch --prune.
tasks/skeleton for durable task artifactstasks/USER_PREFERENCES.example.mdas a starting point for durable user defaultsdata/projects/skeleton for multi-task project recordsdata/local-projects.example.mdas a starting point for local repository/path indexesAGENTS.md,.cursor/rules/, andCLAUDE.mdas one shared rule set for Codex, Cursor, and Claude Codeskills/task-creator/for creating task directories and updating the indexskills/task-runner/for parent-child CLI agent execution, detached-run supervision, and the dev-pipeline workflowskills/task-artifacts/for keeping task artifacts current during workskills/project-organizer/for durable project recordsskills/repo-health/for restore, publication, deliverables, and pre-push checksskills/skill-maintainer/for creating or changing skillsdocs/for architecture, task execution, Claude Code setup, and self-development workflows
Prerequisites are Python 3.11+, Git, network access, and an installed and
authenticated Codex, Claude, or Cursor CLI for the dev-pipeline owner. Clone the
repository, then from its directory create the environment and install the
pinned public dependency together with the test tools:
git clone https://github.com/rdudov/task-agent.git
cd task-agent
python3 -m venv .venv
.venv/bin/pip install -r requirements.lockCreate a task:
skills/task-creator/scripts/create_task.sh "Example task" "Try the task-agent workflow"Run health checks:
.venv/bin/python skills/repo-health/scripts/check_repo_health.py --allow-empty-tasks
PYTHONPATH=skills/task-runner/scripts .venv/bin/python -m pytest skills/task-runner/tests skills/task-creator/tests skills/repo-health/testsBefore pushing a source change from this workspace, run:
.venv/bin/python skills/repo-health/scripts/check_pre_push.py --remote originTo block deployment-specific project/task/trip names without publishing them,
put one literal per line in ignored .state/private-history-markers, or point
TASK_AGENT_PRIVATE_HISTORY_MARKERS at another local file. The guard also
refuses foreign remote and unknown ref namespaces while allowing ordinary local
branches, tags, notes, and stash.
An empty marker list is not a pass. A fresh clone has no .state/, so the name
check has nothing to compare against; both check_pre_push.py and
check_repo_health.py now say so on stderr instead of reporting a clean run.
Pass --require-private-history-markers to check_pre_push.py to turn that
notice into a failure.
The same rules reach Codex, Cursor, and Claude Code without being copied. AGENTS.md holds the project rules, .cursor/rules/*.mdc hold the always-on rules, and CLAUDE.md imports both rather than restating them; .claude/ contains only symlinks into the canonical files. Adding a Cursor rule means adding its .claude/imports/ symlink and its CLAUDE.md import line — see docs/claude-code-setup.md.
.venv/bin/python skills/task-runner/scripts/task_runner.py start tasks/001-exampleThe child runner follows the parent CLI agent, so a Codex session delegates to Codex and a Claude session to Claude. Pass --runner codex|claude|agent to decide explicitly, or set TASK_AGENT_CHILD_RUNNER. All three drive both workflows: under dev-pipeline the agent runner becomes the core's cursor owner runtime. Every run records which rule decided.
Access level is expressed once through --sandbox-mode (read-only, workspace-write, danger-full-access) and mapped per runner. TASK_AGENT_WORKSPACE_ROOT sets how far full access reaches; it defaults to the parent of this checkout.
For the standard workflow, --repo /path/to/target-repo makes that repository
an additional workspace/access root for Codex, Claude, or Cursor Agent while
the task-agent checkout remains the primary workspace.
Write modes verify writability before launch and record the result.
start returns once the run is confirmed; the watcher and the child keep running in their own sessions, so closing the terminal does not end the work. On a host systemd machine the watcher gets its own transient scope; elsewhere the recorded boundary says it inherits the caller cgroup. Both processes are recorded by kernel start-time identity and PID namespace rather than by pid alone. An observer in another namespace reports liveness as unknown and cannot replace, stop, or reattach the host run. reattach restores a lost watcher and refuses when the pid was recycled or a watcher is already live.
--workflow dev-pipeline runs a task through the standalone dev-pipeline CLI, which drives an evidence-gated Codex, Claude, or Cursor owner session:
.venv/bin/python skills/task-runner/scripts/task_runner.py start tasks/001-example \
--workflow dev-pipeline --repo /path/to/target-repoThe workflow dependency is the separate public repository
rdudov/dev-pipeline. It is pinned in
requirements.txt and requirements.lock, so the Quick Start installs the
tested revision. To develop both repositories locally instead, replace it in
the active virtual environment with an editable checkout:
.venv/bin/pip install -e /path/to/dev-pipelineThe adapter is transport-neutral. It builds the owner instruction, calls the public CLI, validates the neutral lifecycle events it emits, and projects them into the task's status.json, trace.md, and progress.json. It binds no recipient and delivers no messages; skills/task-runner/scripts/pipeline_notify.py is the documented, deliberately inert seam where an application with a real transport attaches its own delivery and replay rules.
By default the runner resolves the CLI installed at .venv/bin/dev-pipeline,
then falls back to PATH. TASK_AGENT_DEV_PIPELINE_BIN or
--dev-pipeline-bin can select another executable explicitly; an unresolved
CLI fails before an owner process is started.
The same resolver is used by normal runs, direct adapter invocation, and
review-candidate.
The owner closes task frontmatter through tasks_index.py, completes every plan
step, and records passing live evidence. A completion reported without those
durable gates is blocked. For a contract with mandatory prose policy families,
run the bounded reviewer over the final committed candidate:
.venv/bin/python skills/task-runner/scripts/task_runner.py review-candidate \
tasks/001-example --repo /path/to/target-repoTask Agent is released under the MIT License.
tasks/ and data/ are durable local artifacts. This template tracks only skeleton and example files; real task history, tasks/INDEX.md, and reusable data should be backed up by your own local backup flow.