tinyhumansai/openhuman · error

todo_remove: {e}

Error message

todo_remove: {e}

What it means

Generic wrapper from todo_remove: deleting the card failed after the id argument read. The underlying {e} is the ops::remove error — most commonly no card with that id on the board.

Source

Thrown at src/openhuman/threads/todos/tools.rs:417

            "properties": {
                "thread_id": thread_id_prop(),
                "id": { "type": "string", "description": "Card id to remove (required)." }
            },
            "required": ["id"]
        })
    }

    fn permission_level(&self) -> PermissionLevel {
        PermissionLevel::Write
    }

    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {
        log::debug!("[tool][todos] remove invoked");
        let id = read_required_str(&args, "id")?;
        let location = board_location(&self.config, &args);
        let snapshot = ops::remove(&location, &id)
            .await
            .map_err(|e| anyhow::anyhow!("todo_remove: {e}"))?;
        snapshot_to_result(snapshot)
    }
}

/// Replace the entire board with a supplied card set. **Destructive** —
/// default-OFF.
pub struct TodoReplaceTool {
    config: Arc<Config>,
}

impl TodoReplaceTool {
    pub fn new(config: Arc<Config>) -> Self {
        Self { config }
    }
}

#[async_trait]
impl Tool for TodoReplaceTool {

View on GitHub (pinned to 7491200858)

Solutions

  1. Run todo_list and copy the card id exactly
  2. Confirm you are targeting the same thread (or scratch) board the card lives on
  3. Read {e} for the concrete removal failure
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at src/openhuman/threads/todos/tools.rs:417 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/fd49bd2bb0b52c72. Report an issue: GitHub.