Skip to content

Kid Mode: blocked-words content-output filter (planned) #138

Description

@BrettKinny

Status: planned / future work. Acknowledged in the README as not-yet-shipped, not a commitment to a near-term deadline.

What's missing

Kid Mode today applies prompt-level steering only — the persona prompt plus the per-turn sandwich (build_turn_suffix(kid_mode)_wrap_with_sandwich, custom-providers/pi_voice/pi_voice.py). That keeps responses age-appropriate and on-topic by instruction, but there is no post-generation content filter on any live path. A blocked-words output filter (content_filter() / _BLOCKED_WORDS_RE) existed only in the retired ZeroClaw bridge.py /api/message handler and exists in no live code today.

docs/faq.md already states this honestly ("If the LLM says something inappropriate, the stack passes it through").

Scope when picked up

  • Add a post-generation blocked-words filter to a module both live LLM providers (PiVoiceLLM, OpenAICompat) can import.
  • Wire it into the TTS-bound text on the live voice path, gated on kid_mode.
  • Verify on-device (red-team session) — must not ship unverified.

Out of scope here (split from the old red-team issue)

  • C3_voice_memory_search_blocking (memory_lookup FTS) has no namespace filter; person_pending:<id> review-queue rows can leak into recall. (Privacy, not content.)
  • H4/xiaozhi/admin/* routes are unauthenticated. (LAN auth, not content.)

These should get their own issues if still valid.

Supersedes the content-filter portion of #22 (red-team pass), now closed.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    safetySafety / correctness / child-safety bug

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions