Skip to content

Conversation

@atomantic
Copy link
Owner

@atomantic atomantic commented Feb 7, 2026

Summary

This release brings significant new features, UX improvements, and reliability fixes to PortOS:

  • Autonomous Jobs System (M37): Recurring proactive jobs (git maintenance, brain processing, daily briefings, project reviews) that execute using your digital twin identity. Full CRUD API, configurable intervals, and Jobs tab UI
  • Live Output Streaming: Claude CLI agents now stream output in real-time with tool-use visibility, matching the Codex live output experience
  • Detailed Agent Tool Activity: Running agent cards show what each tool is operating on — file paths, search patterns, commands — with color-coded expanded views
  • Quick Task Templates: One-click task creation from 8 built-in templates, plus save-your-own custom templates with usage tracking
  • Interview Assessment Analyzer: Paste AI personality assessments for automated Big Five trait analysis and digital twin profile enrichment
  • Likert-Scale Trait Scoring: 18 inline scale questions that directly update trait scores and confidence during enrichment
  • Universal Model Refresh: Refresh models button now works for all AI provider types (API and CLI)
  • Completed Agents Search: Search and filter completed agents by task description, model, or error message

Bug Fixes

  • Brain inbox classification no longer hangs on capture (background classification with Socket.IO updates)
  • Killed tasks no longer requeue on server restart
  • Quick Enrich skip now advances to a different question
  • Quick Enrich no longer repeats already-answered questions
  • AI providers status route no longer shadowed by toolkit's /:id route
  • Empty AI enhancement results return original description instead of 500 error
  • CLI runner security warning resolved (removed unsafe shell: true)
  • Immediate task execution for user-submitted tasks (no more 60s wait)
  • Low confidence personality bars now grey instead of misleading red

Test Plan

  • Verify autonomous jobs tab loads and toggles work at /cos/jobs
  • Confirm live output streaming works for Claude CLI agents
  • Test Quick Task Templates create/apply/delete flow
  • Validate brain inbox capture returns immediately with background classification
  • Check model refresh works for API and CLI providers
  • Confirm completed agents search filters correctly

github-actions bot and others added 26 commits February 6, 2026 01:18
- Remove unsafe shell:true option from spawn() to fix DEP0190 warning
- Override toolkit executeCliRun with secure implementation
- Add detailed logging for CLI execution debugging
- Patch aiToolkit runner at runtime in server/index.js
- Add refresh button for all providers (API and CLI)
- Support Claude, Gemini, OpenAI, Ollama, LM Studio
- Show toast notifications for success/failure
- Add loading states during refresh operations
- Update portos-ai-toolkit to latest version
- Add supportsModelRefresh helper function
- Hide refresh button for Gemini CLI (doesn't require model specification)
- Keep refresh available for other CLI providers like Claude
… data

The Autofixer is part of PortOS, not a standalone app. Fresh installs now
seed PortOS itself as the default app with all 6 processes and the real
install path resolved via __PORTOS_ROOT__ placeholder substitution.
The capture endpoint now returns immediately and runs AI classification
in the background via Socket.IO events, preventing UI hangs when AI
providers are slow or unresponsive.
Claude CLI agents now stream output in real-time using --output-format
stream-json --verbose --include-partial-messages flags. A stream parser
extracts text deltas, tool use events, and the final result from the
JSON stream, emitting them as live output lines via Socket.IO. Works in
both direct spawn mode and the standalone CoS Runner process.
- Delegate DevTools process kill to CoS killAgent when PID belongs to a
  CoS-spawned agent, ensuring task is properly blocked
- Block task immediately in terminateAgent/killAgent direct mode instead
  of deferring to close handler (prevents requeue on server restart)
- Add user-terminated guard in handleOrphanedTask to skip requeue
User tasks now spawn immediately when submitted (if slots available)
instead of waiting up to 60s for the evaluation interval. Also dequeues
the next pending task when an agent completes and frees a slot.
Scale questions (1-5) now directly update trait scores and confidence
when answered, closing the feedback loop between enrichment and
personality modeling. 18 scale items across 5 categories with weighted
moving average scoring and per-answer confidence boosts.
Question selection was deterministic based on questionsAnswered count,
which skip never incremented — so the same question was always returned.
Client now tracks skipped indices per session and passes them to the
server, which skips over matching predefined and scale questions.
When LM Studio or other providers return empty responses during task
prompt enhancement, fall back to the original description instead of
throwing a 500 error that pollutes server logs.
Enable the Chief of Staff to run recurring scheduled jobs on the user's
behalf using their digital twin identity. Ships with 4 built-in jobs
(git maintenance, brain processing, daily briefing, project review),
all disabled by default for opt-in. Adds Jobs tab UI, full CRUD API,
and integration into the CoS evaluation loop at Priority 3.5.
- Interview tab with paste-and-analyze flow for AI personality assessments
- Reusable ProviderModelSelector component and useProviderModels hook
- InterviewAnalysisCard with collapsible trait/dimension/document sections
- Deep-link all enrich buttons to specific gap categories
- NextActionBanner integration on overview tab
- Low confidence personality bars now grey instead of misleading red
The /api/providers/status endpoint was unreachable because the AI toolkit's
GET /:id parameterized route was mounted first, catching "status" as a
provider ID. Reordered route registration so PortOS-specific routes are
defined before the toolkit's catch-all routes.
Adds a search input to the Completed Agents section that filters by
task description, model, agent ID, or error message. When searching,
all matching results are shown (bypasses the 15-item default limit).
When all predefined questions are exhausted and AI generation fails,
the fallback now serves a generic follow-up instead of recycling
question[0]. Also deduplicated near-identical first questions between
values and non_negotiables categories.
- Add collapsible Quick Templates section with 8 built-in templates
  (fix mobile, add feature, fix bug, refactor, add tests, etc.)
- Add Save Template button to save current form as reusable template
- Track template usage counts for popularity-based sorting
- Support custom user templates with CRUD operations
- Templates populate description, context, and optionally provider/model

Files added:
- server/services/taskTemplates.js

Files modified:
- server/routes/cos.js (template API routes)
- client/src/services/api.js (template API functions)
- client/src/components/cos/tabs/TasksTab.jsx (template UI)
Stream parser now extracts tool input details (file paths, search patterns,
commands) from input_json_delta events, showing what each tool operates on
instead of just the tool name. AgentCard displays recent tool activity with
color-coded expanded view and scrollable output.
Copilot AI review requested due to automatic review settings February 7, 2026 06:06
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 51 out of 52 changed files in this pull request and generated 7 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

atomantic and others added 5 commits February 7, 2026 08:58
- Default CLI runner timeout to 5min when undefined (prevents immediate SIGTERM)
- Clean up spawningTasks guard on all early-return paths in spawnAgentForTask
- Fix hasEnrichment array coercion (use .length instead of comparing array > 0)
- Fix createJob intervalMs mismatch when interval is omitted (weekly says daily)
- Merge DEFAULT_STATE into loaded taskTemplates state for backward compat
- Remove unused imports in taskTemplates test
Memory extraction was producing hundreds of low-value memories about
implementation details (file paths, CSS values, component names) that
any agent could discover by reading code. Redesigned the system to
prioritize durable knowledge about the user — their values, preferences,
work patterns, and aesthetic taste.
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 53 out of 54 changed files in this pull request and generated 5 comments.

Comments suppressed due to low confidence (1)

client/src/components/digital-twin/tabs/EnrichTab.jsx:208

  • submitAnswer sets submitting=true but doesn’t reset it if submitSoulEnrichAnswer throws. That can leave the UI stuck in a submitting state with no feedback. Wrap the async call in try/catch/finally (toast the error, and always setSubmitting(false) in finally).
    setSubmitting(true);

    const payload = {
      questionId: currentQuestion.questionId,
      category: activeCategory,
      question: currentQuestion.question
    };

    if (isScale) {
      payload.questionType = 'scale';
      payload.scaleValue = scaleValue;
      payload.scaleQuestionId = currentQuestion.scaleQuestionId;
    } else {
      payload.questionType = 'text';
      payload.answer = answer.trim();
    }

    await api.submitSoulEnrichAnswer(payload);

    toast.success(isScale ? 'Rating saved' : 'Answer saved');
    setSkippedIndices([]);
    await loadData();

    // Load next question
    await loadQuestion(activeCategory);
    setSubmitting(false);
    onRefresh();

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

atomantic and others added 3 commits February 7, 2026 10:12
…rage

Progress bars were hitting 100% around 50% through task execution because
they used the simple average duration. Now tracks maxDurationMs per task
type and computes a P80 approximation (avg + 60% of gap to max) for more
realistic progress bars and ETAs.
- Guard JSON.parse of metadata file in CLI runner close handler
- Add error handling to NextActionBanner submit (prevents stuck submitting state)
- Remove premature recordJobExecution from manual trigger route (deferred to job:spawned)
- Clear CLI timeout on close/error in digital-twin AI provider call
- Guarantee spawningTasks cleanup even if updateTask throws
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 56 out of 57 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

atomantic and others added 5 commits February 7, 2026 12:15
When both portos-server and portos-cos restart, two parallel orphan
cleanup paths race: server's cleanup (2s) marks agents completed in
cos state, then runner's cleanup (3s) emits orphan events that arrive
at handleAgentCompletion() with an empty in-memory map, causing noisy
warnings. Now checks cos persistent state as fallback - if already
completed, skips silently; if still running, handles completion properly.
Expanded the system diagram to show all PM2-managed satellite services
(CoS, Browser, Autofixer) with their communication paths. Added data
flow sections, directory entries, and key service descriptions for both
services.
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 57 out of 58 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@atomantic atomantic merged commit dbb097d into main Feb 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant